¿Qué tipo de memoria permite la mayoría de las operaciones de lectura/escritura en paralelo por ciclo de reloj en una FPGA?

Si imagina una detección de movimiento básica en la que tiene dos cuadros almacenados en la memoria: un cuadro anterior de 640x480 y el cuadro actual de 640x480, ¿qué tipo de memoria (SRAM, DRAM, SDRAM, DDR SDRAM, etc.) permitiría la lectura/escritura más paralela ? operaciones por ciclo de reloj ? Por ejemplo, la solución perfecta permitiría la lectura simultánea de dos fotogramas (307.200 x 2 píxeles) en un ciclo de reloj. ¿Cuál es la mejor memoria para esto, la SRAM integrada en la FPGA o un chip externo como DDR SDRAM? (En el panorama general, estaría buscando una placa de desarrollo FPGA que tenga el menor costo y tamaño con la mayor capacidad de lectura/escritura en paralelo).

¿En realidad? Si asume un color de 24 bits, eso requeriría 14,74 Mbit por ciclo de reloj, por lo que incluso si usara DDR, ¡requeriría 7 millones de pines! ¿Por qué necesita tales velocidades?
Con un FPGA de gama alta y una memoria DDR3 de 64 bits de ancho funcionando a una frecuencia de reloj de 800 MHz, podrá transferir datos a aproximadamente 100 Gbps. Eso tomaría aproximadamente 150 uS para copiar dos cuadros.
Un Virtex-7 X1140T tiene 1880 BlockRAM cada uno con una interfaz de 72 bits -> 135.360 bits por ciclo. De vuelta a los dispositivos normales... Normalmente, uno estimaría cuántos MiByte/s necesita un determinado algoritmo...
Virtex-7 o DDR3 800MHz fpga no son "menor costo y tamaño". @ user2514676, creo que no aborda el problema de la manera correcta. La mayoría de las aplicaciones de video (nunca han hecho detección de movimiento, pero estoy bastante seguro de que no es "especial") leen cada píxel de cuadro una vez por pasada, manteniéndolo en registro/blockRAM tanto como sea necesario para el algoritmo, que generalmente es una cantidad limitada de línea. Como tal, su requisito es poder escribir 1 píxel y leer 2 píxeles en cada ciclo, lo que para 640x480 a 60 fps se podrá lograr con cualquier tecnología de memoria de los últimos 15 años.
Estás haciendo esto de la manera incorrecta. Si sus fotogramas son de una cámara de velocidad normal, tiene ~30 fotogramas por segundo y, por ejemplo, 600 000 000 ciclos de reloj por segundo. Por lo tanto, no procesa un cuadro en un ciclo de reloj y luego permanece inactivo durante los millones de ciclos de reloj restantes hasta el próximo cuadro. Lo haces un píxel o región a la vez.

Respuestas (1)

La RAM de bloque de puerto dual y la RAM LUT son prácticamente imposibles de superar, ya que están en la matriz FPGA y acceder a ella no requiere el uso de pines de E/S. Si no tiene suficiente capacidad en el bloque de RAM, entonces puede arrojar memoria externa al problema. QDR SRAM tiene dos puertos y, por lo tanto, tiene el doble de ancho de banda que SDRAM, esto puede ser útil para algunas aplicaciones, aunque es muy costoso. DDR3 SDRAM es probablemente la opción más económica, pero incluso esto es relativamente lento en comparación con lo que puede hacer con LUT RAM y Block RAM.

Creo que estás haciendo tu diseño de la manera incorrecta. Además, si necesita realizar un procesamiento real en tantas entradas, la lógica por sí sola consumiría una cantidad de área absolutamente gigantesca y es posible que no encaje en los FPGA más grandes disponibles en la actualidad. En lo que sobresalen los FPGA son en las operaciones de procesamiento canalizado de muy alta velocidad. Lo que debe hacer es averiguar cuántos píxeles por segundo necesita procesar (640x480xfps) y luego averiguar cómo implementar su algoritmo de procesamiento de imágenes para obtener ese nivel de rendimiento. En general, la idea es leer una pequeña cantidad de píxeles por ciclo de reloj y luego procesarlos de manera ordenada.