0

peekの関数はuvm_regシミュレーション時間 0 で値を返すと思いました。この機能が必要だったので、すべての HDL バックドア アクセス パスを実装しました。これは、スコアボードで使用しているコードです

while (state == DISABLE) begin
  uvm_reg_data_t val = 'hDEADBEEF;
  uvm_status_e status;
  `uvm_info(get_name(), "Start peek", UVM_LOW)

  my_reg_block.my_reg.peek(status, val);

  `uvm_info(get_name(), "End peek", UVM_LOW)

  assert (val == 'h0)

  @posedge(my_vif.clk); //Advance clock

end

私の意図は次のとおりです。すべてのクロック サイクルで、ゼロ シミュレーション時間でmy_regstate==DISABLE.

my_regシミュレーションの実行では、変化する時間まではこれで問題ないことに気付きました。この時点で、Start peek -> End peek に約 10 クロック サイクルかかります。この時点で、私の状態はもはや DISABLE ではなく、もちろん val != 'h0. Peek が戻るまでに時間がかかるのはなぜですか?

Questasim 10.4a を使用しています

4

1 に答える 1

1

peek関数ではなく SystemVerilog タスクであるため、時間がかかる場合があります。

関数は 0 シミュレーション時間で実行されますが、タスクにもタイミング遅延が発生する可能性があります。

これがその定義です。

virtual task peek(  output  uvm_status_e    status,     
output  uvm_reg_data_t  value,      
input   string  kind     =  "",
input   uvm_sequence_base   parent   =  null,
input   uvm_object  extension    =  null,
input   string  fname    =  "",
input   int     lineno   =  0   )
于 2016-11-29T08:32:08.410 に答える