12 votos

FPGA firmware de diseño: ¿de qué tamaño es demasiado grande?

Tengo una gran cantidad de procesamiento de la señal de transformación que debe ser portado desde matlab a VHDL. Se requiere, sin duda, algún tipo de intercambio de recursos. Un poco de cálculo me dio la siguiente:

  • 512 fft de 64 puntos
  • 41210 multiplicar-agregar operaciones

Teniendo en cuenta la mayor Virtex 6 FPGA ha ~2000 DSP48E bloques, sé que puedo recurso compartido con el fin de re-uso de los recursos en múltiples ocasiones. El tiempo de ejecución no es realmente un problema, el tiempo de procesamiento puede tomar un tiempo relativamente prolongado en FPGA términos.

Buscando en el uso de los recursos, el uso de radix-2 lite arquitectura me pone 4dsp bloques/operación FFT = 2048 DSP bloques, con un total de ~43k. mayor FPGA Virtex tiene 2k de bloques, o 20 operaciones/mux.

Obviamente incluyendo grandes une a la tela también va a tomar las rebanadas. Donde puedo encontrar el extremo superior de este límite? Yo no puedo infinitamente compartir los recursos de la FPGA. Es 41210 multiplicadores demasiado grande? ¿Cómo puedo calcular lo que es demasiado grande?

También he mirado en otros recursos (Rodajas, Brahms, etc). Radix-2 Lite también te da 4 x de 18 quilates de brams/fft = 2048 brams más grande de Xilinx FPGA contiene 2128 Brams. muy en el límite. Me preocupa que mi diseño es simplemente demasiado grande.


ACTUALIZACIÓN:

Algo más de información sobre el diseño en sí. Yo no puedo entrar en detalles, pero aquí es lo que puedo dar:

Initial conditions -> 512 ffts -> 40k multipliers ---------|----> output data to host 

                 ^------re-calculate initial conditions----|

salida datarate spec: "más rápido que el de simulación matlab"

los cálculos sabio, esto es donde estoy:

FFT etapa: fácil. Puedo implementar 1/2/4/8 Fft, almacenar los resultados en SDRAM y el acceso posterior. Relativamente pequeño, incluso si tarda mucho, está bien. el uso de radix-2 lite puedo conseguir 2 DSP48Es y 2 de 18 quilates de BRAMS/FFT. streaming da 6 DSP48Es 0BRAMS/FFT. en cualquier caso, 64 punto de FFT es pequeño en FPGA de recursos de términos.

Multiplicadores: este es mi problema. La multiplicación de las entradas son tomado de las tablas de búsqueda o datos FFT. De verdad que es sólo un montón de multiplicar-añade. No hay mucho que optimizar. No es un filtro, pero tiene características similares a un filtro.

Teniendo en cuenta el uso compartido de recursos de la FPGA, matemáticas funciona de la siguiente manera: Una LUT-6 puede ser utilizado como un 4-way mux. La fórmula para N-way, M bits mux es como sigue:

N*M/3 = number of luts, or N*M/12 = slices (4 LUTS/slice).

cálculo de las cifras para mi aplicación no da buenos resultados. El 90% de la virtix-6 la familia no tiene suficiente rodajas de recursos a compartir el Dsp para realizar 40k operaciones.

8voto

Brian Drummond Puntos 27798

Me pregunto si hay otra forma de mirar el problema?

Jugando fuera de su estimación de 512 FFT operaciones (64 punto cada uno) y 42k MAC operaciones... supongo que esto es lo que usted necesita para una sola pasada a través del algoritmo?

Ahora ha encontrado una FFT core con 4 unidades DSP ... pero, ¿cuántos ciclos de reloj se tarda por FFT? (el rendimiento, no de latencia)? Digamos 64, o 1 ciclo por punto. Entonces usted tiene que completar esos 42k Mac operaciones en 64 ciclos - tal vez 1k MACs por ciclo, con cada MAC manejo de 42 operaciones.

Ahora es el momento de mirar el resto del algoritmo en más detalle : identificar no MACs, pero un mayor nivel de operaciones (filtrado, correlación, lo que sea) que puede ser re-utilizado. Construir núcleos de cada una de estas operaciones, con la posibilidad de reutilización (por ejemplo, filtros con diferentes seleccionables por el coeficiente de conjuntos) y pronto usted puede encontrar relativamente pocos los multiplexores son necesarios entre las relativamente grandes núcleos...

También, es cualquier reducción de la fortaleza posible? He tenido algunos casos en los que las multiplicaciones en bucles se requiere para generar cuadráticas (y superior). Desenrollar ellos, yo podría generar de forma iterativa sin multiplicación : yo estaba muy satisfecho con mi mismo el día que me construyó una máquina diferencial en FPGA!

Sin conocer la aplicación no te puedo dar más detalles, pero algunos de estos análisis es probable que algunos de los principales simplificaciones posibles.

También - desde que suena como si usted no tiene una clara plataforma en mente, considere si puede partición a través de múltiples FPGAs ... echa un vistazo a este consejo o esta uno que ofrecen múltiples FPGAs en una plataforma conveniente. También tiene una junta con 100 Spartan-3 dispositivos...

(p.s. Yo estaba decepcionado cuando el software chicos cerrado esta otra pregunta - creo que es al menos tan apropiados)

Edit : volver a la edición - creo que están empezando a llegar. Si todo el multiplicador entradas son FFT salidas, o "no-filtro de" coeficientes, se están empezando a ver el tipo de regularidad que necesita explotar. Una entrada para cada multiplicador se conecta a una salida de la FFT, la otra entrada a un coeficiente de ROM (BlockRam implementado como una constante de matriz).

La secuenciación de FFT distintas operaciones a través de la misma FFT unidad pasará automáticamente la secuencia de la FFT salidas pasado este multiplicador. La secuenciación correcta de los coeficientes en el otro MPY entrada es ahora "sólo" una cuestión de organización de la correcta ROM direcciones en el momento correcto : un problema de organización, en lugar de un gran dolor de cabeza de la Une.

En el rendimiento : creo que Dave Tweed estaba siendo innecesariamente pesimista - la FFT tomando n*log(n) operaciones, pero puedes elegir O(n) mariposa unidades y O(logN) ciclos, o o(logN) y O(n) ciclos, o alguna otra combinación para satisfacer sus recursos y la velocidad de metas. Una tal combinación puede hacer que el post-FFT multiplicar estructura mucho más simple que otros...

2voto

GSerg Puntos 33571

Si este problema no tienen restricciones de tiempo real, y parece que no lo hace — usted sólo desea que se ejecute "más rápido", entonces parece que podría ser muy susceptibles a la aceleración en uno o más tarjetas gráficas. Hay varias bibliotecas de software que hacen de esta una forma relativamente sencilla de la proposición, y esto sería de alrededor de un orden de magnitud más fácil que ir directamente a la costumbre hardware FPGA.

Sólo Google para "GPU-habilitada la biblioteca" o "aceleración de la GPU de la biblioteca" para empezar a trabajar.

1voto

Alex Andronov Puntos 178

Es posible utilizar un hardware especializado o un FPGA (o incluso un CPLD) para acelerar ciertos tipos de operaciones matemáticas. La cosa clave a tener en cuenta cuando se trata de diseño de hardware (circuitos o lógica FPGA) para acelerar las operaciones matemáticas es averiguar cual es el orden de los datos se necesita para entrar y salir de su dispositivo. Un dispositivo con un eficiente sistema de e/S de diseño puede ofrecer un rendimiento mucho mejor que uno con una forma ineficiente de diseño, incluso si el último dispositivo requiere mucho más circuitos.

No he probado a trabajar en un hardware ayudar diseño de una FFT, pero he mirado en el hardware de asistencia para las grandes multiplicar las operaciones (como podría ser utilizada para el cifrado RSA). Muchos de los microcontroladores, incluso aquellos con especiales rápida multiplicación de hardware, no son muy eficientes en las operaciones que requieren una gran cantidad de registrar arrastrando los pies. Hardware el cual fue diseñado para minimizar el registro de intercambio podría alcanzar un mejor rendimiento con multi-precisión de la multiplicación de las operaciones, incluso si el hardware en sí no era tan sofisticada. Por ejemplo, el hardware que se puede realizar una canalizado 16xN multiplicación de dos bits al mismo tiempo (de cambiar en dos inferiores bits de multiplcand, y el cambio de dos bits más altos del resultado) puede lograr un mejor rendimiento de hardware que puede realizar un 8x8 se multiplican en un ciclo, aunque el primero puede tomar menos de circuitos (y, por virtud de la canalización, tienen un menor crítica de la ruta de datos). La clave es averiguar lo que el "bucle interno" el código necesario, y averiguar si hay ineficiencias que pueden ser fácilmente eliminados.

0voto

Stephen Denne Puntos 218

Lo poco que de un problema que nos de tiempo de ejecución?

Esto realmente parece como una situación en la que se debería implementar un soft-MCU, un FPGA con un sistema integrado de duro-MCU, o incluso una por separado MCU dispositivo, y serializar todas sus operaciones.

Asumiendo que usted tiene el tiempo de ejecución, haciendo su Fft en el software será mucho más fácil de depurar, y probablemente mucho más sencillo diseño.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X