Ik probeer een eevnoudige set/reset latch te creeren met de volgende code:
----------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
entity dlatch_reset is
port (
data : in std_logic; -- Data input
en : in std_logic; -- Enable input
reset : in std_logic; -- Reset input
q : out std_logic -- Q output
);
end entity;
architecture rtl of dlatch_reset is
begin
process (en, reset, data) begin
if (reset = '0') then
q <= '0';
elsif (en = '1') then
q <= data;
end if;
end process;
end architecture;
--------------------------------------------------
Bij de simulatie werkt deze prima.
Alleen bij de syntheze krijg ik de volgende warning die mij een beetje dwarszit:
"Latch generated from process for signal q, probably caused by a missing assignment in an if or case stmt"
Overigens gebruik ik een Lattice device en de Synplify synthese tool, ik vraag me af als je deze code in Xilinx of Altera synthesizer uitvoert of die ook deze warning geeft?
Moet ik me zorgen maken om deze warning?
library ieee;
use ieee.std_logic_1164.all;
entity dlatch_reset is
port (
S : in std_logic; -- Data input
R : in std_logic; -- Enable input
q : out std_logic -- Q output
);
end entity;
architecture rtl of dlatch_reset is
begin
process (R,S) begin
if R = '0' then
q <= '0';
elsif S = '0' then
q <= '1';
end if;
end process;
end architecture;
Hier een andere latch omschrijving:
--------------------------------------------------
Bij de syntheze hiervan krijg ik de volgende warning:
"Sequential instance q.Q.res_reg has been reduced to a combinational gate by constant propagation"
Wat willen ze hiermee zeggen?
Probeer latches zoveel mogelijk te vermijden in je design.
In simulaties werkt het wel maar in de praktijk ga je last krijgen van setup en hold tijden.
De ene keer lijkt het wel te werken, de andere keer weer niet.
Gebruik registers (is ook FPGA vriendelijker).
ST
flipflop
"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Op 9 december 2008 09:25:31 schreef Daryl_F:
"Latch generated from process for signal q, probably caused by a missing assignment in an if or case stmt"
Latches worden in de FPGA wereld over het algemeen als "fout" gezien. De Synplify ziet dat je toch een latch opschrijft en waarschuwt je dus voor een mogelijke bug in je code. Het is een warning, geen error.
Maar toch nog even stressen: gebruik geen latches als het niet heel erg nodig moet (bv om stroom te sparen in een ASIC). In een FPGA is het nooit nodig, dus gebruik flipflops. Dan blijft je design synchroon en voorkom je timing errors tijdens je synthese.