デコーダー設計
CoddyのVerilogジャーニー「基礎」セクションの一部 — レッスン 85/90。
チャレンジ
デコーダは、バイナリ数値を入力として受け取り、その数値に基づいて正確に1つの出力をオンにします。1つのビットだけが「ホット」(1)で、他のすべてが「コールド」(0)であるため、オンになる出力は「ワンホット」と呼ばれます。
真理値表 (2-to-4 デコーダ)
| 入力 (in) | out0 | out1 | out2 | out3 |
|---|---|---|---|---|
| 00 | 1 | 0 | 0 | 0 |
| 01 | 0 | 1 | 0 | 0 |
| 10 | 0 | 0 | 1 | 0 |
| 11 | 0 | 0 | 0 | 1 |
モジュールインターフェース
| ポート | 方向 | 幅 | 説明 |
|---|---|---|---|
in | 入力 | 2ビット | バイナリ入力 (0 から 3) |
out0 | 出力 | 1ビット | in = 00 の時にアクティブ |
out1 | 出力 | 1ビット | in = 01 の時にアクティブ |
out2 | 出力 | 1ビット | in = 10 の時にアクティブ |
out3 | 出力 | 1ビット | in = 11 の時にアクティブ |
あなたのタスクは、case 文を使用して以下のモジュールを完成させることです。
やるべきこと:
in = 2'b00のとき、out0 = 1、その他はすべて 0in = 2'b01のとき、out1 = 1、その他はすべて 0in = 2'b10のとき、out2 = 1、その他はすべて 0in = 2'b11のとき、out3 = 1、その他はすべて 0
自分で試してみよう
module decoder (
input [1:0] in,
output reg out0,
output reg out1,
output reg out2,
output reg out3
);
// TODO: case (in) を使用した always @(*) ブロックを追加する
// 2'b00: out0=1, その他は 0
// 2'b01: out1=1, その他は 0
// 2'b10: out2=1, その他は 0
// 2'b11: out3=1, その他は 0
endmodule