デフォルトでラッチを防ぐ
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 1/38。
組み合わせ出力は、すべての入力パスで割り当てる必要があります。alwaysブロックが出力の割り当てをスキップすると、その出力は古い値を保持し、ラッチが推論される可能性があります。default割り当ての後に上書きを行うことで、網羅性が明確になります。
関連する抜粋です。周囲の宣言と接続はチャレンジで提供されます。
always @* begin
y = 0;
if (en) y = data;
enddefault は無効化されたパスをカバーするため、出力は現在の入力のみに依存します。
すべての組み合わせ出力をすべてのパスで割り当て、条件付きの上書きの前にデフォルト値を使用します。
チャレンジ
中級ゲート付きの 8 ビット出力を実装してください。en が 1 のとき、y は a と等しくなり、それ以外の場合、y は 0 になります。すべての組み合わせ論理パスで y に値を割り当ててください。出力列:y。すべての刺激値は既知の 2 進値です。
design.v を完成させ、モジュール名とポートを保持してください。ロックされた testbench.v は入力を変更し、値が安定した後に出力を表示します。+CASE=1 のようなシミュレータ引数を使用してシナリオを選択します。標準入力は必要ありません。設計に表示、遅延、またはシミュレーション終了処理を追加しないでください。期待される出力は、観測ごとに 10 進値を 1 行に出力したもので、値は 1 つのスペースで区切り、末尾を改行で終了します。
自分で試してみよう
module dut (input en, input [7:0] a, output reg [7:0] y);
// このプレースホルダーをあなたのデザインに置き換えてください。
initial y = 0;
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
RTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ