Estoy empezando con VHDL de codificación y he hecho algunas básicos de procesamiento de imágenes en mi placa de desarrollo.
Me he dado cuenta de que la mayoría de los FPGA placas de desarrollo a menudo el uso de la memoria DRAM (SDRAM, DDRAM) como memoria RAM. Por ejemplo, estoy utilizando un FPGA dev junta de TERASIC y los usos de la memoria DRAM. Aunque la memoria DRAM parece ser más barato que el SRAM (RAM Estática), desde mi punto de vista no está optimizado para el procesamiento de la imagen, me explico: DRAM de acceder a los datos por bloque, SRAM pueda acceder a los datos (dirigida) byte por byte o palabra por palabra, o 36 bits en un momento, lo que sea). Esta característica es la más igualada de procesamiento de imágenes, por ejemplo, un simple filtro de media donde un píxel es la media de su vecino, dicen
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, usted necesita tener un buffer interno de al menos dos líneas para memorizar las líneas y-1
y y
(cabo el procesamiento de la y+1
de la línea). También parece tomar una gran cantidad de tiempo para Quartus para hacer este tratamiento simple (yo estoy usando 2ports FIFO).
Si la junta había utilizado SRAM como IS61LPS25632A de ISSI por ejemplo, el procesamiento sería sencillo desde la dirección de un píxel puede ser, por ejemplo,
ByteAdress <= x + (LINEWIDTH*y);
A partir de un hardware de punto de vista, con 9 de lectura/escritura de la memoria de ciclos de reloj, el proceso se realiza por una foto y con algunos trucos en el procesamiento en paralelo, esto puede ser mejorado, supongo. Entonces, a mi entender, verdad? Si no, ¿dónde está el error?
EDITAR:
El uso interno de la FPGA de la RAM no es una opción para mí, ya que no hay suficiente memoria dentro de la FPGA dispositivo que utilice (Cyclone III) y no sé si se paga más caro el kit de desarrollo sólo para tener algo más de RAM dentro de la FPGA es prudente.
Mi pregunta está más relacionado con la eficiencia del código. Digamos por ejemplo que uno tiene 8 mb de SRAM. Desde mi punto de vista, el código producido con este tipo de RAM será más eficiente (la velocidad y el almacenamiento en búfer) en el caso de 2D de procesamiento (como el procesamiento de la imagen), porque la verdadera acceso aleatorio es ideal para acceder a los datos con (gran) diferencia entre entonces, como en esta declaración:
ByteAdress <= x + (LINEWIDTH*y);
La reorganización de la información es mucho tiempo. Yo uso una cámara que envía los datos de los píxeles de forma secuencial, línea por línea. Sólo puedo almacenar estos datos en el puerto de dos FIFO RAM componente construido con la DRAM. Yo no puedo hacer incluso una simple transposición antes de almacenar los datos con este. Sorprendentemente no he encontrado ningún código en la web que se ocupa de esta 2D problema.