【问题标题】:recomend the way to write a monitor in UVM with defferent event polarity推荐使用不同事件极性在 UVM 中编写监视器的方法
【发布时间】:2021-05-31 07:50:31
【问题描述】:

我正在尝试为 VDU(视频显示单元)实现监视器,而 VDU 的编程方式表明同步信号具有可控的极性。这意味着根据 VDU 设置,监视器应该对 @posedge 或 @negedge 事件做出反应。有没有办法通过配置数据库传递类型(意味着posesge或negedge)或做类似的事情。而不是写 if(truth) @posedge else @negedge。并且断言也需要以这种方式控制,但列表中的断言旨在将事件类型作为参数,但我不确定接口内是否允许配置数据库调用。

【问题讨论】:

    标签: system-verilog uvm system-verilog-assertions


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      您应该在编写代码时假定正极性,但通过 xor 运算符提供它们。

      logic signal;           // your signal from DUT
      logic signal_corrected; // signal with positive polarity
      bit signal_polarity;  // 0 = positive ; 1 = negative
      assign signal_corrected = signal ^ signal_polarity;
      

      现在您可以在断言中使用signal_corrected。如果已在您的测试平台中设置,您当然可以从interface 调用uvm_config_db#(bit)::get()。您可能需要使用uvm_config_db#(bit)::wait_modified() 等待它设置,然后再获取它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-29
        • 1970-01-01
        • 1970-01-01
        • 2014-05-05
        • 1970-01-01
        相关资源
        最近更新 更多