2017-07-27 6 views
1

は私が持っているループ「ながら」このようになりますOVMテストの一部として:特定のタイムアウト条件のチェック後にOVM/Verilogで「しばらく」ループを終了するにはどのよう

while (signal_val == 0) begin 
    signal_val = sla_vpi_get_value_by_name ("blah"); 
end 

私がしたいですこのループを120マイクロ秒間だけ制限し、その後で終了します。 120μsの最後にまだ(signal_val == 0)が満たされていない場合、テストを終了したいと思います。これをどのように達成するのですか?

テストから終了するために 'global_stop_request()'を呼び出す必要がありますが、固定のタイムアウト値(120μs)のwhileループの既存の状態をチェックしようとするのは難しいようです。また、 '休憩'は機能していないようです。何か案は?

は「ブレーク」この方法を使用してみましたが、「ブレーク」は構文エラーを与える:あなたが期待しているよう

while (signal_val == 0) begin 
    signal_val = sla_vpi_get_value_by_name ("blah"); 
    #120us; 
    break; 
end 
+0

「ブレーク」は機能しません。どのようにそれを適用しましたか? – Serge

+0

しかし、私はここで2つのことを認識しました。1. 'break'は構文エラーです。 2. 120マイクロ秒の遅延が追加されていますが、120マイクロ秒の間、条件がチェックされていません。 – chmod

+0

どのようなエラーメッセージが表示されましたか? – Serge

答えて

2

あなたのコードは動作しません。私たちは見てみましょう:

while (signal_val == 0) begin 
    signal_val = sla_vpi_get_value_by_name ("blah"); 
    #120us; 
    break; 
end 

signal_valはwhile文で最初に一度だけ評価され、それが0であるから、あなたはwhileループに入る

signal_valは、あなたの関数呼び出しによって返された値を取得しています。これは以前のwhileの評価と同じシミュレーションサイクルで発生します。変化がないと仮定すると、あなたが今、再び

戻り値として0を取得し、機能は120us

最後に、それはwhileループの外に壊れるのを待ちます。 signal_valは再度評価されません。

したい機能を実現するには、fork...joinとウォッチドッグタスク上記のコードで

fork 
    begin: wait_signal_val 
    while (signal_val == 0) begin 
     signal_val = sla_vpi_get_value_by_name ("blah"); 
     if (signal_val == 1) begin 
     `uvm_info(get_name(), "YES!! signal_val was seen as 1", UVM_LOW); 
     end 
     else begin 
     #20ns; // (or some clocking mechanism) 
     end 
    end 
    end 

    begin: watchdog 
    #120us; 
    `uvm_fatal(get_name(), "NOPE!! signal_val is still 0 after 120us. Killing test"); 
    end 
join_any 
disable fork 

、どちらかwatchdogまたはwait_signal_val仕上げを使用する必要があります。これが起こると、fork ... join_anyはフォークを完了して無効にします。

私はあなたのような機能をテストベンチでたくさん使っています。これはシームレスに動作します。

+0

私はちょうどあなたが答える前に、この問題の高低を調べることによって同様のものをコーディングしました。これは似ていると思いますか?そして、どちらのアプローチがより良いですか? '* fork looping_code; //プロセス1 #120us; //プロセス2 join_any global_stop_request(); * ' – chmod

+0

もし仕事をしたらいいよ!あなたのソリューションはよりエレガントに見えます。あなたが答えが好きだったら、受け入れてください:) – noobuntu

関連する問題