System verilog UVM:通过接口驱动时钟
我希望能够控制UVC接口上的时钟/数据对。控制数据是相对直接的。我绕轴的地方是时钟 如何控制接口中的时钟,使其可以选通关闭/打开?虚拟接口时钟分配到参考时钟应该在驱动程序中处理,还是在其他地方处理 我发现,如果在get_和_驱动器任务中处理了时钟分配,则不会发生时钟分配System verilog UVM:通过接口驱动时钟,system-verilog,uvm,System Verilog,Uvm,我希望能够控制UVC接口上的时钟/数据对。控制数据是相对直接的。我绕轴的地方是时钟 如何控制接口中的时钟,使其可以选通关闭/打开?虚拟接口时钟分配到参考时钟应该在驱动程序中处理,还是在其他地方处理 我发现,如果在get_和_驱动器任务中处理了时钟分配,则不会发生时钟分配 task get_and_drive(); vif.d_in <= 'b0; vif.clk_in = vif.ref_clk; // does not work forever begin seq_ite
task get_and_drive();
vif.d_in <= 'b0;
vif.clk_in = vif.ref_clk; // does not work
forever
begin
seq_item_port.get_next_item(req);
send_to_dut(req);
seq_item_port.item_done();
end
endtask : get_and_drive
任务获取和驱动();
vif.d_in您可以使用的最简单的方法是程序赋值。这是标准的一个更模糊的特征
task get_and_drive();
vif.d_in <= 'b0;
assign vif.clk_in = vif.ref_clk; // does not work
// ...
endtask : get_and_drive
任务获取和驱动();
中的vif.d_如果您不想使用程序分配,那么您必须为驱动程序添加一些基础结构。您需要一种基于clk_ref
和选通字段驱动clk_in
的方法:
bit clk_on;
task drive_clock();
forever @(vif.clk_ref iff clk_on) // sensitive to any change of the clock
vif.clk_in <= vif.clk_ref;
endtask
我猜您想从发送到dut(…)
任务内部控制时钟:
task send_to_dut(some_sequence_item req);
clk_on = req.clk_on;
// any other driving code here
endtask
下面是EDA游乐场上的一个简单示例,演示了这一点:
task send_to_dut(some_sequence_item req);
clk_on = req.clk_on;
// any other driving code here
endtask