FPGA数字秒表设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于EDA的数字秒表

设计论文

班级:11电信二班

同组人员:孙兴义 20111060223

张忠义 20111060240

基于EDA的数字秒表设计

摘要:该设计是用于体育比赛的数字秒表,基于EDA在Quartus II 9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208

芯片进行了计算机仿真,并给出了相应的仿真结果。本设计有效的克服了传统的数字秒表的缺点采用EDA技术采取自上而下的设计思路。绘制出了具体的逻辑电路,最后又通过硬件上对其进行调试和验证。该电路能够实现很好的计时功能,计时精度高,最长计时时间可达一个小时。

关键字:数字秒表;EDA;FPGA;VHDL;Quartus II

1引言

在科技高度发展的今天,集成电路和计算机应用得到了高速发展。尤其是计算机应用的发展。它在人们日常生活已逐渐崭露头角。大多数电子产品多是由计算机电路组成,如:手机、mp3等。而且将来的不久他们的身影将会更频繁的出现在我们身边。各种家用电器多会实现微电脑技术。电脑各部分在工作时多是一时间为基准的。本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表[1]。秒表在很多领域充当一个重要的角色。在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。他们对时间精确度达到了几纳秒级别。

2 设计要求

(1) 能对0秒~59分59.99秒范围进行计时,显示最长时间是59分59秒;

(2) 计时精度达到0.01s;

(3) 设计复位开关和启停开关,复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。各模块实现秒表不同的功能

3 数字秒表设计的目的

本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。在掌握所学的计算机组成与结构课程理论知识时。通过对数字秒表的设计,进行理论与实际的结合,提高与计算

机有关设计能力,提高分析、解决计算机技术实际问题的能力。通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。

4 系统设计框图

显示段输出

如上图所示,计时控制器的作用是控制计时。计时控制器的输入信号是启动,暂停和清零。为符合惯例,将启动和暂停功能设置在同一个按键上,按一次是启动,按第二次是暂停,按第三次是清零。所以计时控制器共有2个开关输入信号,即启动/暂停和清零信号。

计时电路的输入信号、计数允许,保持和清零信号,输出为10Oms、1s和min的计时数据。时基分频器是一个分频器,产生100ms周期的脉冲.用于计时电路时钟信号。显示电路为动态扫描电路。用以显示min、1s,100ms信号。

5 各模块实现

计时模块的作用是针对计时过程进行控制。计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。

时钟分频模块的作用把输入时钟信号变为分频输出信号。

计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。它是由十进制计数器和六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。

计时显示电路的作用是将计时值在LED数码管上显示出来。计时电路产生的值经过BCD七段译码后,驱动LED数码管。计时显示电路的实现方案采用扫描显示。

6 仿真演示

7 实验结果演示

5、程序

(1)分频模块:

module fengpin(CLK,CLK1,CLK2); //输入50MHz,输出分频到1Hz input CLK;

output CLK1,CLK2;

reg CLK1,CLK2;

reg[24:0] counter1; // 中间变量counter定义为寄存器型

reg[24:0] counter2;

parameter N1=500000;//50_000_000;

parameter N2=2500;

always@(posedge CLK)

begin

counter1<=counter1+1'b1;

//

if(counter1== N1/2-1)

begin

CLK1 <=~ CLK1;

counter1<=0;

end

counter2<=counter2+1'b1;//

if(counter2==N2/2-1)

begin

CLK2<=~CLK2;

counter2<=0;

end

end

endmodule

(2)六进制计数器:

module CNT6(CLK,RST,EN,CQ,DOUT);

input CLK,EN,RST;

output [3:0] DOUT;

output CQ;

reg [3:0] Q1;

reg CQ;

assign DOUT=Q1;

always@(posedge CLK or negedge RST)

begin

if(!RST) Q1<=0;

else if(EN)

begin

if(Q1<5) Q1<=Q1+1'b1; else Q1<=3'b0000;

end

end

always@(Q1)

if(Q1==4'h5) CQ=1'b0;

else CQ=1'b1;

endmodule

(3)十进制计数器:

module CNT10(CLK,RST,EN,CQ,DOUT);

input CLK,EN,RST;

output [3:0] DOUT;

output CQ;

reg [3:0] Q1;

reg CQ;

assign DOUT=Q1;

always@(posedge CLK or negedge RST) begin

if(!RST) Q1<=0;

else if(EN)

begin

if(Q1<9) Q1<=Q1+1'b1; else Q1<=4'b0000;

end

end

always@(Q1)

if(Q1==4'h9) CQ=1'b0;

else CQ=1'b1;

endmodule

相关文档
最新文档