数字时钟设计Word文件下载.docx
- 文档编号:18793412
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:16
- 大小:237.12KB
数字时钟设计Word文件下载.docx
《数字时钟设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字时钟设计Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。
2、设计原理与方案:
工作原理说明:
clk用于输入50MHZ时钟,s1用于给小时加1,s2用于给分钟加1,s8用于复位。
分频器分出三个频率的时钟,clkout1输出1HZ,clkout2输出1千HZ,clkout1输出2HZ。
控制器输入端口t1用于控制灯闪烁,输出端口led接小灯,ss1、ss2、reset分别储存s1、s2、s8的值并将其传给计数器。
计数器输出端口shis表示小时的十位,shig表示小时的各位,mins表示分钟的十位,ming表示分钟的个位。
secs表示秒的十位,secg表示秒的个位。
显示器输出端口leds接七段数码管,wei接数码管的控制端。
当clkout1出现上升沿时,秒执行加1或进位操作,若秒进位,则分钟执行加1或进位操作,若分秒都进位,则小时进行加1或进位操作。
小时进位前5秒,灯开始以1HZ频率闪烁。
按下s1时小时加1或进位,按下s2时分钟加1或进位,若分钟进位,小时同时进行加1或进位操作。
三、整体效果图
整体仿真源文件:
图2整体仿真源文件
说明:
s1、s2、s8按下时为0,不按下时为1。
当s8按下时,全部归0。
当s1按下时,小时假1,当s2按下时,分钟加1。
输入波形中刚开始s8为0,归0。
然后让其运行一段时间,再让s1为0,再过一段时间让s2为0,再过一段时间让s8为0。
clk为脉冲信号,10ps一周期
输出放大截图:
图3输出仿真波形放大截图部分
说明:
仿真时计数器控制器都是12分频,灯闪烁是6分频,显示器是2分频,因此能看到输出的6个数码管的值。
并对其进行初步判断由于数码管数值不易分辨,所以不用全部看到。
RTL
(二)、各个电路子模块:
1.分频器设计方案
设计思路:
设计计数变量cout1、cout2、cout3,每来一个脉冲加1。
cout1加到50000000时归0,同时clkout1加1,否则clkout1归0。
cout2到25000000时归0,同时clkout2加1,否则clkout2归0。
cout3到25000000时归0,同时clkout3加1,否则clkout3归0。
源程序:
modulefenpin(clk,clkout1,clkout2,clkout3);
inputclk;
//下载时clk为50MHz
outputclkout1,clkout2,clkout3;
//clkout1输出1赫兹,clkout2为1千赫兹,clkout3为2赫兹
regclkout1,clkout2,clkout3;
integercout1,cout2,cout3;
//cout1,cout2,cout3均为计数变量
always@(posedgeclk)
begin
cout1<
=(cout1==32'
d50000000)?
32'
d0:
(cout1+32'
d1);
clkout1<
d5*******)?
1'
d1:
d0;
//50000000分频
cout3<
=(cout3==32'
d25000000)?
(cout3+32'
clkout3<
d2*******)?
//25000000分频
cout2<
=(cout2==32'
d50000)?
(cout2+32'
clkout2<
//50000分频
end
endmodule
//仿真时,改clkout1为12分频,clkout2为2频,clkout1为6分频
//下载时,由于clk为50MHz,改clkout1为50000000分频,输出1赫兹,clkout2为50000分频,输出1千赫兹,clkout3为5000000分频,输出2赫兹
分频器仿真源文件:
图5分频器仿真源文件
仿真输出文件:
图6频器仿真输出文件
2.控制器设计方案
控制器输入端口t1用于控制灯闪烁,输出端口led接小灯,ss1、ss2、reset分别储存s1、s2、s8的值并将其传给计数器
ss1、ss2、reset储存s1、s2、s8的值传给计数器执行其他功能。
这一部分由1赫兹进行驱动。
led是灯,t1为1时led闪烁。
这一部分由2赫兹进行驱动。
modulekongzhi(clkout1,clkout3,s1,s2,s8,t1,led,ss1,ss2,reset);
inputclkout1,clkout3,s1,s2,s8,t1;
//clkout1输入1赫兹,clkout3输入2赫兹,t1控制闪烁
outputled,ss1,ss2,reset;
//led是灯,ss1、ss2、reset储存s1、s2、s8的值传给计数器
regled,ss1,ss2,reset;
always@(posedgeclkout1)
begin
reset=s8;
ss1=s1;
ss2=s2;
always@(posedgeclkout3)
if(t1==1)led=~led;
elseif(t1==0)led=0;
//当t1=1时闪烁,否则不闪
Endmodule
控制器仿真源文件:
图7控制器仿真源文件
clkout1的周期是clkout3的一倍。
s1、s2、s3均有0和1出现,t1之后为1
控制器仿真输出文件:
图8控制器仿真输出文件
从图中可以看出s1、s2、s3的值分别赋给了ss1、ss2、reset。
Led在t1为1时闪烁。
3.计时器设计方案
判断ss1是否为0,若为0,小时加1或归0。
同时判断ss2是否为0,若为0,则分钟加1或归0并进1。
同时判断reset是否为0,若为0,全部归0。
若不为0则嵌套if语句判断sec、min、shi的值并进行加1或归0操作。
当59分54秒到59秒时让t1为1,灯闪烁。
其他时候t1为0,灯灭。
modulejishu(clkout1,ss1,ss2,reset,shis,shig,mins,ming,secs,secg,t1);
inputclkout1,ss1,ss2,reset;
//clkout1为1赫兹,ss1、ss2、reset是储存的s1、s2、s8的值
output[1:
0]shis;
//小时的十位
output[3:
0]shig;
//小时的个位
output[2:
0]mins;
//分钟的十位
0]ming;
//分钟的个位
0]secs;
//秒的十位
0]secg;
//秒的个位
outputt1;
//返回闪烁的控制变量
regt1;
reg[5:
0]shi;
//小时
0]min,sec;
//分钟,秒
begin
if(ss1==0&
&
shi<
24)shi=shi+1;
//s1为0和shi小于23时,小时加1
shi==24)shi=0;
//s1为0和shi等于24时,小时变0
if(ss2==0&
min<
60)min=min+1;
//s2为0和min小于60时,分钟加1
min==60)beginmin=0;
t1=0;
end//s2为0和min等于60时,分钟变0if(reset==0)beginshi=0;
min=0;
sec=0;
end//执行复位功能
elseif(sec==59)beginsec=sec+5;
//sec为59是sec归0,判断min的值是否为59
if(min==59)begin//若min=59,min归0并判断shi>
22
min=min+5;
if(shi>
22)shi=0;
//若等于22,归0
elseshi=shi+1;
//若不等,shi加1
elsebeginmin=min+1;
end//若min不等于59,min加1
elsebeginsec=sec+1;
end//若sec不为59,sec加1,令t1为0
if(min==59&
sec>
54&
sec<
60)t1=1;
若整点前5秒,令t1为1,灯闪烁
end
assignshis=shi/10;
//将小时的十位赋给shis
assignshig=shi%10;
//将小时的个位赋给shig
assignmins=min/10;
//将分钟的十位赋给mins
assignming=min%10;
//将分钟的个位赋给ming
assignsecs=sec/10;
//将秒的十位赋给secs
assignsecg=sec%10;
//将秒的个位赋给secg
计时器仿真源文件:
图9计时器仿真源文件
reset先为0,令其复位。
运行一段时间之后先让ss1加1,再让ss2加1,clkout1始终有输入。
整体仿真图:
图10整体仿真图
从图中可以看出灯闪烁变量t1的变化,也可以看出小时shi加1的变化,其他的在下面有放大图。
4.显示器设计方案:
(包括设计思路及其工作原理)
1千赫兹输入,用wei来确定数码管的位置,分别给不同的数码管赋不同的值。
使数码管从左到右依次显示小时—分钟—秒。
modulexianshi(clkout2,shis,shig,mins,ming,secs,secg,leds1,wei);
inputclkout2;
//clkout2为1千赫兹
input[1:
//小时的十位
input[3:
//小时的个位
input[2:
//分钟的十位
//分钟的个位
//秒的十位
//秒的个位
output[6:
0]leds1;
//leds1为数码管
reg[6:
output[2:
0]wei;
//wei表示数码管的位置
reg[2:
reg[3:
0]a;
//中间变量
always@(posedgeclkout2)
if(wei==6)begina=shis;
//当wei为6时,加1,第7号数码管显示小时的十位
case(a)
4'
d0:
leds1=7'
b0111111;
d1:
b0000110;
d2:
b1011011;
default:
b1111110;
endcase
wei=wei+1;
elseif(wei==5)begina=shig;
//当wei为5时,加1,第6号数码管显示小时的个位
d3:
b1001111;
d4:
b1100110;
d5:
b1101101;
d6:
b1111101;
d7:
b0000111;
d8:
b1111111;
d9:
b1101111;
elseif(wei==4)beginleds1=7'
b1000000;
//当wei为4时,加1,第5号数码管显示横杠
elseif(wei==3)begina=mins;
//当wei为3时,加1,第4号数码管显示分钟的十位
elseif(wei==2)begina=ming;
//当wei为2时,加1,第3号数码管显示分钟的个位
elseif(wei==1)beginleds1=7'
//当wei为1时,加1,第2号数码管显示横杠
elseif(wei==0)begina=secs;
//当wei为0时,加1,第1号数码管显示秒的十位
elseif(wei==7)begina=secg;
//当wei为7时,加1,第0号数码管显示秒的个位
case(a)
endcase
endend
数码管仿真源文件:
图16数码管仿真源文件
只输入了一组值13时43分12秒
图17数码管仿真文件
从图中可以看出八个数码管对应的值。
wei=000时0号数码管输出1011011对应秒的个位为2;
wei=001时1号数码管输出0000110对应秒的十位为1;
wei=010时2号数码管输出1000000对应输出“—”;
wei=011时3号数码管输出1001111对应输出分钟的个位为3;
wei=100时4号数码管输出1100110对应输出分钟的十位为4;
wei=101时5号数码管输出1000000对应输出“—”;
wei=110时6号数码管输出1001111对应输出小时的个位为3;
wei=111时7号数码管输出0000110对应输出小时的十位为1;
即输出为“13—43—12”
五、心得体会
通过这次的课程设计让我们更加熟练的掌握verilog软件的应有,并且在完成课程设计的过程中自己很好的了解整个程序的分模构成和怎么综合应有,这次课程设计虽然没有完全按照书本的程序来完成设计,但是通过查找文件让我更加懂得每个程序的完美优劣性,提高了自己对软件程序的理解能力。
这次实习,给我感触最深的还是行为态度问题。
人的能力有大有小,但只要端正态度,不抛弃,不放弃,任何人都能取得令自己满意的成绩。
在此,我由衷的感谢在这次课程设计中给了我巨大帮助的老师和同学们
六、参考文献
王金明《VerilongHDL》第四版北京:
电子工业出版社。
王金明,周顺。
数字系统设计与VHDL、北京:
2010
潘松,、王继业.EDA技术使用教程(第三版),北京:
科学出版社,2006
东华理工大学长江学院
课程设计评分表
学生姓名:
于英俊班级:
093252学号:
课程设计题目:
多功能数字钟设计
项目内容
满分
实评
选
题
能结合所学课程知识、有一定的能力训练。
符合选题要求
(5人一题)
10
工作量适中,难易度合理
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
理论依据充分,数据准确,公式推导正确
能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等
能体现创造性思维,或有独特见解
成
果
质
量
总体设计正确、合理,各项技术指标符合要求。
说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;
分析处理科学、条理分明、语言流畅、结构严谨、版面清晰
设计说明书栏目齐全、合理,符号统一、编号齐全。
格式、绘图、表格、插图等规范准确,符合国家标准
有一定篇幅,字符数不少于5000
总分
100
指导教师评语:
指导教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 时钟 设计