-1

Ich möchte einen SystemVerilog-Code synthetisieren, der Verzögerung als # 1 geschrieben hat, aber der Synthesizer gibt Syntaxfehler, da Verzögerung nicht synthetisierbar ist. Ich möchte wissen, gibt es eine Möglichkeit, dass ich eine Verzögerung geben kann, die synthetisiert wird? Zum Beispiel ist dies eine SystemVerilog-Assertion in dem Code mit VerzögerungenSynthetisierbare Verzögerung in Verilog

assert Eigenschaft ((req1 == 0) ## 1 (req1 == 1) ## 1! (Req2 == 1) || (gnt1 == 0));

Wie kann ich dies synthetisieren, ohne sein Verhalten zu verlieren?

Antwort

1

Eigenschaften sind nicht Teil von Verilog, sondern Teil von SystemVerilog. Mehr noch, die Eigenschaften selbst sind auch nicht synthetisierbar. Eigenschaften werden in cover oder assert Anweisungen in einer Simulationsumgebung verwendet.

Bei Verzögerungen ist die einzige Möglichkeit, ein Flip-Flop zu verwenden, um das Signal zu verzögern. In Ihrer Eigenschaft ##1 bedeutet "auf der nächsten Kante" unter der Annahme, dass Ihre Eigenschaft hat etwas Taktung in Bezug auf sie (entweder in der cover/assert-Anweisung oder dass es in einem Taktungs-Block ist).

Um synthetisierbaren Zyklus-Verzögerungen bei der sonst synthetisierbaren Code zu erstellen:

[email protected](posedge ck or posedge arst) begin 
    if(arst) 
    data_delayed <= '0; 
    else 
    data_delayed <= data; 
end 
+0

Ja, Sie haben Recht, die Eigenschaften im Code werden mit SystemVerilog Assertions angegeben. Ich versuche tatsächlich, den Hardwarebeschreibungscode in einen formal überprüfbaren Code umzuwandeln. Deshalb verwende ich Assertions, um Eigenschaften zu spezifizieren und sie an den Synthesizer zu übergeben, der zur Verifikation konvertiert wird. Der Synthesizer akzeptiert einfach nicht die verwendete Verzögerungssyntax, dh ## 1 in den Eigenschaften. Ist das oben Erwähnte der einzige Weg, die Verzögerung für den Synthesizer zu modellieren? – mii9

+0

Sie können keine Eigenschaften synthetisieren, und ich vermute, dass Ihr formaler Prüfer nicht funktioniert. In meiner (begrenzten) Erfahrung mit formaler Verifikation nimmt das formale Tool Ihre Implementierung als eine Eingabe und HDL-Eigenschaften als eine andere. Somit werden die Eigenschaften nicht synthetisiert und können normal geschrieben werden. Vielleicht sollten Sie eine andere Frage stellen, in der Sie mehr Informationen darüber geben, welches Werkzeug Sie verwenden und wie Sie es verwenden möchten. – Hida

1

Die Eigenschaft, die Sie keinen Sinn machen geschrieben. Sie können keine Verzögerungen in der Mitte eines booleschen Ausdrucks hinzufügen. Hast du vor, stattdessen eine Abfolge von Ausdrücken zu schreiben? Dann wäre die korrekte Syntax

sequence s1; 
((req1 == 0) ##1(req1 == 1) ##1 !(req2 == 1) || (gnt1 == 0)); 
endsequence 
+0

Ja, Sie haben Recht. Das ist der richtige Weg, sorry mein Fehler. Danke vielmals. Dennoch muss die Delay-Syntax für das angegebene Verhalten verwendet werden, und der Synthesizer gibt deshalb Syntaxfehler. Es funktioniert gut für die Eigenschaften ohne Verzögerungssyntax. – mii9