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

1

Primero, debo decir que todavía soy un principiante y que estoy aprendiendo VHDL, por lo que cualquier consejo es de mucha 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 un ROM , entonces puedo leer los valores y mostrarlos.

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 inclock and outclock , uno de ellos es 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 que la pantalla funcione.

Me imagino que el barrido de la pantalla tiene que estar sincronizado con la frecuencia con la que tienes que leer los valores de la ROM.

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

    
pregunta Santiago A.

1 respuesta

2

Sin respuesta por un día, déjame darle una oportunidad. Esa ROM es muy inusual. He sido ingeniero de ASIC durante más de 25 años y nunca he visto una ROM (o memoria) con un puerto y dos relojes.
Trate de encontrar el modelo para esa ROM o busque las especificaciones si es un elemento de la biblioteca FPGA. De no ser así, mi mejor conjetura sería utilizar 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 debes emitir tres señales analógicas en cada ciclo de reloj. (Y hsync, vsync + reloj pixel). Su ROM de 24 bits de ancho es probablemente RGB como 888, por lo que debe cerrar la ROM a 25 MHz.
Como alternativa, podría intentar usar un reloj opuesto para la dirección y los datos.

    
respondido por el Oldfart

Lea otras preguntas en las etiquetas