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?
verilog
vlsi
system-verilog
asic
Anand
quelle
quelle
Antworten:
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.
quelle
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
#10
es 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#10
und#20
das 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.
quelle
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.
quelle