如何修改DUT的写延迟和读延迟的位bash序列?

How to modify bit bash sequence for write delays and read delays of DUT?

我有一个 DUT,写入需要 2 个时钟周期,读取需要 2 个时钟周期才能真正发生,我使用 regmodel 并尝试使用内置序列 uvm_reg_bit_bash_seq 但似乎写入和读取发生了在 1 个时钟周期延迟时,谁能说出模拟 2 个时钟周期延迟并验证这一点的有效方法是什么,以便处理 DUT 延迟。

现在遇到以下错误,

Writing a 1 in bit #0 of register "ral_pgm.DIFF_STAT_CORE1" with initial value 'h0000000000000000 yielded 'h0000000000000000 instead of 'h0000000000000001

我找到了一种方法,采用现有的 uvm_reg_single_bit_bash_seq 并通过添加 p_sequencer 进行修改,并根据 DUT 延迟在写入和读取方法调用后添加 2 个时钟周期延迟,这帮助我解决了这个问题,并在写入方法后添加了一个 get 调用,以避免在读取操作后获取旧值。

...
  `uvm_declare_p_sequencer(s_master_sequencer)

         rg.write(status, val, UVM_FRONTDOOR, map, this);
         wait_for_clock(2); // write latency
         rg.read(status, val, UVM_FRONTDOOR, map, this);
         wait_for_clock(2); // read latency
         if (status != UVM_IS_OK) begin
            `uvm_error("mtm_reg_bit_bash_seq", $sformatf("Status was %s when reading register \"%s\" through map \"%s\".",
                                        status.name(), rg.get_full_name(), map.get_full_name()));
         end

         val = rg.get(); // newly added method call (get) to fetch value after read
...

   task wait_for_clock( int m = 1 );
      repeat ( m ) begin
      @(posedge p_sequencer.vif.CLK);
      end
    endtask: wait_for_clock
...