Forum: FPGA, VHDL & Co. Eine Frage zu Metastabilität, Hazards und RTL


von Johannes P. (Firma: Zodiac) (nbgabber)


Lesenswert?

Hallo,

als absoluter Anfänger in der VHDL programierung bin ich an einem der 
warscheinlich von Anfängern meist gemachtesten Fehler überhaupt 
gescheitert. Nämlich dem falsche Umgang mit Takten und dem Umgang mit 
nicht syncronen Signalen etc... (Siehe meinen letzter Thread).
Nun stellt sich mir eine weitere Frage...
Also ich habe gelernt:
1. Asyncrone Signal von Außen müssen einsyncronisiert werden (gefahr 
Metastabilität)
2. es muss auf ein Aufbau nach Register Transfer Level (RTL) 
geachtetwerden (gefahr Hazards)

Nun habe ich mir selbst aber folgendes Zenario ausgedacht, welches auf 
mich, als mögliche fehlerquelle, wahrscheinlich wirkt:

Angenommen ich habe meine Schaltung nach RTL aufgebaut, also:
RegisterLevel1 -> kombinatorische Logik -> RegisterLevel2
nun stelle ich mir vor, das Routing von der CLK zum RegisterLevel2 ist 
um einiges länger als zum RegisterLevel1. Wen nun durch eine steigende 
Flanke an RegisterLevel1 die Eingangspegel der kombinatorischen Logik 
gesetzt werden, fängt die Logik an zu kalculieren (Hazards entstehen 
währen diesem Schritt) und Zeitgleich bekommt RegisterLevel2 die Flanke 
(zusätzlich entsteht durch Pegelwächsel verursacht von Hazards noch 
Metastabilität).

Besteht nicht tatsächlich diese Gefahr, wenn alle RegisterLevel mit der 
gleichen Flanke gesteuert werden? Und wenn nicht, warum?

Währe es nicht vielmehr sinnvoller ein RTL volgendermassen aufzubauen?:
Input->RegisterLeve1(steigend Flanke)->kombinatorische 
Logic->RegisterLevel2(fallende Flanke)->Output   -> Input->...

Also wenn ich eine architecture schreibe, dann alle eingänge über 
Register mit steigender Flanke einlesen Verarbeiten und über Register 
mit fallender Flanke ausgeben?

von user (Gast)


Lesenswert?

Ein FlipFlop (Register) hat setup und hold Zeiten die eingehalten werden 
müssen. Ein synthesetool stellt das sicher und gibt dir einen Report 
darüber.

von Karl (Gast)


Lesenswert?

Johannes Pnt schrieb:
> Besteht nicht tatsächlich diese Gefahr, wenn alle RegisterLevel mit der
> gleichen Flanke gesteuert werden? Und wenn nicht, warum?

Die Tools machen das so, dass sie den Clock-Tree ausbalancieren, so dass 
der Unterschied der einzelnen Clocks (=Skew) kleiner als die 
Setup/Holdzeiten ist. Wenn das nicht klappt, dann bekommst du das als 
Violation reportet.

Johannes Pnt schrieb:
> Währe es nicht vielmehr sinnvoller ein RTL volgendermassen aufzubauen?:
> Input->RegisterLeve1(steigend Flanke)->kombinatorische
> Logic->RegisterLevel2(fallende Flanke)->Output   -> Input->...

Sicher ein interessantes Thema, aber
a) nicht notwendig, siehe oben
b) damit halbierst du deine Taktperiode, bzw. verdoppelst du deine 
Taktfrequenz - damit muss die Synthese unnötig viel optimieren.
c) ineffizient. Z.B. nehme an du hast nen Counter, der ab und zu 
abhängig von den anderen Signalen inkrementiert wird. Mit welcher 
Flanke? Entweder du fragst das jedesmal ab, oder hast 2 Counter ... auf 
jeden Fall wird deine Beschreibung meistens komplizierter.

Allerdings: Bei Clockübergängen (z.B. von einer 20 MHz Domain in eine 10 
MHz Domain macht man das oft ähnlich, allerdings nicht mit der 
steigenden/fallenden Flanke, sondern mit 2 unterschiedlichen Timeslots 
des Clocks, d.h. man ändert das Signal, das übernommen werden soll, nur 
mit der geraden (bzw ungeraden) Phase ...

von Michael W. (Gast)


Lesenswert?

Solche Dinge sind eigentlich Thema der ureigensten Digitaltechnik. 
Signale, gleich welcher Art, werden bei jedem getakteten Chip 
"gesampelt" und können funktionell gesehen auseinanderlaufen, wenn man 
mehrere Bausteine betrachtet. Bei FPGAs ist das deshalb DAS Thema, weil 
dort viel Digitaltechnik drin steckt, die an verschiedenen Stellen des 
Chips sitzt, das FPGA aber gerne als ein Baustein gesehen wird.

Und es ist ein Thema, weil viele Designer aus der Softwareecke kommen 
und die Probleme nicht kennen :-)

Metastabilität: Ist so gut wie kein Thema mehr bei modernen FPGAs. Das 
ist ein Angstszenario aus den 90ern, als die Schaltzeiten noch gross 
waren. Wer verstanden hat, worum es geht und wie FPGAs gebaut werden, 
der erkennt, dass da so viele Reserven in den Taktbetrachtungen sind, 
dass reale METAs, die ab und an vorkommen, keine Wirkung zeigen können.

Hazards: Gibt es in FPGAs so gut wie nicht, weil dort synchron gebaut 
wird. Nur rein kombinatorische Pfade produzieren Hazards, dies aber auch 
nur kurz, wegen der hohen Schaltgeschwindigkeiten. Hazards sind deshalb 
vollkommen unerheblich, weil sie in synchronen Schaltungen in der 
Gesamtbetrachtung des nichtstabilen Kombipfades zwischen den Flanken 
untergehen. Bei FPGAs sind die typischen Massnahmen gegen Hazards, wie 
sie in ASICs verwendet werden, auch gar nicht so einfach umzusetzen, 
weil nämlich die Redundanz (das Standardwerkzeug gegen Hazards) 
wegsynthetisert wird. :-)

Was es bei FPGAs und auch sonst aber ständig gibt, ist das oben 
beschriebene Problem des Signalsampelns, das korrekt gemacht werden 
muss, weil sonst unterschiedliche Module im FPGA verschiedenene Zustände 
des Signals interpretieren. Richtiges Sampeln geschieht entweder mit 
einer externen Taktquelle wie bei Bussen weit weg von der edge der 
Daten, oder willkürlich mit einem internen Takt, wobei man dann damit 
rechnen muss, dass man die edge erwischt. Das ist entsprechend zu 
behandeln, entweder mit Mehrfachinterpretation eines Busses und Prüfen 
auf Konsistenz oder bei einem Signal, indem man es erstmal durch 
wenigstens 1 FF schickt, damit alles dahinter nur ein Signal sieht, dass 
sich nicht mehr zum Takt ändert. Mit META oder HAZARD hat das noch gar 
nichts zu tun.

Mich wundert immer wieder, dass ein jeder, der mit dem Thema beginnt, 
die exostischsteen Probleme hervorkehrt, diese zu behandeln versucht, 
aber das alltägliche Grundproblem digitaler Schaltungen nicht verstanden 
zu haben scheint: Den Übergang einer kontinuierlichen Zeit, wo andauernd 
alles passieren kann, hin zu einer diskretisierten Zeit, wo nur kurz 
nach den Takten eine logische Aktion geschieht und danach die Physik 
Zeit bekommt, sich auf die neue Solllogik einzuschwingen.

Wer richtig sampelt und seine Takte und deren Jitter im Griff hat, der 
hat weder ein Problem mit Hazards noch mit Metazuständen, da man dies 
ganz einfach dem Einschwingen der Kombinatorik zurechnen und zeitlich 
berücksichtigen kann. Das gilt für externe Chips, ASICS und FPGAs 
gleichermassen. Bei FPGAs tut das sogar die Synthesefunktion: Zwar wird 
nicht ausdrücklich Zeit für die Verzögerung durch META hinzugegeben, 
aber praktisch sind die Reserven derart gross, dass das dreimal erledigt 
ist.

Gedanken machen muss man sich über Jitter! Da schlampen die meisten und 
wundern sich dass sich die Schaltwerke verzählen, weil sie von viel zu 
stabilen Takten ausgehen.

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.