FPGA: forma eficiente de recopilar datos de muchos núcleos dentro de SoC

0

Estoy buscando una forma eficiente (en términos de huella) para recopilar datos periódicamente de una multitud de elementos de procesamiento (PE) dentro de un diseño basado en Spartan6.

Actualmente tengo 16 PE, pero cuando el diseño se amplía, puede llegar a 64. Cada PE genera dos palabras de datos de 16 bits ( A y B ) a una frecuencia de ~ 100 KHz. Los datos de salida de todos los PE deben recopilarse y sumarse a dos sumas ( A_sum y B_sum ). El reloj del sistema será > 100 MHz, así que tengo > 1000 ciclos de reloj para recopilar los datos de los PE.

La forma más fácil de hacerlo sería con dos multiplexores de 16 bits de ancho ( A_mux y B_mux ) con una entrada por PE cada uno. Para 16 PE, esto costaría 128 cortes más 512 líneas de interconexión dentro del chip, y se necesitarían 16 ciclos de reloj para recopilar los datos. Como no es necesario que sea tan rápido, me pregunto si hay una forma más eficiente de hacerlo.

Estaba pensando en serializar los datos de alguna manera. Esto ahorraría líneas de interconexión, pero usaría más porciones para implementar los serializadores en cada PE. También necesitaría registros de desplazamiento con salidas paralelas (por lo tanto, no SRL32) para la deserialización.

ACTUALIZAR

Algunos de ustedes sugirieron que yo podría haber contestado mi propia pregunta. La serialización obviamente viene a la mente, sin embargo, no estoy seguro de si realmente va a ser más eficiente. Mi pregunta no es tanto si la serialización es factible, pero me preocupa que los serializadores para cada PE usen más recursos FPGA que un multiplexor de 16 bits con entradas para cada PE. Tal vez haya una implementación inteligente en la que no haya pensado, pero me parece que Fat Mux es realmente la forma más eficiente de recursos. ¿Estoy equivocado?

    
pregunta travelboy

1 respuesta

1

Como dijo @Neil_UK, parece que ha respondido su pregunta y está buscando confirmación aquí. Independientemente de lo que digamos y aconsejemos aquí, la responsabilidad con su producto final sigue siendo con usted .

En segundo lugar, parece que se le ha encomendado el diseño de parte de FPGA / SoC del proyecto, y hay otros participantes que se ocupan de procesar los elementos. Si estuviera a cargo de todo el proyecto, esperaría ver algunas palabras de cómo se verían las PE para la comunicación en serie y en serie, y algunos cálculos de cuántos cables necesitarán las PE si se conectan con una interfaz paralela (16 cables * 64 elementos = 1024 cables). ) y cuántos multiplexores serán necesarios. Si estoy en lo cierto, entonces es necesario sincronizar entre otros desarrolladores dentro de su proyecto en la arquitectura de la solución antes de ir a la implementación y optimización de su parte.

Tercero,

  

Cada PE emite dos palabras de datos de 16 bits (A y B) a una frecuencia de ~ 100 KHz. ... El reloj del sistema será > 100 MHz, así que tengo > 1000 ciclos de reloj para recopilar los datos de los PE.

Calculemos cuánto tiempo pasará el diseño si solo habrá una entrada en serie única (por ejemplo, SPI) para 64 elementos: 100 kHz * 16 bits * 2 palabras * 64 PEs = 204 MHz (con una sobrecarga de protocolo cero), por lo tanto no lo hará con el reloj de 100 MHz de esta manera, primero debe diseñar la (s) arquitectura (s) que pueden manejar los requisitos antes de pensar en optimización .

Y como entiende por su propia pregunta, hay una compensación entre tener complejidad en FPGA (por ejemplo, elementos lógicos, registros, interconexiones, velocidad de reloj interna) y fuera de FPGA (número de cables de los PE). Más cables de PE significa que necesitará menos trabajo en el lado de FPGA y viceversa.

Actualizar (para la actualización de la pregunta y debajo del comentario):

Todavía no está claro acerca de la arquitectura de su solución. Parece que los PE están ubicados dentro del mismo FPGA? Me temo que no hay una respuesta correcta para su pregunta. Le sugiero que intente diseñar de dos maneras: en paralelo y en serie de 1 bit, y vea la diferencia en los recursos FPGA utilizados. He aquí por qué:

  1. paralelo utilizará pequeño mux en el lado PE de todos modos, para elegir entre 2 palabras (cambiar la dirección RAM); serial tendrá algo más de lógica en lado PE al serializar estas palabras, agregue aquí un poco de lógica de control y selección del PE actualmente en ejecución desde el lado de recepción de datos;
  2. la mayoría de los compiladores tienen capacidades integradas para optimizar las estructuras de hardware que crean, por lo tanto, optimizando las cosas usted mismo puede confundir al compilador y puede comenzar a realizar cosas estúpidas cuando optimiza, o incluso deja de optimizar. Un código más simple y uniforme es, mejor compilador puede optimizar.

Desde mi perspectiva, la comunicación en serie síncrona (1, 2, 4 bits) debe ganar en términos de recursos utilizados y energía consumida, pero perderá en términos de rendimiento. Pero necesitas experimentar.

    
respondido por el Anonymous

Lea otras preguntas en las etiquetas