FPGA数字跑表程序
- 格式:doc
- 大小:28.00 KB
- 文档页数:6
(1)跑表的计时范围为0.01s~59min59.99s,计时精度为10ms;
(2)具有异步复位清零、启动、计时和暂停功能;
(3)输入时钟频率为100Hz;
(4) 要求数字跑表的输出能够直接驱动共阴极7段数码管显示
/*信号定义
CLK:时钟信号;
CLR:异步复位信号;
PAUSE:暂停/启动信号;
MSH,MSL:百分秒的高位和低位;
SH,SL:秒信号的高位和低位;
MH,ML:分钟信号的高位和低位。*/
module h (clk,clr,pause,msh,msl,sh,sl,mh,ml,led1,led2,led3,led4,led5,led6);
input clk,clr;
input pause;
output [6:0]led1;
output [6:0]led2;
output [6:0]led3;
output [6:0]led4;
output [6:0]led5;
output [6:0]led6;
output [3:0] msh,msl,sh,sl,mh,ml;
reg [6:0]led1;
reg [6:0]led2;
reg [6:0]led3;
reg [6:0]led4;
reg [6:0]led5;
reg [6:0]led6;
reg[3:0] msh,msl,sh,sl,mh,ml;
reg cn1,cn2; //cn1为百分秒向秒的进位,cn2为秒向分的进位
//百分秒计数进程,每计满100,cn1产生一个进位1 always @(posedge clk or posedge clr)
begin
if(clr) //异步复位
begin
{msh,msl}<=8'h00; //从00开始计数
cn1<=0;
end
else
if(!pause) //PAUSE为0时正常计数,为1时暂时计数
begin
if (msl==9)
begin
msl<=0; //低位百分秒计数到10是归零
if (msh==9)
begin
msh<=0; //高位百分秒计数到10是归零
cn1<=1; //CN1触发进位
end
else //低位计数到10,高位未计数到10时,高位计数
msh<=msh+1;
end
else
begin //低位计数未到10时,继续计数
msl<=msl+1;
cn1<=0; //低位未计数到10时,CN1不产生进位
end
end
end
//秒计数模块,每计数满60,CN2产生一个进位always @(posedge cn1 or posedge clr)
begin
if (clr)
begin //异步复位
{sh,sl}<=8'h00;
cn2<=0;
end
else
if(sl==9)
begin
sl<=0; //低位秒计数到10,低位归零
if (sh==5)
begin
sh<=0; //低位计数到10,高位计数到6时,高位秒归零
cn2<=1; //cn2触发进位
end
else
sh<=sh+1; //低位计数到10,高位未到6时,低位计数end
else
begin
sl<=sl+1; //低位未计数到10,低位计数
cn2<=0; //低位未计数到10时,CN2不产生进位
end
end
//分钟计数模块,每计满60,系统自动清0
always@ (posedge cn2 or posedge clr)
begin
if(clr)
begin //异步复位
{mh,ml}<=8'h00;
end
else
if(ml==9)
begin
ml<=0; //低位分计数到10时,低位归零
if (mh==5)
mh<=0; //低位计数到10,高位计数到6时,高位归零
else
mh<=mh+1; //低位计数到10,高位未计数到6时,高位计数end
else
ml<=ml+1; //低位计数未到10时,低位计数
end
//led显示模块
always@(msl[3:0])
begin
case(msl[3:0]) //利用case语句控制显示低位百分秒的0~9
0:led1='b1000000;
1:led1='b1111001;
2:led1='b0100100;
3:led1='b0110000;
4:led1='b0011001;
5:led1='b0010010;
6:led1='b0000010;
7:led1='b1111000;
8:led1='b0000000;
9:led1='b0010000;
endcase
end
always@(msh[3:0])
begin
case(msh[3:0]) //利用case语句控制显示高位百分秒的0~9
0:led2='b1000000;
1:led2='b1111001;
2:led2='b0100100;
3:led2='b0110000;
4:led2='b0011001;