2対1 Muxの設計
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 64/90。
チャレンジ
マルチプレクサ(MUX)は、複数の入力から1つを選択し、選択信号に基づいて単一の出力へ転送するデジタル回路です。データセレクタのようなものと考えてください。複数の入力があり、どれを出力に送るかを選択します。
このプロジェクトでは、if-else 文および case 文を使用して、さまざまなサイズのマルチプレクサを作成します。
2対1マルチプレクサ
2対1マルチプレクサは最もシンプルな形式です。2つのデータ入力(in0 と in1)、1つの選択入力(sel)、および1つの出力(out)を持ちます。sel が 0 のとき、出力は in0 の値になります。sel が 1 のとき、出力は in1 の値になります。これを always @(*) ブロック内の if-else 文を使って実装します。
例: in0 = 0、in1 = 1、sel = 1 の場合、out = 1 となります。
2対1マルチプレクサは、選択信号に基づいて2つの入力のいずれかを選択し、出力に渡します。
真理値表
| sel | out |
|---|---|
| 0 | out = in0 |
| 1 | out = in1 |
sel が 0 のとき、出力は in0 の値になります。sel が 1 のとき、出力は in1 の値になります。
手順:
mux2to1という名前のモジュールを作成する- 入力
in0(1ビット)を追加する - 入力
in1(1ビット)を追加する - 入力
sel(1ビット)を追加する - 出力
out(1ビット、型reg)を追加する always @(*)ブロックを追加する- 内部に
if-else文を追加する:sel == 0の場合、out = in0に設定する- それ以外の場合、
out = in1に設定する
endmoduleで閉じる
自分で試してみよう
// ステップ1: mux2to1という名前のモジュールを作成
// ステップ2: 入力in0を追加
// ステップ3: 入力in1を追加
// ステップ4: 入力selを追加
// ステップ5: 出力outを追加(reg型)
// ステップ6: always @(*)ブロックを追加
// ステップ7: if-else文を追加
// sel == 0の場合、out = in0
// それ以外の場合、out = in1
// ステップ8: Endmodule