2016-07-20 20 views
1

我在想如果我对监视器run_phase任务的uvm方法有所遗漏的理解。被测设备发出多个时钟,监视器正在监视并检查数据,保持不同的时钟域分离。所以我运行阶段的任务看起来像uvm监视器方法&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; 

我的“问题”是,如果CLK1和CLK2对齐则只有posedge语句之一被执行。此外,如果我希望监视器在第三个异步域上执行一些其他操作,例如在clk1或clk2的倍数处,那么当第三个域与clk1或clk2对齐时会出现问题。

显示器如何在运行阶段永久循环中在多个时钟域中工作?

回答

2

通常当监视两个不同的时钟域时,它们被保持为独立的永久循环线程。有可能你想有条件地禁用另一个时钟域,但我怀疑这是你的意图。

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