条件付きGenerate
CoddyのVerilogジャーニー「RTL設計と検証」セクションの一部。レッスン 14/38。
generate-if は、定数 parameter を使用してハードウェア構造を選択します。特定のインスタンスに対してエラボレーションされるブランチは 1 つだけです。手続き型の if や、シグナルを使用する条件式は実行時に動作を選択するものであり、generate による構成を置き換えるものではありません。
関連する抜粋です。周辺の宣言と接続は課題内で提供されています。
generate
if(INVERT) begin: inverted
assign y = ~a;
end else begin: direct
assign y = a;
end
endgenerateparameter によって、このインスタンス用にどのドライバーを構築するかが選択されます。
定数の設定にはgenerate-ifを使用し、実行時の制御には通常のRTL選択を使用します。
チャレンジ
中級条件付きのgenerateを使用します:MODE=0 の場合は a をそのまま通し、MODE=1 の場合は a の 8 ビットすべてを反転します。入力 b は使用しません。MODE は 0 または 1 のいずれかです。テストベンチは両方の構成をインスタンス化し、y0、次に y1 を出力します。
design.vを完成させ、モジュール名とポートを保持してください。ロックされたtestbench.vが入力を変更し、値が安定した後に出力を表示します。+CASE=1のようなシミュレーター引数を使用してシナリオを選択します。標準入力は必要ありません。design に出力、遅延、またはシミュレーション終了処理を追加しないでください。期待される出力は、観測ごとに 10 進値を 1 行に並べ、値同士を 1 つのスペースで区切り、改行で終わる形式です。
自分で試してみよう
module dut #(parameter MODE=0) (input [7:0] a,b, output [7:0] y);
assign y=0;
endmoduleこのレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
RTL設計と検証のすべてのレッスン
自分で練習してみよう: Verilogオンラインコンパイラ