本文使用always中case方法来编写代码:
module decoder3_8(
input wire in1,
input wire in2,
input wire in3,
output reg [7:0] out
);
//out 根据输入的3 bit 信号选择输出对应的8 bit 的out信号。
always@(*)
case({in1,in2,in3})//{in1,in2,in3}是将三位输入信号串联起来,即case括号内的值是三bit 的信号000/001等
3'b000 : out = 8'b0000_0001; //输入与输出的 8 种译码对应关系
3'b001 : out = 8'b0000_0010;
3'b010 : out = 8'b0000_0100;
3'b011 : out = 8'b0000_1000;
3'b100 : out = 8'b0001_0000;
3'b101 : out = 8'b0010_0000;
3'b110 : out = 8'b0100_0000;
3'b111 : out = 8'b1000_0000;
//因为 case 中列举了 in 所有可能输入的 8 种情况,且每种情况都有对应确定的输出
//所以此处 default 可以省略,但是为了以后因不能够完全列举而产生 latch
//所以我们默认一定要加上 default,并任意指定一种确定的输出情况
default : out = 8'b1000_0000;
endcase
endmodule
当然也可以使用if-else方法,两者思维方式都是一样的。
接下来就是仿真代码的编写了。