组合逻辑 3-8译码器实现
1 原理
什么是3-8译码器?
将三位的输入信号译码得到一个8位的输出信号
3位的信号的值是n,8位输出信号的第n位上数字就为1
- 源代码
module decoder_3_8(
a,
b,
c,
out
);
input a;
input b;
input c;
output reg [7:0] out;
//以Always块描述的信号赋值,被赋值对象必须定义为reg类型
//a、b、c变成了一个三位的信号,这种操作叫位拼接
always@(*) begin
case({a,b,c})
3'b000: out = 8'b0000_0001;
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;
endcase
end
endmodule
- 仿真代码
`timescale 1ns / 1ps
module decoder_3_8_tb(
);
reg a;
reg b;
reg c;
wire [7:0] out;
decoder_3_8 UUT(
.a(a),
.b(b),
.c(c),
.out(out)
);
initial begin
a=0;b=0;c=0;
#200; //延迟200ns
a=0;b=0;c=1;
#200; //延迟200ns
a=0;b=1;c=0;
#200; //延迟200ns
a=0;b=1;c=1;
#200; //延迟200ns
a=1;b=0;c=0;
#200; //延迟200ns
a=1;b=0;c=1;
#200; //延迟200ns
a=1;b=1;c=0;
#200; //延迟200ns
a=1;b=1;c=1;
#200; //延迟200ns
end
endmodule
- 功能仿真
根据功能仿真,我们可以发现,程序能满足我们的需求
- 分配管脚
程序能满足我们的需求
图中为abc=101 (5) 第5位亮