4対1 Muxの設計
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 65/90。
チャレンジ
4対1マルチプレクサ
4対1マルチプレクサには、4つのデータ入力(in0、in1、in2、in3)、2つの選択ビット(sel[1:0])、および1つの出力(out)があります。2つの選択ビットによって、どの入力が出力に渡されるかが決まります。
sel = 2'b00のとき、出力はin0sel = 2'b01のとき、出力はin1sel = 2'b10のとき、出力はin2sel = 2'b11のとき、出力はin3
このマルチプレクサを2つの方法で作成します。まず if-else 文を使用し、次のレッスンで case 文を使用します。どちらの方法も機能しますが、選択肢が多い場合は case の方がすっきりと記述できることが多いです。
4対1マルチプレクサは、2ビットの選択信号に基づいて4つの入力のうち1つを選択し、それを出力に渡します。
真理値表
| sel1 | sel0 | out |
|---|---|---|
| 0 | 0 | out = in0 |
| 0 | 1 | out = in1 |
| 1 | 0 | out = in2 |
| 1 | 1 | out = in3 |
sel が 00 のとき、出力は in0 に従います。sel が 01 のとき、出力は in1 に従います。sel が 10 のとき、出力は in2 に従います。sel が 11 のとき、出力は in3 に従います。
行うべきこと:
mux4to1という名前のモジュールを作成する- 入力
in0(1ビット) を追加する - 入力
in1(1ビット) を追加する - 入力
in2(1ビット) を追加する - 入力
in3(1ビット) を追加する - 入力
sel(2ビット) を追加する - 出力
out(1ビット、reg型) を追加する always @(*)ブロックを追加する- その中に、
selをチェックするif-else文を追加する:- もし
sel == 2'b00なら、out = in0とする - そうでなくもし
sel == 2'b01なら、out = in1とする - そうでなくもし
sel == 2'b10なら、out = in2とする - それ以外は、
out = in3とする
- もし
endmoduleで閉じる
自分で試してみよう
// ステップ 1: mux4to1 という名前のモジュールを作成します
// ステップ 2: 入力 in0 を追加します
// ステップ 3: 入力 in1 を追加します
// ステップ 4: 入力 in2 を追加します
// ステップ 5: 入力 in3 を追加します
// ステップ 6: 入力 sel (2ビット) を追加します
// ステップ 7: 出力 out (reg 型) を追加します
// ステップ 8: always @(*) ブロックを追加します
// ステップ 9: if-else 文を追加します
// もし sel == 2'b00 なら、out = in0
// そうでなくもし sel == 2'b01 なら、out = in1
// そうでなくもし sel == 2'b10 なら、out = in2
// それ以外なら、out = in3
// ステップ 10: Endmodule