Autor Tema: como se evita el "Latch"  (Leído 4422 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado electrowolf

  • PIC12
  • **
  • Mensajes: 56
como se evita el "Latch"
« 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.

Código: [Seleccionar]
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

Código: [Seleccionar]
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

Desconectado facudelrojo

  • PIC10
  • *
  • Mensajes: 22
Re: como se evita el "Latch"
« Respuesta #1 en: 17 de Octubre de 2009, 02:30:06 »
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

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: como se evita el "Latch"
« Respuesta #2 en: 17 de Octubre de 2009, 22:36:43 »
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.




Desconectado Master_col

  • PIC10
  • *
  • Mensajes: 11
Re: como se evita el "Latch"
« Respuesta #3 en: 02 de Febrero de 2010, 03:10:48 »
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


 

anything