On 选项是有条件地触发一个事件。例如,您可以在界面中使用波纹管:
event mon_clk_ev;
bit mon_polarity;
always @(posedge clk) if ( mon_polarity) ->mon_clk_ev;
always @(negedge clk) if (!mon_polarity) ->mon_clk_ev;
然后您可以使用mon_clk_ev 作为监视器、接口、时钟块或断言中的时钟事件。
mon_polarity 可以由您的监视器、uvm_config_db 或其他逻辑分配。
使用 uvm_config_db 的示例(注意使用uvm_bitstream_t,因此可以使用 uvm_set_config_int plusarg 进行分配):
initial begin
start_of_simulation_ph.wait_for_state( UVM_PHASE_STARTED, UVM_GTE );
if (!uvm_config_db#(uvm_bitstream_t)::exists(null,"","mon_polarity")) begin
// default if not in database
uvm_config_db#(uvm_bitstream_t)::set(null,"*","mon_polarity",1'b1);
end
forever begin
void'(uvm_config_db#(uvm_bitstream_t)::get(null,"","mon_polarity",mon_polarity));
uvm_config_db#(uvm_bitstream_t)::wait_modified(null,"","mon_polarity");
end
end