3-8 译码器真值表
创建工程
按照真值表定义编写Verilog程序
module my3_8(a,b,c,out);
input a;
input b;
input c;
output reg [7:0]out;//定义一个8位的位宽.只要是在always块中进行赋值的都要定义为reg类型。
always@(a,b,c)
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
编写testbench信号
`timescale 1ns/1ns
module my3_8_tb;
reg a,b,c;
wire [7:0] out ;
my3_8 u1(
.a(a),
.b(b),
.c(c),
.out(out));
initial begin
a=0;b=0;c=0;
#200;
a=0;b=0;c=1;
#200;
a=0;b=1;c=0;
#200;
a=0;b=1;c=1;
#200;
a=1;b=0;c=0;
#200;
a=1;b=0;c=1;
#200;
a=1;b=1;c=0;
#200;
a=1;b=1;c=1;
#200;
$stop;
end
endmodule
将testbench文件链接到仿真工具
点击 前仿按钮进行仿真验证,仿真结果波形 如下, 与真值表对照发现波形是对的,说明 设计没有问题
点击全编译按钮后点击进行后仿,后仿结果如下
至此,整个3-8译码器就设计完成了,下面既需要对照开发板进行管脚设置和程序下载。
设置管脚,SW0~SW2对应a~c,LED7~0对应out【7:0】
点击全编译按钮后,上电链接开发板,点击programmer,将系统生成的.sof文件烧写到开发板中。
实验现象:按顺序波动拨动拨码开关,灯会按真值表的输出亮。