电子秒表课程设计说明书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
目录 0
摘要 (1)
正文 (2)
1设计目的和要求 (2)
2设计原理 (2)
3设计内容 (2)
(1)程序源代码 (3)
(2)调试分析过程描述 (9)
(3)结果分析 (11)
总结与致谢 (12)
参考文献 (13)
附录 (14)
摘要
EDA(Electronic Design Automation)电子设计自动化,就是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成用软件方式设计的电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次课程设计利用Quartus II为设计软件、Verilog HDL 为硬件描述语言,结合所学的数字电路的知识设计一个24时电子秒表,具有正常时、分、秒计时,动态显示,清零等功能。利用硬件描述语言Verilog HDL对设计系统的各个子模块进行逻辑描述,采用模块化的设计思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑分割、逻辑综合优化、逻辑布线、逻辑仿真,最终将设计的软件系统下载设计实验系统,对设计的系统进行硬件测试。
关键词:EDA;Quartus II;Verilog HDL;电子秒表
正文
1设计目的和要求
(1)具有时、分、秒计数功能,以24h循环计时的电子钟。
(2)计时结果要用6个数码管分别显示时、分、秒的十位和个位。
(3)具有清零的功能。
(4)熟练掌握分频器的使用。
(5)熟练掌握各种计数器的使用,能用计数器构成二十四进制、六十进制等所需进制的计数器。
2设计原理
电子秒表以其显示时间的直观性、走时准确性作为一种计时工具,电子秒表的基本组成部分离不开计数器,在控制逻辑电路的控制下完成预定的各项功能。电子秒表的基本原理方框图如下图所示:
本数字系统实现电子秒表的基本的计时功能,输入50MHz的时钟,采用24小时制计时,能显示时、分、秒。本电子秒表实际上是一个对标准频率(1Hz)进行计数的计数电路。由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的50MHz时间信号必须做到准确稳定。通常使用石英晶体振荡器电路构成电子秒表。
电子秒表的基本组成本电子秒表的实现可分为以下几个模块:
(1) 秒计数模块:秒计数,在频率为1Hz的时钟下以60次为循环计数,并产生进位信号影响分计数;
(2) 分计数模块:分计数,在秒进位信号为高电平时,计数一次,同样以60次为一个循环计数,同时产生分进位信号影响时计数;
(3) 时计数模块:时计数,在分进位信号为高电平时,计数一次,以24次为一个循环计数;
(4) 频率产生模块:主要有2个部分,一个是产生1Hz的计数频率,一个是产生5KHz的数码管动态扫描频率;
(5) 时间显示模块:通过选中不同的数码管,同时进行一定频率的扫描显示时、分、秒。
一个基本的电子秒表电路主要由译码显示器、“时”,“分”,“秒”计数器和定时器组成。干电路系统由秒信号发生器、“时”,“分”,“秒”计数器、译码器及显示器、电路组成。本设计方案采用CycloneⅡEP2C35F672C8试验箱实现,首先由晶振电路产生震荡频率50MHz的CLOCK脉冲,通过计数器计数分频,形成两个频率的脉冲,其中CLK1脉冲用来动态扫描数码管地址,CLK2脉冲用来秒计时。“秒计数器”采用六十进制计数器,每累计60秒向“分计数器”进位;“分计数器”采用六十进制计数器,每累计60分向“时计数器”进位;“时计数器”采用二十四进制计数器,按照“24翻1”规律计数。将时、分、秒的计数结果分别用两个4位二进制数字表示出来,经译码器送8段数码管上显示。如遇到复位,时、分、秒计数器同时清零,采用同步清零方式。
3设计内容
(1)程序源代码
module digital_clock(seg,scan,clk,reset);
input clk,reset;
output [7:0] seg,scan;
reg [7:0] seg,scan;
reg [2:0] cnt8;
reg [3:0] data;
reg clk1;
reg clk2;
reg [13:0] counter1;
reg [25:0] counter2;
reg [3:0] hh,hl,mh,ml,sh,sl;
reg [5:0] hour,min,sec;
always @(posedge clk)
begin
if (counter1=='d10000)
begin clk1<=~clk1;counter1<=0;end else
begin counter1<=counter1+1;end
end
always @(posedge clk1)
begin
if (cnt8=='d5) cnt8<='d0;
else cnt8<=cnt8+1;
end
always @(posedge clk)
begin
if (counter2=='d5*******)
begin clk2<=~clk2;counter2<=0;end else
begin counter2<=counter2+1;end
end
always @(posedge clk2)
begin
if (sec==8'd59)
begin sec<='d0;
if (min==8'd59)
begin min<='d0;
if (hour==8'd23)
begin hour<=8'd0;end
else
begin hour<=hour+1;end
end
else
begin min<=min+1;end
end
else
begin sec<=sec+1;end
if (!reset)
begin sec[5:0]<='d0;
min[5:0]<='d0;
hour[5:0]<='d0;
end
end
always @(sec)