2016-11-28 5 views
0

peekの関数uvm_regがシミュレーション時間0の値を返したと思いました。この機能が必要なので、HDLバックドアアクセスパスをすべて実装しました。クロック・サイクルごとに、ゼロシミュレーション時間に、my_regが0 state==DISABLEであることを主張する:これはだった私のスコアボードuvm_reg peek関数が返されるまでに時間がかかります

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_regが変更される頃までこれは問題ありません。その時点で、開始ピーク - >終了ピークは約10クロックサイクルかかります。この時、私の状態はもはや無効ではなく、ofcourse val!= 'h0です。なぜピックは戻ってくるのに時間がかかりますか?

私はpeekは、SystemVerilogのタスク、関数ではなくので、それは少し時間がかかる場合がありQuestasim 10.4a

答えて

1

を使用しています。

機能は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 ) 
+0

あなたが正しいです、それはおそらくシミュレーション時間を取ることができる仕事です。私はいつも0シミュレーション時間がかかることを私が読んでいるか分からない。これは本当ですか、私は間違っていますか? – noobuntu

+1

Nope。関数の場合にのみ、シミュレーション時間0で実行されると言うことができます。タスクの場合、100回のうち99回が実行されますが、0回のシミュレーション時間で実行される可能性がありますが、それでもタスクは確実ではありません。投稿が参考になった場合は、回答としてマークしてください。 –

関連する問題