十六进制七段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;
经验分享 程序员 微信小程序 职场和发展