Verilog を介してチップのテストをいくつか実行していますが、少し頭を悩ませている問題に遭遇しました。コードのカバレッジをテストして、すべてのパラメーターのランダム化されたテストなどですべての状態が発生することを確認しています。
次のタイプの 2 つの値を評価する場合:
case(state_vector)
STATE1:
...
STATE2:
if(!var1 && var2)
state_vector = STATE1;
else
state_vector = STATE2;
STATE3:
...
ここでの問題は、カバレッジ分析を行う際に、else ステートメントの後のステートメントに決して到達しないことです。つまり、if ステートメントは常に true と評価されます。
当初、var1 と var2 の値はそれぞれ 0 と 1 であると想定していました。レポートを完成させる前に再確認したところ、この仮定が間違っていることに気付きました。波形解析では、シミュレーション全体で var1 が常に 1 であり、var2 が常に 0 であることが示されています。
ここで、値が希望どおりに変化することを確認するためにテストしますが、Verilog でこれがどのように発生するかについて興味があります。基本的に、if ステートメントが無限小単位の時間に対して true と評価されるため、状態に陥っています。
この問題をよりよく評価する方法についてのアイデアはありますか? 現在の状態を確認しようとしているときに、別の関数が state_vector を変更していないことを確認したいと思います。