3-8 译码器的设计

 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文件烧写到开发板中。

 

实验现象:按顺序波动拨动拨码开关,灯会按真值表的输出亮。

 

 

 

posted @ 2017-07-16 15:19  noticeable  阅读(4478)  评论(0编辑  收藏  举报