总线式38译码器
2024-04-30
19
0
总线式38译码器使用的地址线 wire a[2:0],输出为reg类output[7:0]。
源代码如下:
module mut38(input[2:0] a ,output reg [7:0] b);
always@(*)
begin
case(a)
3'b000: b<=8'b0000_0001;
3'b001: b<=8'b0000_0010;
3'b010: b<=8'b0000_0100;
3'b011: b<=8'b0000_1000;
3'b100: b<=8'b0001_0000;
3'b101: b<=8'b0010_0000;
3'b110: b<=8'b0100_0000;
3'b111: b<=8'b1000_0000;
endcase
end
endmodule
认知:
- 模块的信号必须指定方向,如input ,output.
- switch所谓的C语言中的,在verilog中就变成了case 和 endcase了。
仿真代码:
`timescale 1ns / 1ps
module mut38_tb();
reg [2:0] a;
wire[7:0] b;
mut38 mut32_inst(.a(a),.b(b));
initial begin
a<=3'b000;
#20
a<=3'b001;
#20
a<=3'b010;
#20
a<=3'b011;
#20
a<=3'b100;
#20
a<=3'b101;
#20
a<=3'b110;
#20
a<=3'b111;
end
endmodule
认知:
仿真写的临时变量,如reg,wire类型的,不需要input,output,因为只有模块接口需要。
仿真结果如下: