Erwünschtes Latch bei Moore-Automat?

Gast #3646049
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
Moderator (Firma: Titel) Persönliche Seite #3646082
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...
Moderator (Firma: Titel) Persönliche Seite #3646096
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?
Gast #3646337
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
Gast #3646419
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.
Moderator (Firma: Titel) Persönliche Seite #3646537
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...
Moderator (Firma: Titel) Persönliche Seite #3647591
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?"
Gast #3647603
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren