2016-07-20 13 views
1

Ich frage mich, ob ich ein Missverständnis über die uvm-Methodik des Monitors run_phase Aufgabe habe. Das DUT sendet mehrere Takte mit Daten aus, die der Monitor überwacht und überprüft, wobei die verschiedenen Taktdomänen getrennt bleiben. So sieht meine laufen Phase Aufgabe wieuvm Monitor Methodik & run_phase

forever begin 
fork 
begin @(posedge clk1) begin 
..code to capture data.. 
end end 
begin @(posedge clk2) begin 
..code to capture data in this domain... 
end end 
join_any 
disable fork; 

Mein ‚Problem‘ ist, wenn CLK1 und CLK2 ausgerichtet sind, dann nur eine der posedge Anweisungen ausgeführt wird. Zusätzlich, wenn ich möchte, dass mein Monitor einige andere Operationen an einer dritten asynchronen Domäne ausführt, sagen wir, bei einem Vielfachen von clk1 oder clk2 gibt es ein Problem, wenn die dritte Domäne mit clk1 oder clk2 aufläuft.

Wie soll der Monitor in mehreren Uhr-Domänen in seiner Run-Phase für immer Schleife funktionieren?

Antwort

2

Normalerweise werden beim Überwachen von zwei verschiedenen Taktdomänen diese als separate forever-loop-Threads beibehalten. Es könnte ein Szenario geben, dass Sie die andere Taktdomäne bedingt deaktivieren möchten, aber ich bezweifle, dass Sie das beabsichtigen.

fork 
    forever @(posedge clk1) begin 
    ..code to capture data.. 
    end 
    forever @(posedge clk2) begin 
    ..code to capture data in this domain... 
    end 
join // or join_none