Forum: FPGA, VHDL & Co. Verilog primitives timing


von Sukram (Gast)


Lesenswert?

Guten Tag,

wie ist bei den Primitives in Verilog das Delay genau definiert?
1
reg a,b;
2
not #3 (a,b);
3
4
initial begin
5
b = 1;
6
#1 b = 0;
7
end

Ist es immer so, dass der die Primitives den aktuellen Wert nehmen nach 
dem Delay, also a = 1 statt 0 hier in dem Fall zum Zeitpunkt 3?

Also entspricht not hier eher
#3 a = ~b;
statt
a = #3 ~b?

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Sukram schrieb:
> wie ist bei den Primitives in Verilog das Delay genau definiert?

Es handelt sich um ein propagation delay, d.h. die Änderung am Eingang 
wird nach der angegebenen Zeit am Ausgang sichtbar. Dein Code lässt sich 
aber nur als SystemVerilog übersetzen, da dort etwas entspanntere 
Zuweisungsregeln gelten. In Verilog müsste a zwingend als net 
deklariert sein.

> Also entspricht not hier eher
> #3 a = ~b;
> statt
> a = #3 ~b?

Unter der Annahme, dass die beiden Statements innerhalb eines Prozesses 
verwendet werden gilt:
Das erste Statement blockiert die Ausführung für drei Zeiteinheiten und 
führt die Zuweisung mit den nun aktuellen Werten aus. Das entspricht 
nicht dem Gatterverhalten.
Das zweite Statement enthält ein intra-assignment delay und entspricht 
theoretisch dem Verhalten des Gatters, hättest Du nicht ein blocking 
Statement verwendet. Damit verzögert sich die Ausführung des 
angenommenen Prozesses um den delay-Wert, was zur Unterdrückung 
zukünftiger Signaländerungen führen kann. Besser wäre ein non-blocking 
statement, bei dem aber Pulse, die kürzer als das delay sind, nicht 
unterdrückt werden (VHDL: transport). Das Gatter unterdrückt diese 
(VHDL: intertial).


Gruß
Marcus

von audi (Gast)


Lesenswert?


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.