¿Cómo puedo leer en una imagen en Verilog?

Tengo una imagen .mif que quiero cifrar en Verilog. Para hacerlo, necesito leer la imagen en el programa y almacenarla en una matriz.

La imagen sería de 160 por 120 y me gustaría almacenarla en una matriz de tamaño 160*120*3 (se multiplica por 3 ya que cada píxel requiere un número de 3 bits para almacenar su color). Entonces, idealmente, estaría haciendo algo como esto:

cable [16] imagen = leer ("miimagen.mif")

Hasta ahora, he echado un vistazo a los bloques iniciales y parece que podrían ayudar. Sin embargo, no pude encontrar una guía específica para leer en imágenes. Tenga en cuenta que tengo que hacer esto en Verilog, no en SystemVerilog.

¿Podría alguien mostrarme cómo hacer esto o al menos decirme qué tipo de cosas debería investigar para poder hacer esto? Gracias.

Respuestas (1)

En este caso, podría ser una buena idea preprocesar la imagen en un formato intermedio con un lenguaje de programación diferente que realmente tenga bibliotecas de manipulación de imágenes, como Python con PIL. Realmente no quiere tener que lidiar con el análisis del formato MIF en Verilog. Una vez que haya leído la imagen, puede escribir una matriz de 160x120 en un formato que pueda leer fácilmente en Verilog.

Gracias. Esto es para proyectos y uno de los requisitos es que no podemos usar lenguajes de programación. La imagen no tiene que estar en formato .MIF; solo supuse que debería estarlo, ya que todo mi trabajo con imágenes en el pasado usaba imágenes .MIF. ¿Qué formato me sugiere que use y cómo leería en ese formato?
El formato que elija depende en gran medida de lo que quiera hacer con la imagen. Por ejemplo, si desea mostrarlo en un TFT, puede elegir el formato raw 565 (16 bits).
Lo más probable es que un ppm o un bmp sean más fáciles de analizar que un MIF.
@alex.forencich ¡Leer en un bmp sería perfecto! ¿Cómo haría esto?
@ Majenko-notGoogle Dividiría la imagen en submatrices, cifraría las submatrices, las recombinaría en una imagen y luego mostraría esa imagen a través de VGA.
Los formatos sin procesar (565, 888, etc.) son más fáciles de trabajar en los niveles bajos, ya que son solo una matriz de datos de píxeles. Los formatos gráficos "reales" como BMP contienen datos de encabezado y, a menudo, compresión y otras cosas que se interponen en el camino. Cumplir con un bloque de datos de píxeles sin procesar significaría que simplemente los manipula como datos sin preocuparse realmente por el formato de la imagen: son solo píxeles.
Consulte en.wikipedia.org/wiki/BMP_file_format . Si guarda un mapa de bits de 24 bits o 32 bits de un tamaño conocido, entonces puede salirse con la suya simplemente omitiendo el encabezado y leyendo los datos de píxeles directamente.