Forum: FPGA, VHDL & Co. Erwünschtes Latch bei Moore-Automat?


von VHDL Neuling (Gast)


Lesenswert?

Hallo in die Runde!

Bin gerade dabei mir VHDL beizubringen und bin auf eine Frage gestoßen:

Ich habe folgende Entity für einen Moore-Automaten, welcher die 
Primzahlen von 2 bis 17 ausgeben soll:
1
entity PRIM is
2
   port( NEXTPRIME    : in std_logic;        
3
         CLK, RESET   : in std_logic;        
4
         SET2         : in std_logic;        
5
         PRIMENUM    : out std_logic_vector(7 downto 0)  
6
       );
7
end PRIM;

Der Automat hat einen asynchronen Reset und soll bei jeder negativen 
Taktflanke die nächste Primzahl ausgeben, wenn NEXTPRIME gleichzeitig 1 
ist, ansonsten im aktuellen Zustand verharren. Mittels SET2 kann man den 
Automaten synchron in den Anfangszustand versetzen:
1
architecture PRIME_beh of PRIME is
2
   type STATE_TYPE is (P2,P3,P5,P7,P11,P13,P17);
3
   signal state_now, state_next : STATETYPE;
4
5
begin
6
   process(CLK, RESET)
7
   begin
8
       if RESET = '1' then state_now <= P2;
9
       elsif falling_edge(CLK) then
10
              if NEXTPRIM = '1' then state_now <= state_next;
11
              elsif SET2 = '1' then state_now <= P2;
12
               --hier sind nicht alle Möglichkeiten ausprogrammiert,
13
               --der Automat soll im aktuellen Zustand state_now
14
               --verharren wenn beide Eingänge 0 sind (=erwünschtes Latch?)
15
              end if;
16
        end if;
17
    end process;
18
19
 ----Hier unten kommt noch die Ausgabe- und Zustandsübergangsfunktion
20
21
end architecture;

(Man nehme mal an, der Automat wird beim Einschalten durch einen Reset 
in einen definierten Anfangszustand gebracht)

Wie ist das nun mit den Latches? Ist die "Verwendung" hier zulässig?
LG

von peter (Gast)


Lesenswert?

Hallo, guten Tag.
Ist das unten richtig mit den beiden STATETYPE und STATE_TYPE ?

----------------------------
 type STATE_TYPE is (P2,P3,P5,P7,P11,P13,P17);
 signal state_now, state_next : STATETYPE;
----------------------------

von VHDL Neuling (Gast)


Lesenswert?

Hallo nein ist ein Tippfehler! Ebenso wie ich einmal NEXTPRIM und einmal 
NEXTPRIME verwendet habe! Kanns leider nicht mehr ausbessern :/

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

VHDL Neuling schrieb im Beitrag #3646049:
> Wie ist das nun mit den Latches? Ist die "Verwendung" hier zulässig?
Weil alles getaktet ist, kann es keine Latches geben. Es gibt also 
ausschließlich Flipflops. Und schlimmstenfalls noch einen Takt 
Latency...

VHDL Neuling schrieb im Beitrag #3646064:
> Kanns leider nicht mehr ausbessern :/
Das geht nur, wenn du angemeldet bist...

: Bearbeitet durch Moderator
von VHDL Neuling (Gast)


Lesenswert?

Okay, das bedeutet diese Schreibweise wäre erlaubt?

LG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

VHDL Neuling schrieb im Beitrag #3646085:
> Okay, das bedeutet diese Schreibweise wäre erlaubt?
Es ist auch "erlaubt", wenn du Latsches einbaust oder mit dem Hammer 
aufs FPGA haust. Du hast ja dafür bezahlt.
Nur wird es eben nach dem Bearbeiten mit dem Hammer oder nach dem 
Implementieren von Latches nicht mehr unbedingt /zuverlässig 
funktionieren/...

Auf jeden Fall wird das Design einfacher wartbar sein, wenn alles 
synchron zum Takt abgearbeitet wird. Auch der Reset. Oder zumindest das 
Deaktivieren des Resets.

>  elsif falling_edge(CLK) then
Warum die fallende Flanke? Das gibt mir dann üblicherweise zu denken...

VHDL Neuling schrieb im Beitrag #3646049:
> (Man nehme mal an, der Automat wird beim Einschalten durch einen Reset
> in einen definierten Anfangszustand gebracht)
Man kann auch annehmen, dass es dafür gar keinen Reset brauchst, sondern 
dass es das FPGA von sich aus macht. Und dann darf man fragen: wofür der 
Reset?

: Bearbeitet durch Moderator
von VHDL Neuling (Gast)


Lesenswert?

Hallo!

Das ganze wird nicht wirklich synthetisiert, sondern ist eine 
Übungsaufgabe von der Uni! Daher auch so Sachen wie "falling_edge()" 
etc!

von VHDL Neuling (Gast)


Lesenswert?

Gut aber eigentlich ist meine Frage geklärt:
Es entsteht kein Latch sondern ein FlipFlop! Daher ist diese 
Implementation zulässig, wenn für den wirklichen Gebrauch nicht ideal! 
=)

Danke für die Hilfe!

von Vanilla (Gast)


Lesenswert?

VHDL Neuling schrieb im Beitrag #3646148:
> Gut aber eigentlich ist meine Frage geklärt:
> Es entsteht kein Latch sondern ein FlipFlop!

> ...Daher ist diese Implementation zulässig>

Ein Latch ist für die Implementation auch "zulässig".
Viele FPGAs können Ihre Speicherelemente als FF oder als Latch 
konfigurieren (also nicht nur als kombinatorischer Feedback)...

Die Gefahren im echten Design liegen anderswo:
in der "unbeabsichtigten" Erzeugung eines Latches z.B. in einem 
ungetakteten Prozess... Selbige werden nicht innerhalb der FF/Latchzelle 
synthetisert sondern tatsächlich mittels Feedback in eine/mehrere Lookup 
Tables. Hierbei sind die Latenzen und Effekte kaum reproduzierbar, bzw. 
in einfacher Simulation "Behaverioral" nicht zu verifizieren...

und da dies ein so gern wiederholter und tückischer Fehler ist, warnen 
die Synthesetools vorsorglich vor jedem Latch im Design...


Gruß Vanilla

von greg (Gast)


Lesenswert?

VHDL Neuling schrieb im Beitrag #3646100:
> Das ganze wird nicht wirklich synthetisiert, sondern ist eine
> Übungsaufgabe von der Uni! Daher auch so Sachen wie "falling_edge()"

Was soll denn an falling_edge() problematisch bei der Synthese sein?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

greg schrieb:
> Was soll denn an falling_edge() problematisch bei der Synthese sein?
Es wird erst dann problematisch, wenn auch das zugehörige rising_edge() 
verwendet wird, und so die Taktfrequenz unbewusst bei 50% TV quasi 
verdoppelt (oder bei 33% TV sogar verdreifacht) wird.

von greg (Gast)


Lesenswert?

Lothar Miller schrieb:
> greg schrieb:
>> Was soll denn an falling_edge() problematisch bei der Synthese sein?
> Es wird erst dann problematisch, wenn auch das zugehörige rising_edge()
> verwendet wird, und so die Taktfrequenz unbewusst bei 50% TV quasi
> verdoppelt (oder bei 33% TV sogar verdreifacht) wird.

Klar, aber das seh ich hier nirgends. Außerdem kann das ja auch so 
gewollt sein. Es klang eben so als sollte man falling_edge() für 
synthesfähigen Code generell nicht verwenden, und das ist natürlich 
Blödsinn.

von Georg A. (georga)


Lesenswert?

> Was soll denn an falling_edge() problematisch bei der Synthese sein?

Gar nichts, wenn man den Aufgabentext richtig liest. Der 
Auswendiglern-Depp wird ("haben wir aber immer so gemacht, aufstampf" 
oder "fallende Flanke war in der Vorlesung nieeeeee dran") ein 
rising_edge hinschreiben und damit ein paar Punkte weniger bekommen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Georg A. schrieb:
> wenn man den Aufgabentext richtig liest.
Richtig.
VHDL Neuling schrieb im Beitrag #3646049:
>>> soll bei jeder negativen Taktflanke

greg schrieb:
> Es klang eben so als sollte man falling_edge() für synthesfähigen Code
> generell nicht verwenden, und das ist natürlich Blödsinn.
Das Problem beginnt erst, wenn sich besagter VHDL Neuling jetzt aber 
daran macht und ein weiteres Modul, das aus der Aufgabe "zeige eine Zahl 
mit jeder positiven Taktflanke an" entstanden ist, einfach geradeaus 
zusammenflanscht, weil ihm keiner gesagt hat, dass es ab hier glatt 
wird...

von Peter B. (funkheld)


Lesenswert?

---Latches----

Wie sehen Latches im compilat aus? Sind das Platzhalter die den Verkehr 
aufhalten bzw den Ablauf verlangsamen oder Speicher klauen...? oder sind 
das geschaffene Ersatzverdrahtungen---?

Danke.
Gruss

von Duke Scarring (Gast)


Lesenswert?

Peter Bierbach schrieb:
> Sind das Platzhalter die den Verkehr
> aufhalten bzw den Ablauf verlangsamen oder Speicher klauen...?
Wikipedia kennst Du schon, oder?
http://de.wikipedia.org/wiki/Latch

von greg (Gast)


Lesenswert?

Duke Scarring schrieb:
> Wikipedia kennst Du schon, oder?

Naja, der Artikel ist leider nicht der Brüller. Und das scheint mir 
merkwürdig, und hat keine Quellenangabe:

>  IBM und Intel entwickeln allerdings immer noch die meisten Schaltungen mit 
Latches als Grundelement.

von greg (Gast)


Lesenswert?

Fast vergessen, eine gute Erklärung gibt's hier:

http://blog.digitalelectronics.co.in/2004/12/latch-vs-flip-flop.html

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter Bierbach schrieb:
> Wie sehen Latches im compilat aus?
Latches sind oft versteckte kombinatorische Schleifen. Und ein Latch 
reagiert eben auch auf Glitches und kann so unverhofft seinen Zustand 
ändern...

Wieviele solcher Latch-Diskussionen haben wir eigentlich gerade?
Beitrag "Latches vermeiden?"

: Bearbeitet durch Moderator
von berndl (Gast)


Lesenswert?

greg schrieb:
> Duke Scarring schrieb:
>> Wikipedia kennst Du schon, oder?
>
> Naja, der Artikel ist leider nicht der Brüller. Und das scheint mir
> merkwürdig, und hat keine Quellenangabe:
>
>>  IBM und Intel entwickeln allerdings immer noch die meisten Schaltungen mit
> Latches als Grundelement.

Zumindest von frueher kenne ich das so: Master-Slave Latches. Am 
Master-Lt gibt es einen Scan-Eingang mit sog. A-clock, des weiteren 
einen Dateneingang mit sog. B-clock. An das Slave-Lt geht die sog. 
C-clock. Das ganze lief/laeuft unter dem Schlagwort LSSD 
(level-sensitive scan design).

Diese Latche sind schneller als flankengesteuerte FFs und brauchen wohl 
auch weniger Chipflaeche. Nachteil: Der Clock-tree ist aufwaendiger.

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.