FPGA设计开发(基础课题):七段数码管设计
一、设计目的
FPGA驱动七段数码管实现十六进制计数显示。
二、设计原理
七段数码管分共阳极与共阴极两种。共阳极数码管其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。共阴极数码管则与之相反,它是将发光二极管的阴极短接后作为公共阴极,当驱动信号为高电平、公共阴极接低电平时,才能发光。
上图为共阳极数码管和共阴极数码管的内部结构图
用七段数码管除了可以显示0~9的阿拉伯数字外,还可以显示一些英语字母。下表是常见的字母与7段显示关系(共阴极数码管)。
三、设计内容
编写一个0~F轮换显示的电路(注意:选用实验箱中的共阳数码管DP1A,FPGA上P25引脚连接50MHz时钟。实验时为了便于观察,要将50MHz时钟经过分频得到1Hz时钟)。LED、时钟与FPGA的引脚连接如下表所示。
四、设计结果
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)约束反会导致编码错乱。