FPGA数字秒表设计_第1页
FPGA数字秒表设计_第2页
FPGA数字秒表设计_第3页
FPGA数字秒表设计_第4页
FPGA数字秒表设计_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于EDA的数字秒表设计论文班级:11电信二班同组人员:孙兴义 20111060223 张忠义 20111060240基于EDA的数字秒表设计摘要:该设计是用于体育比赛的数字秒表,基于EDA在Quartus II 9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片进行了计算机仿真,并给出了相应的仿真结果。本设计有效的克服了传统的数字秒表的缺点采用EDA技术采取自上而下的设计思路。绘制出了具体的逻辑电路,最后又通过硬件上对其进行调试和验证。该电路能够实现很好的计时功能,计时精度高,最长计时时间可达一个小时。 关键字:数字秒表;EDA;FP

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

3、时间是59分59秒;(2) 计时精度达到0.01s;(3) 设计复位开关和启停开关,复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。各模块实现秒表不同的功能3 数字秒表设计的目的本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。在掌握所学的计算机组成与结构课程理论知识时。通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。通过课

4、程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。4 系统设计框图启动/暂停 计时 计数 扫描显 显示位输出 控制器 电路 示电路 显示段输出 时基分频器时钟清零如上图所示,计时控制器的作用是控制计时。计时控制器的输入信号是启动,暂停和清零。为符合惯例,将启动和暂停功能设置在同一个按键上,按一次是启动,按第二次是暂停,按第三次是清零。所以计时控制器共有2个开关输入信号,即启动/暂停和清零信号。计时电路的输入信号、计数允许,保持和清零信号,输出为10Oms、1s和min的计时数据。时基分频器是一个分频器,产生100ms周期的脉冲用于计时电路时钟信号。显示电路为动态扫描电路。用以显示m

5、in、1s,100ms信号。5 各模块实现计时模块的作用是针对计时过程进行控制。计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。时钟分频模块的作用把输入时钟信号变为分频输出信号。计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。它是由十进制计数器和六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。计时显示电路的作用是将计时值在LED数码管上显示出来。计时电路产生的值经过BCD七段译码后,驱动LED数码管。计时显示电路的实现方案采用扫描显示。6 仿真演示7 实验结果演示5、程序(1)分频模块:module fengpin(CL

6、K,CLK1,CLK2); /输入50MHz,输出分频到1Hzinput CLK;output CLK1,CLK2;reg CLK1,CLK2;reg24:0 counter1; / 中间变量counter定义为寄存器型reg24:0 counter2; parameter N1=500000;/50_000_000; parameter N2=2500; always(posedge CLK)begincounter1<=counter1+1'b1; / if(counter1= N1/2-1)beginCLK1 <= CLK1; counter1<=0;end c

7、ounter2<=counter2+1'b1;/ if(counter2=N2/2-1) begin CLK2<=CLK2; counter2<=0; end endendmodule(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

8、) 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

9、) 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 (4)二十四进制计数器:module CNT24(CLK,RST,EN,COUT);input CLK,EN,RST;output7:0 COUT;reg 7:0 COUT;always(posedge CLK) begin if(COUT7:

10、4!=2) begin if(COUT3:0=4'b1001) begin COUT7:4<=COUT7:4+4'b0001; COUT3:0<=4'b0000; end else begin COUT7:4<=COUT7:4; COUT3:0<=COUT3:0+4'b0001; end end else if(COUT3:0=4'b0011) begin COUT7:4<=4'b0000; COUT3:0<=4'b0000; end else begin COUT7:4<=COUT7:4; CO

11、UT3:0<=COUT3:0+4'b0001; endendendmodule(5)数码管扫描显示模块:module scan_led(clk_1k,d,dig,seg); /模块名scan_ledinput clk_1k; /输入时钟input31:0 d; /输入要显示的数据output7:0dig; /数码管选择输出引脚output7:0 seg; /数码管段输出引脚reg7:0 seg_r;/定义数码管输出寄存器reg7:0 dig_r;/定义数码管选择输出寄存器reg3:0 disp_dat;/定义显示数据寄存器reg2:0count; /定义计数寄存器assign d

12、ig = dig_r;/输出数码管选择assign seg = seg_r;/输出数码管译码结果always (posedge clk_1k) /定义上升沿触发进程begincount <= count + 1'b1;endalways (posedge clk_1k) begincase(count) /选择扫描显示数据3'd0:disp_dat = d31:28;/第一个数码管3'd1:disp_dat = d27:24;/第二个数码管3'd2:disp_dat = 4'ha; /第三个数码管3'd3:disp_dat = d19:16

13、;/第四个数码管3'd4:disp_dat = d15:12;/第五个数码管3'd5:disp_dat = 4'hb; /第六个数码管3'd6:disp_dat = d7:4;/第七个数码管3'd7:disp_dat = d3:0;/第八个数码管endcasecase(count)/选择数码管显示位3'd0:dig_r = 8'b01111111;/选择第一个数码管显示3'd1:dig_r = 8'b10111111;/选择第二个数码管显示3'd2:dig_r = 8'b11011111;/选择第三个数码管

14、显示3'd3:dig_r = 8'b11101111;/选择第四个数码管显示3'd4:dig_r = 8'b11110111;/选择第五个数码管显示3'd5:dig_r = 8'b11111011;/选择第六个数码管显示3'd6:dig_r = 8'b11111101;/选择第七个数码管显示3'd7:dig_r = 8'b11111110;/选择第八个数码管显示endcaseendalways (disp_dat)begincase(disp_dat)/七段译码4'h0:seg_r = 8'hc0;

15、/显示04'h1:seg_r = 8'hf9;/显示14'h2:seg_r = 8'ha4;/显示24'h3:seg_r = 8'hb0;/显示34'h4:seg_r = 8'h99;/显示44'h5:seg_r = 8'h92;/显示54'h6:seg_r = 8'h82;/显示64'h7:seg_r = 8'hf8;/显示74'h8:seg_r = 8'h80;/显示84'h9:seg_r = 8'h90;/显示94'ha:seg_r =

16、8'hbf;/显示a4'hb:seg_r = 8'hbf;/显示b/*4'hc:seg_r = 8'hc6;/显示c4'hd:seg_r = 8'ha1;/显示d4'he:seg_r = 8'h86;/显示e4'hf:seg_r = 8'h8e;/显示f*/endcaseendendmodule6、原理图:7、引脚定义:8、实验总结本系统设计用了现在EDA设计手段,基于FPGA采用VHDL语言编程实现数字秒表的设计。运用层次化设计方法,完成各电路模块的连接。本数字秒表可用于体育比赛,计时精度大于1100S,

17、计时器能显示1100S的时间,计时器的最长计时时间为1小时,显示的最长时问为59分5999秒。系统具有简单、工作稳定可靠等优点具有一定的实际意义。开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。在编程时,我充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势。在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论