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