十六进制七段LED显示译码器 静态显示
译码器是一类多输入多输出组合逻辑电路器件,其可以分为变量译码和显示译码两类。 变量译码器一般是一种较少输入变为较多输出的器件,如3-8译码器,显示译码器用来将数值转换成要显示的对应的符号。
任务描述
根据所学的组合逻辑及数字电路的知识利用VerilogHDL描述完成一个16进制7段数码显示译码器的设计,并进行验证测试。 熟悉Verilog HDL文本设计流程,掌握组合逻辑电路的设计仿真和硬件测试的方法。最后完善一个16进制7段数码显示译码器电路的功能描述风格Verilog HDL 代码。
实验目的
进一步学习和掌握使用Verilog HDL描述电路功能的编写,练习使用条件判断语句进行译码。
实验原理
十六进制数七段LED显示译码器也称为七段数码管,其示意图如下所示,包括七个LED管和一个圆形 LED小数点。按 LED单元连接方式可以分为共阳数码管和共阴数码管,共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到逻辑高电平,当某一字段发光二极管的阴极为低电平时,相应字段就点亮;当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管,共阴数码管在应用时应将公共极COM接到逻辑低电平,当某一字段发光二极管的阳极为高电平时,相应字段就点亮;当某字段的阳极为低电平时,相应字段就不亮。 在开发板电路上常用共阳极驱动数码管,要求设计对应的译码电路,其对应的显示译码器功能表如下所示,为了完整,将小数点也计算在内,如果不用小数点时,将其不点亮即可,即默认共阳极dp为高电平。规定seg_d[7:0] = {dp,g,f,e,d,c,b,a}。
实验过程及步骤
1、新建工程,工程名为shumaguanyimaqi 2、新建Verilog Module文件,命名为:shumaguanyimaqi 编写代码
module shumaguanyimaqi( input[3:0]data_in, input rst_n, output [7:0]LED ); reg [7:0]smg_duan; always@(*)begin case(data_in) 0:smg_duan=8hc0;//c0 1:smg_duan=8hf9; 2:smg_duan=8ha4; 3:smg_duan=8hb0; 4:smg_duan=8h99; 5:smg_duan=8h92; 6:smg_duan=8h82; 7:smg_duan=8hf8; 8:smg_duan=8h80; 9:smg_duan=8h90; 10:smg_duan=8h88; 11:smg_duan=8h83; 12:smg_duan=8hc6; 13:smg_duan=8ha1; 14:smg_duan=8h86; 15:smg_duan=8h8e; endcase end assign LED=smg_duan;
3、运行正确之后,查看RTL图 双击放大: 4、右击,选择New Source,选择Verilog Test Fixture,命名为shuziyima 编写仿真代码:
仿真测试代码 module shuziyima; // Inputs reg [3:0] data_in; reg rst_n; // Outputs wire [7:0] LED; // Instantiate the Unit Under Test (UUT) shumaguanyimaqi uut ( .data_in(data_in), .rst_n(rst_n), .LED(LED) ); initial begin // Initialize Inputs data_in = 0; rst_n = 0; // Wait 100 ns for global reset to finish #100; rst_n=1; data_in = 0; // Add stimulus here #5 data_in=0000; #5 data_in=0001; #5 data_in=0010; #5 data_in=0011; #5 data_in=0100; #5 data_in=0101; #5 data_in=0110; #5 data_in=0111; #5 data_in=1000; #5 data_in=1001; #5 data_in=1010; #5 data_in=1011; #5 data_in=1100; #5 data_in=1101; #5 data_in=1110; #5 data_in=1111; end endmodule
根据上面显示译码器功能表可知, 进行行为仿真,得到波形图如下:
5、完成引脚标注,下载到开发板上进行实物实验
NET "data_in[0]" LOC = L5; NET "data_in[1]" LOC = M3; NET "data_in[2]" LOC = L4; NET "data_in[3]" LOC = L3; NET "LED[0]" LOC = L10; NET "LED[1]" LOC = P9; NET "LED[2]" LOC = N9; NET "LED[3]" LOC = M9; NET "LED[4]" LOC = L7; NET "LED[5]" LOC = N8; NET "LED[6]" LOC = P8; NET "LED[7]" LOC = M7;