FPGA设计开发(基础课题):七段数码管设计

一、设计目的

FPGA驱动七段数码管实现十六进制计数显示。

二、设计原理

七段数码管分共阳极与共阴极两种。共阳极数码管其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。共阴极数码管则与之相反,它是将发光二极管的阴极短接后作为公共阴极,当驱动信号为高电平、公共阴极接低电平时,才能发光。

上图为共阳极数码管和共阴极数码管的内部结构图

用七段数码管除了可以显示0~9的阿拉伯数字外,还可以显示一些英语字母。下表是常见的字母与7段显示关系(共阴极数码管)。

段 字母 a b c d e f g A 0 0 0 1 0 0 0 B 1 1 0 0 0 0 0 C 0 1 1 0 0 0 1 D 1 0 0 0 0 1 0 E 0 1 1 0 0 0 0 F 0 1 1 1 0 0 0 H 1 0 0 1 0 0 0

三、设计内容

编写一个0~F轮换显示的电路(注意:选用实验箱中的共阳数码管DP1A,FPGA上P25引脚连接50MHz时钟。实验时为了便于观察,要将50MHz时钟经过分频得到1Hz时钟)。LED、时钟与FPGA的引脚连接如下表所示。

芯片引脚 开发平台模块 AE13 HEX 1A AF13 HEX 1B AD12 HEX 1C AE12 HEX 1D AA12 HEX 1E Y12 HEX 1F V11 HEX 1G P25 Clk(50MHz)

四、设计结果

1、七段数码管源程序:

module div(clk,smg);

input clk;

output [6:0]smg;

reg [25:0] counter;

reg [6:0]smg;

reg [4:0]count;

always @(posedge clk)

begin

if(counter==50000000) counter <= 0;

else counter <= counter+1;

end

always @(posedge clk)

begin

if(count==17)

count<=0;

else if(counter==50000000) count<=count+1;

end

always @(posedge clk)

begin

if(count==1) smg<=7b0000001;

else if(count==2) smg<=7b1001111;

else if(count==3) smg<=7b0010010;

else if(count==4) smg<=7b0000110;

else if(count==5) smg<=7b1001100;

else if(count==6) smg<=7b0100100;

else if(count==7) smg<=7b0100000;

else if(count==8)smg<=7b0001111;

else if(count==9)smg<=7b0000000;

else if(count==10)smg<=7b0000100;

else if(count==11)smg<=7b0001000;

else if(count==12)smg<=7b1100000;

else if(count==13)smg<=7b0110001;

else if(count==14)smg<=7b1000010;

else if(count==15)smg<=7b0110000;

else if(count==16)smg<=7b0111000;

else smg<=7b1111111;

end

endmodule

2、仿真波形图:

上图为6分频仿真数码管七段各位的结果。

上图为50M分频结果,由于仿真时钟波形不够显示50000000次时钟波形,所以数码管输出结果未显示出。

3、管脚约束:

4、下载到试验箱上的结果:

上图为数码管从0~F轮换显示的结果,每隔一秒变换显示一次,同时也说明了时钟50MHz被成功分频为1Hz。

五、注意

约束管脚时将数码管高低位(a-g)约束反会导致编码错乱。

经验分享 程序员 微信小程序 职场和发展