FPGA设计多功能数字闹钟.docx
- 文档编号:2475097
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:13
- 大小:93.44KB
FPGA设计多功能数字闹钟.docx
《FPGA设计多功能数字闹钟.docx》由会员分享,可在线阅读,更多相关《FPGA设计多功能数字闹钟.docx(13页珍藏版)》请在冰豆网上搜索。
FPGA设计多功能数字闹钟
设计题目:
设计多功能时钟
姓名:
胡涛
班级:
通信1203
学号:
20124422
指导老师:
龙惠民
设计要求:
(1)可以对小时、分、秒进行计数
(2)可以显示当前的时间(3)可以校对当前的时间(4)可以设置闹钟
设计分析:
本实验是是在Quartus||的环境下进行的一种基于FPGA的数字时钟。
该设计最后通过仿真实现预定功能。
电子时钟的时间显示是通过七段数码管显示的,其内部的时间控制输出是通过各种模块实现的,包括:
功能选择模块、时钟分频模块、校时模块、计时模块、闹钟模块、锁存模块、显示模块共七个部分。
实验原理:
显示时—分—秒、整点报时、小时和分钟可调等基本功能。
整个钟表的工作应该是在1Hz信号的作用下进行,这样每来一个时钟信号,秒增加1秒,当秒从59秒跳转到00秒时,分钟增加1分,同时当分钟从59分跳转到00分时,小时增加1小时,小时的范围为0~23时。
在实验中为了显示的方便,由于分钟和秒钟显示的范围都是从0~59,所以可以用一个3位的二进制码显示十位,用一个四位的二进制码(BCD码)显示个位,对于小时因为他的范围是从0~23,所以可以用一个2位的二进制码显示十位,用一个4位的二进制码(BCD码)显示个位。
实验中由于七段码管是扫描的方式显示,所以虽然时钟需要的是1Hz时钟信号,但是扫描需要一个比较高频率的信号,因此为了得到准确的1Hz信号,必须对输入的系统时钟50Mhz进行分频。
闹钟功能时,通过手动调整对其定时,若设定的时间与计数的时间相等时,发出闹铃声。
二:
单元模块的设计:
1、分频模块
源程序:
modulediv_50(clk,clk_1Hz);
inputclk;
outputclk_1Hz;
regclk_1Hz;
parameterN=999999;
reg[19:
0]Count;
always@(negedgeclk)
begin
if(Count==N)
begin
Count<=0;
clk_1Hz<=~clk_1Hz;
end
else
Count<=Count+1'b1;
end
endmodule
-测频控制器,使得频率计能自动测频
moduletestctl(clkk,cnt_en,rst_cnt,load);
inputclkk;//1HZ
outputcnt_en;
outputrst_cnt;
outputload;
regdiv2clk;
wirecnt_en;
regrst_cnt;
wireload;
always@(posedgeclkk)
div2clk<=~div2clk;
always@(clkkordiv2clk)begin
if(!
clkk&!
div2clk)rst_cnt<=1'b1;
elserst_cnt<=1'b0;
end
assignload=~div2clk;
assigncnt_en=div2clk;
endmodule
(参考FPGA实验5,仿真见实验5中)
2、功能选择模块
当mode0为0时,选择校时模块;当mode0为1时,选择计时和闹铃模块。
源程序:
modulemode(mode0,m);
inputmode0;
output[1:
0]m;
reg[1:
0]m;
always@(mode0)
begin
case(mode0)
1'b0:
m<=2'b00;//选择校时功能
1'b1:
m<=2'b11;//选择计时和闹铃功能
default:
m<=2'b00;
endcase
end
endmodule
仿真波形图
3、60进制计数模块
当秒脉冲clk1_1作为控制信号时,进行计时功能;当手动按键生成的方波信号clk1作为控制信号时,进行校时功能。
当计数满60时进位,并重新开始计数。
modulejishu_60(sel1,clk1,clk1_1,rst,out1,co);
inputclk1,clk1_1,rst;
inputsel1;
output[7:
0]out1;
outputco;
reg[7:
0]out1;
regco;
wireclk0;
/*选择控制信号是秒脉冲信号clk1_1还是手动按键生成的方波信号clk1*/
assignclk0=(sel1==0)?
clk1:
clk1_1;
always@(posedgeclk0ornegedgerst)
if(!
rst)
out1<=8'b0;//清零
else
begin
if(out1==8'h59)
begin
out1<=8'b0;//满60后清零,让其重新计数
co<=1'b1;//进位
end
else
begin
co<=1'b0;
if(out1[3:
0]==4'b1001)
begin
out1[3:
0]<=4'b0000;
out1[7:
4]<=out1[7:
4]+1'b1;//高位计数
end
else
out1[3:
0]<=out1[3:
0]+1'b1;//低位计数
end
end
endmodule
仿真波形图
4、24进制计数模块
当分的进位clk2_2作为控制信号时,进行计时功能;当手动按键生成的方波信号clk2作为控制信号时,进行校时功能。
当计数满24时清零,并重新开始计数。
源程序:
modulejishu_24(sel2,clk2,clk2_2,rst,out2);
inputsel2,rst;
inputclk2,clk2_2;
output[7:
0]out2;
reg[7:
0]out2;
wireclk0;
/*选择控制信号是分进位信号clk2_2还是手动按键生成的方波信号clk2*/
assignclk0=(sel2==0)?
clk2:
clk2_2;
always@(posedgeclk0ornegedgerst)
if(!
rst)
out2<=0;//清零
else
begin
if(out2==8'h23)
out2<=0;
else
begin
if(out2[3:
0]==4'b1001)
begin
out2[3:
0]<=4'b0000;
out2[7:
4]<=out2[7:
4]+1;//时高位计数
end
else
out2[3:
0]<=out2[3:
0]+1;//时低位计数
end
end
endmodule
仿真波形图
5、锁存模块
当sel4为0时,选择clk3信号(手动按键取反产生);否则选择clk4信号(秒脉冲取反产生)。
当控制信号的上升沿时,将计数器的值进行锁存。
源程序:
modulereg3(sel4,clk3,clk4,cq,led);
inputsel4;
inputclk3,clk4;
input[7:
0]cq;
output[7:
0]led;
reg[7:
0]led;
wireclk0;
/*选择控制信号是秒脉冲取反产生的clk4还是手动按键取反生成的方波信号clk3*/
assignclk0=(sel4==0)?
clk3:
clk4;
always@(posedgeclk0)
led<=cq;//锁存
endmodule
仿真波形图
6校时模块
拨动电平开关mode1,选择对时、分、秒进行校时。
当手动进行按键时产生方波信号key1作为校时时计数器的输入信号,使计数器计数,从而达到校时的目的。
源程序
modulecheck(mode1,key1,Q1,Q2);
input[2:
0]mode1;
inputkey1;
output[2:
0]Q1,Q2;
reg[2:
0]Q1,Q2;
always@(mode1orkey1)//当mode1或key1任意一个改变时,触发always模块
begin
case(mode1)
3'b001:
begin//产生秒校时的控制信号
if(key1==1)
Q1[0]<=1;
else
Q1[0]<=0;
end
3'b010:
begin//产生分校时的控制信号
if(key1==1)
Q1[1]<=1;
else
Q1[1]<=0;
end
3'b100:
begin//产生时校时的控制信号
if(key1==1)
Q1[2]<=1;
else
Q1[2]<=0;
end
default:
Q1<=3'b0;
endcase
end
always@(Q1)
Q2<=~Q1;//对Q1取反,产生锁存器的控制信号
endmodule
仿真波形图
7、定时模块
当手动产生的控制信号key2上升沿时,若sel3为0,对时、分清零;否则进行定时。
当mode2为0时,使分定时;当mode2为1时,使时定时。
源程序:
moduleclk(mode2,key2,sel3,min,hour,nclk);
inputmode2,key2,sel3;
output[7:
0]min,hour;
outputnclk;
reg[7:
0]min,hour;
regnclk;
always@(posedgekey2ornegedgesel3)
if(!
sel3)
begin
min<=0;//分清零
hour<=0;//时清零
end
else
begin
case(mode2)
1'b0:
begin
if(min==8'h59)
min<=0;
else
begin
if(min[3:
0]==4'b1001)
begin
min[3:
0]<=4'b0000;
min[7:
4]<=min[7:
4]+1;//定时分的高位
end
else
min[3:
0]<=min[3:
0]+1;//定时分的低位
end
end
1'b1:
begin
if(hour==8'h23)
hour<=0;
else
begin
if(hour[3:
0]==4'b1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 设计 多功能 数字 闹钟