数字时钟设计.docx

上传人:b****6 文档编号:5806357 上传时间:2023-01-01 格式:DOCX 页数:16 大小:237.12KB
下载 相关 举报
数字时钟设计.docx_第1页
第1页 / 共16页
数字时钟设计.docx_第2页
第2页 / 共16页
数字时钟设计.docx_第3页
第3页 / 共16页
数字时钟设计.docx_第4页
第4页 / 共16页
数字时钟设计.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数字时钟设计.docx

《数字时钟设计.docx》由会员分享,可在线阅读,更多相关《数字时钟设计.docx(16页珍藏版)》请在冰豆网上搜索。

数字时钟设计.docx

数字时钟设计

 

Verilong多功能数字时钟设计

姓名:

于英俊

学号:

09325228

专业:

电子信息工程

班级:

09325228

指导教师:

黄河

 

2012年11月08日

 

目录

 

1.设计要求..............................................................................2

2.设计原理与方案..................................................................2

3.整体仿真文件与RTL..........................................................3

4.各个电路子模块

(1)分频器设计方案.......................................................3

(2)控制器设计方案.......................................................6

(3)计时器设计方案.......................................................7

(4)显示器设计方案......................................................10

5心得体会..............................................................................15

6参考文献..............................................................................15

7课程设计评分表..................................................................16

 

设计题目:

多功能数字钟电路设计

一、设计任务及要求:

本次课程设计任务是设计一个多功能数字钟。

具体要求是:

1.计时功能:

包括时、分、秒、的记时;

2.小时、分钟、秒钟校时。

3.整点报时,利用LED亮灭模拟报时,在整点前5秒LED开始按照1HZ频率闪烁,过整点后,停止闪烁。

4.调整时间的按键用按键模块的S1和S2,S1调节小时,每按下一次,小时增加一个小时,S2调整分钟,每按下一次,分钟增加一分钟。

另外用S8按键作为系统时钟复位,复位后全部显示00-00-00。

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<=(cout1==32'd5*******)?

1'd1:

1'd0;//50000000分频

cout3<=(cout3==32'd25000000)?

32'd0:

(cout3+32'd1);

clkout3<=(cout3==32'd2*******)?

1'd1:

1'd0;//25000000分频

cout2<=(cout2==32'd50000)?

32'd0:

(cout2+32'd1);

clkout2<=(cout2==32'd50000)?

1'd1:

1'd0;//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;

end

always@(posedgeclkout3)

begin

if(t1==1)led=~led;elseif(t1==0)led=0;//当t1=1时闪烁,否则不闪

end

Endmodule

控制器仿真源文件:

图7控制器仿真源文件

说明:

clkout1的周期是clkout3的一倍。

s1、s2、s3均有0和1出现,t1之后为1

控制器仿真输出文件:

图8控制器仿真输出文件

说明:

从图中可以看出s1、s2、s3的值分别赋给了ss1、ss2、reset。

Led在t1为1时闪烁。

3.计时器设计方案

计数器输出端口shis表示小时的十位,shig表示小时的各位,mins表示分钟的十位,ming表示分钟的个位。

secs表示秒的十位,secg表示秒的个位。

设计思路:

判断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;//分钟的十位

output[3:

0]ming;//分钟的个位

output[2:

0]secs;//秒的十位

output[3:

0]secg;//秒的个位

outputt1;//返回闪烁的控制变量

regt1;

reg[5:

0]shi;//小时

reg[5:

0]min,sec;//分钟,秒

always@(posedgeclkout1)

begin

if(ss1==0&&shi<24)shi=shi+1;//s1为0和shi小于23时,小时加1

if(ss1==0&&shi==24)shi=0;//s1为0和shi等于24时,小时变0

if(ss2==0&&min<60)min=min+1;//s2为0和min小于60时,分钟加1

if(ss2==0&&min==60)beginmin=0;t1=0;end//s2为0和min等于60时,分钟变0if(reset==0)beginshi=0;min=0;sec=0;t1=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;t1=0;

if(shi>22)shi=0;//若等于22,归0

elseshi=shi+1;//若不等,shi加1

end

elsebeginmin=min+1;end//若min不等于59,min加1

end

elsebeginsec=sec+1;t1=0;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

Endmodule

计时器仿真源文件:

图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:

0]shis;//小时的十位

input[3:

0]shig;//小时的个位

input[2:

0]mins;//分钟的十位

input[3:

0]ming;//分钟的个位

input[2:

0]secs;//秒的十位

input[3:

0]secg;//秒的个位

output[6:

0]leds1;//leds1为数码管

reg[6:

0]leds1;

output[2:

0]wei;//wei表示数码管的位置

reg[2:

0]wei;

reg[3:

0]a;//中间变量

always@(posedgeclkout2)

begin

if(wei==6)begina=shis;//当wei为6时,加1,第7号数码管显示小时的十位

case(a)

4'd0:

leds1=7'b0111111;

4'd1:

leds1=7'b0000110;

4'd2:

leds1=7'b1011011;

default:

leds1=7'b1111110;

endcase

wei=wei+1;

end

elseif(wei==5)begina=shig;//当wei为5时,加1,第6号数码管显示小时的个位

case(a)

4'd0:

leds1=7'b0111111;

4'd1:

leds1=7'b0000110;

4'd2:

leds1=7'b1011011;

4'd3:

leds1=7'b1001111;

4'd4:

leds1=7'b1100110;

4'd5:

leds1=7'b1101101;

4'd6:

leds1=7'b1111101;

4'd7:

leds1=7'b0000111;

4'd8:

leds1=7'b1111111;

4'd9:

leds1=7'b1101111;

default:

leds1=7'b1111110;

endcase

wei=wei+1;

end

elseif(wei==4)beginleds1=7'b1000000;wei=wei+1;

//当wei为4时,加1,第5号数码管显示横杠

end

elseif(wei==3)begina=mins;//当wei为3时,加1,第4号数码管显示分钟的十位

case(a)

4'd0:

leds1=7'b0111111;

4'd1:

leds1=7'b0000110;

4'd2:

leds1=7'b1011011;

4'd3:

leds1=7'b1001111;

4'd4:

leds1=7'b1100110;

4'd5:

leds1=7'b1101101;

default:

leds1=7'b1111110;

endcase

wei=wei+1;

end

elseif(wei==2)begina=ming;//当wei为2时,加1,第3号数码管显示分钟的个位

case(a)

4'd0:

leds1=7'b0111111;

4'd1:

leds1=7'b0000110;

4'd2:

leds1=7'b1011011;

4'd3:

leds1=7'b1001111;

4'd4:

leds1=7'b1100110;

4'd5:

leds1=7'b1101101;

4'd6:

leds1=7'b1111101;

4'd7:

leds1=7'b0000111;

4'd8:

leds1=7'b1111111;

4'd9:

leds1=7'b1101111;

default:

leds1=7'b1111110;

endcase

wei=wei+1;

end

elseif(wei==1)beginleds1=7'b1000000;wei=wei+1;

//当wei为1时,加1,第2号数码管显示横杠

end

elseif(wei==0)begina=secs;//当wei为0时,加1,第1号数码管显示秒的十位

case(a)

4'd0:

leds1=7'b0111111;

4'd1:

leds1=7'b0000110;

4'd2:

leds1=7'b1011011;

4'd3:

leds1=7'b1001111;

4'd4:

leds1=7'b1100110;

4'd5:

leds1=7'b1101101;

default:

leds1=7'b1111110;

endcase

wei=wei+1;

end

elseif(wei==7)begina=secg;//当wei为7时,加1,第0号数码管显示秒的个位

case(a)

4'd0:

leds1=7'b0111111;

4'd1:

leds1=7'b0000110;

4'd2:

leds1=7'b1011011;

4'd3:

leds1=7'b1001111;

4'd4:

leds1=7'b1100110;

4'd5:

leds1=7'b1101101;

4'd6:

leds1=7'b1111101;

4'd7:

leds1=7'b0000111;

4'd8:

leds1=7'b1111111;

4'd9:

leds1=7'b1101111;

default:

leds1=7'b1111110;

endcase

wei=wei+1;

endend

Endmodule

 

数码管仿真源文件:

图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学号:

09325228

课程设计题目:

多功能数字钟设计

项目内容

满分

实评

能结合所学课程知识、有一定的能力训练。

符合选题要求

(5人一题)

10

工作量适中,难易度合理

10

能熟练应用所学知识,有一定查阅文献及运用文献资料能力

10

理论依据充分,数据准确,公式推导正确

10

能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等

10

能体现创造性思维,或有独特见解

10

总体设计正确、合理,各项技术指标符合要求。

10

说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰

10

设计说明书栏目齐全、合理,符号统一、编号齐全。

 格式、绘图、表格、插图等规范准确,符合国家标准

10

有一定篇幅,字符数不少于5000

10

总分

100

指导教师评语:

 

指导教师签名:

年月日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 电大

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1