Cómo leer valores de una ROM para controlar un monitor VGA

Primero, tengo que decir que todavía soy un principiante y estoy aprendiendo VHDL, por lo que cualquier consejo es de gran ayuda.

Lo que estoy tratando de hacer es controlar una imagen en un monitor VGA con un FPGA (Cyclone II), usando un archivo .mif con los bits correspondientes a esa imagen y cargándolos en una ROM , para luego poder leer los valores y mostrarles.

Mi problema surge cuando tengo que configurar los puertos para el componente que estoy usando en mi código.

architecture aa of VGA is

--some signal declarations here

component RomImage is
port(   address : in std_logic_vector(13 downto 0);
        inclock : in std_logic;
        outclock : in std_logic;
        qrom : out std_logic_vector(23 downto 0)
);
end component;

begin

RomIm : lpm_rom
generic map(lpm_file=>"GameOver.mif",lpm_numwords=>9500, lpm_width=>24, lpm_widthad=>14)
port map(address=>address,inclock=>inclock,outclock=>outclock,q=>qrom);

-- other process and logic

-- Output logic (only red, same for blue and green)

redout(9 downto 7) <= qrom(23 downto 21) when x>=225 and x<=415 and y>=250 and y<=300 else
                      rojo(5 downto 3);

Realmente no sé qué reloj tengo que usar para el inclock y el outclock , uno de ellos es para leer la dirección y el otro para la salida q[].
En el diseño entro con un reloj de 50 MHz y luego para el reloj VGA divido la frecuencia para obtener 25 MHz que es la que necesito para hacer funcionar la pantalla.

Me imagino que el barrido de la pantalla debe sincronizarse con la frecuencia en la que debe leer los valores de la ROM.

Lo siento si es demasiado código o confuso, intentaré expandirlo si es necesario

Respuestas (1)

No he recibido respuesta durante un día, así que déjame intentarlo. Esa ROM es muy inusual. Soy ingeniero ASIC desde hace más de 25 años y nunca he visto una ROM (o memoria) con un puerto y dos relojes.
Intente encontrar el modelo para esa ROM o busque las especificaciones si es un elemento de biblioteca FPGA. De lo contrario, mi mejor suposición sería usar el mismo reloj para ambos puertos. Usted dice que está trabajando en VGA, que requiere 25 MHz, por lo que probablemente sea su reloj de píxeles. Luego debe emitir tres señales analógicas en cada ciclo de reloj. (Y hsync, vsync + reloj de píxeles). Su ROM de 24 bits de ancho probablemente sea RGB como 888, por lo que debe registrar esa ROM a 25 MHz.
Alternativamente, podría intentar usar un reloj opuesto para la dirección y los datos.

A mí también me pareció inusual al principio, pero cuando revisé la documentación de lpm_rom, es simplemente que inclock es para registrar el bus de direcciones y outclock es para registrar el contenido de la memoria en q. Hay modo de reloj dual y modo de reloj único disponibles.
Ah, lo siento, como señaló Sourabh, la entrada es para la dirección y la salida es para la salida. Entiendo lo que quieres decir, la próxima vez que pueda lo intentaré y veré qué sucede, pero creo que ahora sé lo que tengo que hacer, ¡gracias!
Intente publicar la PREGUNTA DE FPGA AQUÍ