Gibt es eine Möglichkeit zu fragen, ob die Simulation unter @(posedge clk)
Ereignis neben der Verwendung eines benannten Ereignisses ist, die zur gleichen Zeit ausgelöst wird?Synchronisieren mit posegege of clock
Mit folgendem Code, kann ich sicherstellen, dass ich nur am posedge eine Uhr Sachen tun:
module tb;
bit clk;
always #2 clk = ~clk;
event pos_clk;
always @(posedge clk)
-> pos_clk;
initial begin
// stuff happens
@(posedge clk);
$display("[%0d] @(posedge clk)", $time());
// control is passed asynchronously to some task
// - since it's already at a posedge, it doesn't need to wait
some_task();
// other stuff happens
#1;
$display("[%0d] #1", $time());
// control is passed asynchronously to some task
// - since it's not at a posedge, it needs to catch the next one
some_task();
$finish();
end
task some_task();
wait (pos_clk.triggered);
$display("[%0d] wait (pos_clk.triggered)", $time());
// do relevant stuff
endtask
endmodule
Gibt es irgendeine andere Weise, die ich dies ohne das zusätzliche genannte Ereignis tun könnte?
Ich möchte die Synchronisation innerhalb einer Klasse durchführen, so dass eine Standardtaktung nicht funktioniert. Was ich im Grunde wollte, war, dass ein Fahrer einen Gegenstand nur an einem Posege bekam. Ich habe Probleme beim Ausführen von virtuellen Sequenzen bemerkt, die an mehreren Uhren arbeiten. Ich denke, die einzige Möglichkeit ist dann, etwas zu tun wie: auf die Uhr warten, prüfen, ob der Gegenstand verfügbar ist, wenn nicht, mach weiter, wenn ja, fang an zu fahren. Dies widerspricht der gesamten TLM-Philosophie, transaktionsgesteuert zu sein (d. H. Mit get_next_item()), aber gleichzeitig lebt der Treiber in beiden Welten (RTL und TLM) und muss beide Aspekte abstimmen. –
Auch wenn ich 'some_task()' synchron ausgelöst habe, möchte ich vielleicht eine Programm-Assertion schreiben, um diese Vorbedingung zu überprüfen (diese Ausführung hat tatsächlich bei einem posedge begonnen). –
Ich halte es immer noch für eine schlechte Methode, Sync- und Async-Verhalten in derselben Prozedur zu mischen. Aber ich denke nicht, dass Sie eine andere Wahl haben als das, was Sie ursprünglich gepostet haben. –