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?
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.
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.