¿Por qué no SRAM para FPGA en el procesamiento de imágenes?

7

Estoy comenzando con la codificación VHDL y he hecho un procesamiento básico de imágenes en mi placa de desarrollo.

Me he dado cuenta de que la mayoría de las placas de desarrollo FPGA a menudo usan DRAM (SDRAM, DDRAM) como RAM. Por ejemplo, estoy usando una placa de desarrollo FPGA de TERASIC y usa DRAM. Aunque la memoria DRAM parece ser más barata que la SRAM (RAM estática), desde mi punto de vista no está optimizada para el procesamiento de imágenes, permítanme explicar: Se accede a los datos DRAM por bloque, se puede acceder a los datos SRAM (direccionados) byte por byte (o palabra por palabra, o 36 bits a la vez, lo que sea). Esta función se adapta más al procesamiento de imágenes, por ejemplo, un filtro de media simple donde un píxel es la media de su vecino, por ejemplo,

Pix(x,y) = (Pix(x-1,y-1) + Pix(x,y-1) + Pix(x+1,y-1) + Pix(x-1,y) + Pix(x,y) 
           + Pix(x+1,y) + Pix(x-1,y+1) + Pix(x,y+1) + Pix(x+1,y+1))/9

es difícil de hacer con DRAM, necesita tener un búfer interno de al menos dos líneas para memorizar las líneas y-1 y y (haciendo el procesamiento en la línea y+1 ). También parece que Quartus tarda mucho tiempo en hacer este sencillo proceso (estoy usando 2ports FIFO).

Si la placa hubiera utilizado SRAM como IS61LPS25632A de ISSI, por ejemplo, el procesamiento sería sencillo ya que la dirección de un píxel puede ser, por ejemplo,

ByteAdress <= x + (LINEWIDTH*y);

Desde un punto de vista de hardware, con 9 ciclos de reloj de memoria de lectura / escritura, el proceso se realiza para una imagen y con algunos trucos en el procesamiento en paralelo, se puede mejorar, supongo. Entonces, ¿es cierto mi entendimiento? Si no, ¿dónde está el error?

EDIT:

El uso de la RAM FPGA interna no es una opción para mí, ya que no hay suficiente memoria dentro del dispositivo FPGA que uso (Cyclone III) y no sé si pagar por un kit de desarrollo más caro solo para tener más RAM dentro FPGA es juicioso.

Mi pregunta está más relacionada con la eficiencia del código. Digamos por ejemplo que uno tiene 8MB de SRAM. Desde mi punto de vista, el código producido con este tipo de RAM será más eficiente (velocidad y almacenamiento en búfer) en el caso del procesamiento 2D (como el procesamiento de imágenes) porque el verdadero acceso aleatorio es muy adecuado para acceder a datos con (gran) compensación entre entonces, como en esta declaración:

ByteAdress <= x + (LINEWIDTH*y);

La reorganización de la información requiere mucho tiempo. Yo uso una cámara que genera píxeles de datos secuencialmente, línea por línea. Solo puedo almacenar estos datos en dos puertos FIFO RAM componente construido con DRAM. No puedo hacer ni siquiera una simple transposición antes de almacenar los datos con esto. Sorprendentemente, no encontré ningún código en la web que se ocupe de este problema 2D.

    
pregunta user17828

3 respuestas

6

No hay razón fundamental por la que no. La SRAM síncrona es un acceso verdaderamente aleatorio, bastante económico y fácil de conectar.

Su inconveniente es que ocupa un nicho bastante estrecho entre la BlockRam en el chip (no mucho más pequeña, gratuita hasta que te obliga a seleccionar un chip más grande, masivamente paralelo y más flexible) y DRAM externa (capacidad de almacenamiento masivo a una El precio que SSRAM no puede igualar).

Por lo tanto, hasta 0.5 o 1MB, el SSRAM externo no es necesario, y por encima de 8MB o 16MB (¡los números pueden variar de acuerdo con su presupuesto y precios actuales!), el SSRAM se vuelve lo suficientemente caro como para que DRAM tome el control a pesar de sus límites. Luego, si necesita acceso aleatorio, debe reorganizar masivamente el cálculo para leer fragmentos (ráfagas o páginas) de DRAM en BlockRam, donde puede procesarlo rápidamente antes de volver a escribir ráfagas, etc.

Pero si tienes un rol para SSRAM dentro de esa ventana, hazlo. He agregado tableros SSRAM simples para aumentar las plataformas comerciales de FPGA donde sea necesario.

    
respondido por el Brian Drummond
3

La SDRAM es en realidad una muy buena opción para el procesamiento de imágenes, ya que tanto la capacidad como el ancho de banda (especialmente con DDR) se mejoran en relación con la SRAM. Junto con el uso de la SRAM en chip del FPGA como búferes de línea, permite que casi cualquier cálculo de imagen completa (incluyendo el FIR 2D que se proporciona como ejemplo) se canalice al punto en el que puede procesar un píxel por reloj. Si está trabajando con video HD en tiempo real, es esencial poder hacer esto.

No descuente la importancia de la capacidad. Los sensores de imagen modernos están en el rango de múltiples megapíxeles para video y 10s de megapíxeles para imágenes fijas. En muchas aplicaciones, se requieren múltiples buffers de marcos que tienen 4-6 bytes por píxel, para cosas como datos de corrección por píxel y procesamiento de imágenes de ping-pong. La memoria total requerida excede rápidamente lo que se puede implementar económicamente con SRAM.

Incluso si solo está interesado en imágenes fijas, los kits de desarrollo están diseñados para admitir una gama más amplia de desarrollo de aplicaciones. Por cierto, tengo una placa Terasic que tiene ambos DDR SDRAM y ZBT SSRAM.

    
respondido por el Dave Tweed
0

Creo que es necesario tanto la SRAM como la DRAM.

para la máscara de esfuerzo en la imagen SRAM es útil debido a la convolución. pero para almacenar el resultado de la imagen, Dram es eficiente.

    
respondido por el Ghm y

Lea otras preguntas en las etiquetas