私はUVMでテストベンチを実行しています。
fork
forever @(posedge trigger) begin
force dut.a = $urandom_range('h00,'hFF);
force dut.b = $urandom_range('h0, 'hF);
force dut.c = $urandom_range('h00,'hFF);
force dut.d = $urandom_range('h0, 'hF);
force dut.e = $urandom_range('h00,'hFF);
force dut.f = $urandom_range('h0, 'hF);
end
...
some other stuff
...
join_none
事は強制取得信号、Cと電子です:コンポーネントのrun_phase()
課題の一つで、私は、全体のシミュレーションを通る次のループを、開始するfork...join_none
を行います同じ値にする。 bと同じです。,dおよびeと同じです。
新しいトリガーが後であれば、新しい値はランダム化されて強制されますが、再びa == c == e
とb == d == e
が返されます。
$urandom_range
がパラメータの選択(0〜FF、0〜F)ごとに1回だけ呼び出され、3つのforce
コマンドに戻り値が再使用されたようです。
編集:私は、最小限のTB上の問題を再現することができました:http://www.edaplayground.com/x/4_ph
それは問題が消える他のツールを選択し、私が使用しているベンダーの問題のように見えます。
EDIT 2:これはなぜ起こるか私は正確に考え出したていないが、力文が連続割り当てのようなものであるという事実に関係しているように見える(すなわち、将来のRHS信号が変化した場合の力がのリリース dになるまで、強制的なLHSはそれに従います。これは '='割り当てとは異なります)。
私の推測では、問題は、関数の戻り値をRHSとして使用することにあります。 (私はこの返された値がどの生涯を持っているのかわかりません)
私の場合の解決策は静的寿命を持つ変数に$ urandom値を保存して、その変数をRTLに強制します
http://stackoverflow.com/help/mcve – toolic
投稿したコードは、実際に実行したコードとどのくらい近いですか? –
@ dave_59私はいくつかの文脈で投稿を編集しました。私はEDAのプレイグラウンドでそれを再作成しようとしていますが、私は現時点でアカウントに問題があります – chinocolerico