Menu Close

数码管显示译码及Verilog 代码实现

数码管显示译码及Verilog 代码实现

在上节内容中介绍了数码管的显示原理,本节内容根据显示原理进行Verilog代码的实现。设计要求如下,根据开发板FII-PRA006/010的硬件资源,输入采用开关sw1–sw3输入4位16进制数。输出在SEG1的6位数码管的最右边一个显示。开关sw1-sw4的图纸如图1,

%title插图%num 图1

开关SW,LED与FPAG的对应关系如表1,

表1

程序信号名 网络标号 FPGA管脚 端口说明
SW[3] SW3_LED3 87 sw第3位
SW[2] SW2_LED2 86 sw第2位
SW[1] SW1_LED1 83 sw第1位
SW[0] SW0_LED0 80 sw第0位

数码管的局部图纸如图2:

在图2中可以看出,最右边的数码管对应网络标号为SEG_3V3_D0。本实验中只用到一个数码管,而且是共阳极驱动,因此SEG_3V3_D0应为低电平,Q14(NDS336P)才会导通。

%title插图%num 图2

图2中8段数码管的各段的译码表如表2,

表2

段选信号 DP G F E D C B A
· 0 1 1 1 1 1 1 1
0 1 1 0 0 0 0 0 0
1 1 1 1 1 1 0 0 1
2 1 0 1 0 0 1 0 0
3 1 0 1 1 0 0 0 0
4 1 0 0 1 1 0 0 1
5 1 0 0 1 0 0 1 0
6 1 0 0 0 0 0 1 0
7 1 1 1 1 1 0 0 0
8 1 0 0 0 0 0 0 0
9 1 0 0 1 0 0 0 0
A 1 0 0 0 1 0 0 0
B 1 0 0 0 0 0 1 1
C 1 1 0 0 0 1 1 0
D 1 0 1 0 0 0 0 1
E 1 0 0 0 0 1 1 0
F 1 0 0 0 1 1 1 0

根据图1,图2,表1,表2的资源描述,Quartus II 下Verilog 的设计流程及代码如下:

  1. 新建工程

工程名SW_8SEG,顶层实体名称(top level entity)的名称为SW_8SEG,顶层文件的名称为 SW_8SEG.v。

2. 数码管显示译码

SW_8SEG.v的源文件如下:



  	/*


  mapping :


  SEVEN_SEG[0]   SEVEN_SEG[1]   SEVEN_SEG[2]   SEVEN_SEG[3]   SEVEN_SEG[4]   SEVEN_SEG[5]   SEVEN_SEG[6]

  ****A*******   ******B*****   ******C*****   *****D******   ******E*****    ******F****    *****G*****


  */


module SW_8SEG
(
    input      [3:0] SW,
    output reg [6:0] SEVEN_SEG,
    output           DP,
    output     [5:0] SEL
);

assign SEL = 6'b111110; //固定显示最右边的数码管,NDS336P 为P沟道MOS管,因此
assign DP = 1'b1;       //小数点非点亮

always@(*)
case(SW)
0:  	 SEVEN_SEG = 7'b100_0000;
1:  	 SEVEN_SEG = 7'b111_1001;
2:       SEVEN_SEG = 7'b010_0100;
3:  	 SEVEN_SEG = 7'b011_0000;
4:  	 SEVEN_SEG = 7'b001_1001;
5:  	 SEVEN_SEG = 7'b001_0010;
6:       SEVEN_SEG = 7'b000_0010;
7:  	 SEVEN_SEG = 7'b111_1000;
8:  	 SEVEN_SEG = 7'b000_0000;
9:  	 SEVEN_SEG = 7'b001_0000;
4'ha:    SEVEN_SEG = 7'b000_1000;
4'hb:    SEVEN_SEG = 7'b000_0011;
4'hC:    SEVEN_SEG = 7'b100_0110;
4'hd:    SEVEN_SEG = 7'b010_0001;
4'hE:    SEVEN_SEG = 7'b000_0110;
4'hF:    SEVEN_SEG = 7'b000_1110;
default: SEVEN_SEG = 7'b111_1111;
endcase

endmodule


  

3.    编译,管脚锁定:FPGA管脚映射如表3

表3

程序信号名 网络标号 FPGA管脚 端口说明
SEL[5] SEG_3V3_D5 124 位选信号第5位
SEL[4] SEG_3V3_D4 127 位选信号第4位
SEL[3] SEG_3V3_D3 129 位选信号第3位
SEL[2] SEG_3V3_D2 141 位选信号第2位
SEL[1] SEG_3V3_D1 142 位选信号第1位
SEL[0] SEG_3V3_D0 136 位选信号第0位
SEVEN_SEG[6] SEG_PG 135 段选信号G
SEVEN_SEG[5] SEG_PF 138 段选信号F
SEVEN_SEG[4] SEG_PE 126 段选信号E
SEVEN_SEG[3] SEG_PD 125 段选信号D
SEVEN_SEG[2] SEG_PC 133 段选信号C
SEVEN_SEG[1] SEG_PB 137 段选信号B
SEVEN_SEG[0] SEG_PA 132 段选信号A
DP SEG_DP 128 段选信号DP

按照表3的映射关系锁定管脚(如何锁定管脚请参照),如图3:

%title插图%num

图3

4.  重新编译,下载,在FII-PRA006学习板上进行验证。FPGA程序下载相关信息请参照FII-PRA006/010板载实验。拨动SW从0–F看看数码管是否正常译码。

 

实验视频:

 

练习题:如果要将译码结果显示在第二数码管上,如何修改源代码?

Posted in FPGA, FPGA, FPGA, FPGA硬件资源, Quartus II, Verilog, Verilog, 开发板, 教材与教案, 文章

发表评论

相关链接