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
entityPRIMis
2
port(NEXTPRIME:instd_logic;
3
CLK,RESET:instd_logic;
4
SET2:instd_logic;
5
PRIMENUM:outstd_logic_vector(7downto0)
6
);
7
endPRIM;
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
architecturePRIME_behofPRIMEis
2
typeSTATE_TYPEis(P2,P3,P5,P7,P11,P13,P17);
3
signalstate_now,state_next:STATETYPE;
4
5
begin
6
process(CLK,RESET)
7
begin
8
ifRESET='1'thenstate_now<=P2;
9
elsiffalling_edge(CLK)then
10
ifNEXTPRIM='1'thenstate_now<=state_next;
11
elsifSET2='1'thenstate_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
endif;
16
endif;
17
endprocess;
18
19
----Hier unten kommt noch die Ausgabe- und Zustandsübergangsfunktion
20
21
endarchitecture;
(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
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;
----------------------------
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...
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?
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!
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
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?
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.
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.
> 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.
Georg A. schrieb:> wenn man den Aufgabentext richtig liest.
Richtig.
VHDL Neuling schrieb im Beitrag #3646049:
>>> soll bei jeder negativen Taktflankegreg 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...
---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
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.
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?"
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.