3-8译码器
基于XILINX BASYS 3板
3输入8输出,通过三个信号来控制8个信号
原理图
源代码
module decoder_3_8(
a,
b,
c,
out
);
input a;
input b;
input c;
output reg [7:0] out;
//位宽描述符【 :】
//也可添加语句 reg [7:0] out;
//以always块描述的信号赋值,被赋值对象必须定义为reg类型
always@(*)begin
//等价于:always@(a,b,c)
case({a,b,c})
//{a,b,c}原本三个一位的信号变成了,一个三位的信号(位拼接)
//wire [3:0]d;
//assign d={a,1'b0,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
测试激励
module decoder_3_8_tb;
reg s_a;
reg s_b;
reg c;
wire [7:0] out;
decoder_3_8 decoder_3_8(
.a(s_a),
.b(s_b),
.c(c),
.out(out)
);
initial begin
s_a=0;s_b=0;c=0;
#200;
s_a=0;s_b=0;c=1;
#200;
s_a=0;s_b=1;c=0;
#200;
s_a=0;s_b=1;c=1;
#200;
s_a=1;s_b=0;c=0;
#200;
s_a=1;s_b=0;c=1;
#200;
s_a=1;s_b=1;c=1;
#200;
end
endmodule
仿真
布局布线
分配管脚
依据图
set_property IOSTANDARD LVCMOS33 [get_ports {out[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {out[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports a]
set_property IOSTANDARD LVCMOS33 [get_ports b]
set_property IOSTANDARD LVCMOS33 [get_ports c]
set_property PACKAGE_PIN V16 [get_ports b]
set_property PACKAGE_PIN V17 [get_ports c]
set_property PACKAGE_PIN W16 [get_ports a]
set_property PACKAGE_PIN U16 [get_ports {out[0]}]
set_property PACKAGE_PIN E19 [get_ports {out[1]}]
set_property PACKAGE_PIN U19 [get_ports {out[2]}]
set_property PACKAGE_PIN V19 [get_ports {out[3]}]
set_property PACKAGE_PIN W18 [get_ports {out[4]}]
set_property PACKAGE_PIN U15 [get_ports {out[5]}]
set_property PACKAGE_PIN U14 [get_ports {out[6]}]
set_property PACKAGE_PIN V14 [get_ports {out[7]}]