Forum: FPGA, VHDL & Co. Frage zu Register aus D FF


von Chris R. (mrgreen)


Lesenswert?

Hi,
warum erzeugt der folgende Code die Warnung
"Warning (10631): VHDL Process Statement warning at E_Register.vhd(23): 
inferring latch(es) for signal or variable "Q", which holds its previous 
value in one or more paths through the process"
1
Save: process(D, Reset, Clk)
2
  begin
3
  
4
    if(Reset = '1') then
5
      Q <= (others=>'0');
6
    elsif (Clk'Event and Clk = '1') then  
7
    
8
      for i in n-1 downto 0 loop
9
        Q(i) <= D(i);
10
      end loop;
11
    end if;
12
13
  end process;


Was ist an der for-Schleife so schlimm? Kann ich sie einfach weglassen?
Die Zuweisung Q <= D; sollte das gleiche machen, oder...?

von Mathi (Gast)


Lesenswert?

Das sagt nut das Du nicht für alle Fälle dem Q einen Wert zuweist... 
Deswegen generiert Dir das Synthesetool ein Latch...

Außerdem gehört das D nicht in die Sensitivity-List. In synchrone 
Prozesse gehört nur Clk und maximal noch ein Reset.

von Mathi (Gast)


Lesenswert?

Ach ja... Das for ist auch überflüssig. Schreibt einfach Q <= D. Das 
tuts auch ;)

von Chris R. (mrgreen)


Lesenswert?

Ok danke soweit,
aber ist ein D FF nicht "transparent", wenn der Takt high ist? Das heißt 
jede Änderung vom D-Eingang wird währen Takt=1 am Ausgang sichtbar?
Dann müsste der Prozess doch auch auf D lauschen...

von glücklicher (Gast)


Lesenswert?

Das wäre ein latch, kein flipflop

von Mathi (Gast)


Lesenswert?

Muss nicht... Das ist ja implementierungsabhängig. Ich kenne D-FF 
eigentlich nur Flankengetriggered. Kannste aber auch mal implementieren. 
Dazu muss nur das Clk'event raus.

von Chris R. (mrgreen)


Lesenswert?

glücklicher wrote:
> Das wäre ein latch, kein flipflop

Ohja, Asche auf mein Haupt :)

von FPGA-Jeck (Gast)


Lesenswert?

das D in der sensetivity list ist falsch, das verursacht das latch

von Falk B. (falk)


Lesenswert?

@ FPGA-Jeck (Gast)

>das D in der sensetivity list ist falsch,

Ja, es ist überflüssig.

> das verursacht das latch

Nein.

Mfg
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.