TODOPIC
Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: electrowolf en 17 de Octubre de 2009, 00:22:27
-
Hola compañeros...como estan
de antemano mil gracias por la atencion y ayuda prestados.
mi problema es el siguiente:
hice un programa en VHDL para dibujar yn cuadro enla pantalla que cambia de color cada segundo, hay 8 combinaciones de colores, las cuales programe para que se cambien como menciones cada segundo.
resulta que compile el programa y no tuvo ningun error aparente, excepto una alarma que me dice que exite un "latch" en la señal que modifica el color, al bajarlo a la tarjeta, se visualiza el cuadro cambiando de colores, pero de los 8, solo muestra 4, para explicarme mejor, les paso e codigo que toy usando.
omitire parte del codigo para que no sea tanto y les abrume leerlo, solo ponre lo que creo necesario...claro que si necesitan alguna info mas pues avisan plz
clk es '1' cada 20 ns.
signal a : std_logic_vector (2 downto 0) := "000";
signal conttime : std_logic_vector (28 downto 0) := (others=>'0');
process(clk,conttime)
begin
if(clk'event and clk = '1')then
conttime <= conttime+1;
end if;
if conttime=X"2FAF080" then -- marca la llegada a un segundo
a <= a+1;
conttime <= (others=>'0');
end if;
end process;
--***************************************************************************
-- Cuadro a un cuarto del area del anterior
-- cuadro color rojo
RGB <= "100" when (conh > ("0100100111"+hbp) and conh < ("0101011001"+hbp)
and conv > ("0011010111"+vbp) and conv < ("0100001001"+vbp)
and vidon ='1' and a="000") else
-- cuadro de color verde
"010" when (conh > ("0100100111"+hbp) and conh < ("0101011001"+hbp)
and conv > ("0011010111"+vbp) and conv < ("0100001001"+vbp)
and vidon ='1' and a="001") else
-- cuadro de color azul
"001" when (conh > ("0100100111"+hbp) and conh < ("0101011001"+hbp)
and conv > ("0011010111"+vbp) and conv < ("0100001001"+vbp)
and vidon ='1' and a="010") else
-- cuadro de color amarillo
"110" when (conh > ("0100100111"+hbp) and conh < ("0101011001"+hbp)
and conv > ("0011010111"+vbp) and conv < ("0100001001"+vbp)
and vidon ='1' and a="011") else
-- cuadro de color blanco
"111" when (conh > ("0100100111"+hbp) and conh < ("0101011001"+hbp)
and conv > ("0011010111"+vbp) and conv < ("0100001001"+vbp)
and vidon ='1' and a="100") else
-- cuadro de color cyan
"011" when (conh > ("0100100111"+hbp) and conh < ("0101011001"+hbp)
and conv > ("0011010111"+vbp) and conv < ("0100001001"+vbp)
and vidon ='1' and a="101") else
-- cuadro de color magenta
"101" when (conh > ("0100100111"+hbp) and conh < ("0101011001"+hbp)
and conv > ("0011010111"+vbp) and conv < ("0100001001"+vbp)
and vidon ='1' and a="110") else "000";
--****************************************************************************
el error que me manda es el siguiente
Found 3-bit latch for signal <a>
los colores que se visualizan son el rojo, el amarillo, el magente y el cyan.
les comento que toy usando una tarjeta Spartan 3E, el ISE Web pack 9.2i
si necesitan alguna otra informacion como les dije...avisenme plz y nuevamente mil gracias por la ayuda.
Un saludo
-
Hola mira el problema creo q viene de que estas actualizando el valor de 'a' de manera asincrona o sea lo haces fuera del clk'event and clk='1' y me parece q deberia ir adentro. Esto es el warning q te tira, ahora el por q no te dibuja todas las combianciones de colores. Vas a tener verde, azul, rojo, negro(no lo vas a ver si tu fondo es negro), blanco, violeta(RyB) y los otros 2 salen del GyB y GyR estas 2 ultimas convinaciones no se q colores deberian de arrojar(es muy tarde para pensar jeje). Saludos y espero q te sirva.
Facundo Rossi
-
Para evitar el latch, las salidas deben ser sincronizadas con una señal de reloj global, es decir, debes usar un registro para que esa salida no lleve a la maquina de estados que toma ese dato a un estado ilegal.
-
si amigo la señal debe ser sincrona con el reloj incluye laparte de a+1 dentro del falnco de subida de clk y ya estas