Warum können Verzögerungen in Verilog nicht synthetisiert werden?


8

Ich habe immer gelesen, dass im RTL-Code deklarierte Verzögerungen niemals synthetisiert werden können. Sie sind nur für Simulationszwecke gedacht und moderne Synthesewerkzeuge ignorieren Verzögerungsdeklarationen im Code.

Zum Beispiel: x = #10 y;wird als betrachtetx = y; vom Synthesewerkzeug .

Was sind die Gründe, warum Verzögerungsdeklarationen in einer Hardwarebeschreibungssprache (z. B. VHDL, Verilog oder Sytem-Verilog) nicht synthetisiert werden können?


1
Dies ist eine Kreuzfrage, da sie zwischen der Überlappung von SO und ElectronicsSE liegt.
pre_randomize

Antworten:


14

Synthetisieren bedeutet , das, was Sie (hier in Verilog) beschrieben haben , irgendwie in echte Hardware umzuwandeln .

Jetzt sagen Sie in Ihrem Verilog, dass Sie eine Verzögerung von 50 ns haben. Ok, aber wie würden Sie dies in Bezug auf Hardware in tatsächliche Hardware umwandeln?

Wenn Sie ein FPGA verwenden, wie würden Sie Ihre Verzögerung von 50 ns mithilfe der verfügbaren FPGA-Ressourcen (LUT, Register, Ram-Element, ...) tatsächlich aufbauen? Durch Hinzufügen zusätzlicher Routing-Verzögerungen? Stellen Sie sich vor, Sie geben 1s Verzögerung an! Unmöglich, ohne ALLE Routing-Funktionen Ihres Chips zu nutzen (möglicherweise nicht genug). Ihr Design kann nicht angepasst werden. Gleiches gilt für einen ASIC. Sie würden 80% der Siliziumoberfläche verwenden, um einer Leitung eine Verzögerung hinzuzufügen.

Die Art und Weise, wie es funktionieren soll, ist, dass Sie synchrones Design verwenden und die Verzögerung selbst mithilfe von Zählern oder anderen Techniken implementieren. Verzögerungen müssen jedoch ein Vielfaches der Uhr dieses Elements sein.

Normalerweise finden Sie Dinge wie "nach 10 ns" Thesen sind Ausbreitungsverzögerungen. Bei einer idealen Simulation auf einem Verilog-Simulator erfolgen die Ausgaben genau dann, wenn sich die Eingaben ändern. Dies ist nicht realistisch und beschreibt nicht die Funktionsweise echter Hardware. Um dies zu berücksichtigen, können Sie mithilfe der Verzögerungsdeklaration angeben, nach wie viel Zeit Ihre Ausgabe geändert wird.


2
Ich werde bemerken, dass "weil es den gesamten Chip einnehmen würde" nicht wirklich ein Grund dafür ist, warum etwas nicht synthetisiert werden kann, sondern ein Grund, warum etwas nicht innerhalb der definierten Grenzen angepasst oder platziert werden kann.
W5VO

@ W5VO Du hast recht. Es sollte etwas Absurdes zeigen, das es rechtfertigen würde, einen anderen Weg zu finden. Korrigiert.
Blup1980

5

Portierung meiner Antwort von SO . Das konzentriert sich darauf, warum es unpraktisch ist, absolute Verzögerungen zu synthetisieren

Bei der Synthese von Taktbäumen gleicht das Synthesewerkzeug diese durch Hinzufügen von Verzögerungen aus, sodass alle Knoten die Uhr gleichzeitig empfangen. Es scheint also, dass das Synthesewerkzeug Verzögerungen hinzufügen kann.

Bei der Herstellung von ASICs gibt es jedoch Unterschiede in der Geschwindigkeit. Auf hohem Niveau kann dies als langsam, typisch und schnell angesehen werden. In der Praxis gibt es Hunderte von Variationen dieser Ecken, in denen bestimmte Gerätetypen im Silizium schnell und andere langsam laufen.

Diese Ecken des Siliziums haben auch eine Temperaturbewertung, der schlimmste Fall kann + 140 ° C schnelles Silizium und -40 ° C langsames Silizium sein. Die Variation der Verzögerung durch einen Puffer könnte in diesem Fall von 1 ns bis 30 ns betragen.

Um dies zu Verilog zurückzubringen, wenn #10es synthetisierbar wäre, würden Sie tatsächlich 155 + -145 erhalten, dh 10 ns bis 300 ns. Wenn Sie auch etwas entworfen haben #20, das Teil derselben Schnittstelle oder Steuerungsstruktur ist, wird es einen Bereich von 20 ns bis 600 ns haben . Daher ist das Ganze gegen Ihr Design nicht wirklich gültig. Sie erhalten nicht das genaue #10und #20das wurden angegeben.

Die Taktbäume sind so konzipiert, dass die maximalen und minimalen Verzögerungen begrenzt werden und alle Knoten im Taktbaum relativ zueinander skaliert werden. Sie erhalten niemals eine so strenge Regel, dass es # 10ns sein muss, da dies in einem kombinatorischen Schaltkreis physikalisch unmöglich zu garantieren ist.


3

Die einzige absolute Zeiteinheit wäre eine externe Uhr. Woher würde die willkürliche Verzögerung kommen - welche Art von diskreter digitaler Logik würde sie aus der Uhr erzeugen?

Wenn Sie eine synthetisierbare Verzögerung wünschen, müssen Sie den externen Takteingang und eine geeignete Zustandsmaschine / einen Zähler verwenden, die für eine bestimmte Anzahl von Taktzyklen zählen.


Dieser Gedanke kam mir gerade in den Sinn. Warum müssen wir uns auf die Uhr verlassen, um eine Verzögerung zu erzeugen? Warum kann die Verzögerung nicht mit Vdd zu einer einfachen RC-Schaltung synthetisiert werden?
Anand

1
Die Synthese füllt Werte hauptsächlich in Nachschlagetabellen und Routing-Elementen. Ich denke, es ist viel schwieriger, eine vor Ort programmierbare RC-Schaltung zu erstellen, insbesondere eine, die nicht zu stark von der Temperatur beeinflusst wird. Es ist viel einfacher, alles auf derselben Taktflanke zu synchronisieren, als auf genaue Laufzeit zu hoffen.
Maxy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.