电子秒表课程设计说明书

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档