解码器设计
本课属于 Coddy Verilog 学习旅程的“基础知识”单元。第 85 课,共 90 课。
挑战
译码器接收一个二进制数作为输入,并根据这个数恰好启用一个输出。启用的输出称为“独热”,因为只有一位是热的(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,其他输出都为 0 - 当
in = 2'b01时,out1 = 1,其他输出都为 0 - 当
in = 2'b10时,out2 = 1,其他输出都为 0 - 当
in = 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基础知识中的所有课
自己练习: Verilog 在线编译器