FPGA数字秒表设计.docx

上传人:b****4 文档编号:5194760 上传时间:2022-12-13 格式:DOCX 页数:9 大小:269.58KB
下载 相关 举报
FPGA数字秒表设计.docx_第1页
第1页 / 共9页
FPGA数字秒表设计.docx_第2页
第2页 / 共9页
FPGA数字秒表设计.docx_第3页
第3页 / 共9页
FPGA数字秒表设计.docx_第4页
第4页 / 共9页
FPGA数字秒表设计.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

FPGA数字秒表设计.docx

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

FPGA数字秒表设计.docx

FPGA数字秒表设计

基于EDA的数字秒表

设计论文

班级:

11电信二班同组人员:

孙兴义20111060223张忠义20111060240

基于EDA的数字秒表设计

摘要:

该设计是用于体育比赛的数字秒表,基于EDA在QuartusII9.0sp2软件下应用VHDL语言编写程序,采用ALTRA公司CycloneII系列的EP2C8Q208芯片进行了计算机仿真,并给出了相应的仿真结果。

本设计有效的克服了传统的数字秒表的缺点采用EDA技术采取自上而下的设计思路。

绘制出了具体的逻辑电路,最后又通过硬件上对其进行调试和验证。

该电路能够实现很好的计时功能,计时精度高,最长计时时间可达一个小时。

关键字:

数字秒表;EDA;FPGA;VHDL;QuartusII

1引言

在科技高度发展的今天,集成电路和计算机应用得到了高速发展。

尤其是计算机应用的发展。

它在人们日常生活已逐渐崭露头角。

大多数电子产品多是由计算机电路组成,如:

手机、mp3等。

而且将来的不久他们的身影将会更频繁的出现在我们身边。

各种家用电器多会实现微电脑技术。

电脑各部分在工作时多是一时间为基准的。

本文就是基于计算机电路的时钟脉冲信号、状态控制等原理设计出的数字秒表[1]。

秒表在很多领域充当一个重要的角色。

在各种比赛中对秒表的精确度要求很高,尤其是一些科学实验。

他们对时间精确度达到了几纳秒级别。

2设计要求

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

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

(3)设计复位开关和启停开关,复位开关可以在任何情况下使用,使用以后计时器清零,并做好下一次计时的准备。

设计由控制模块、时基分频模块,计时模块和显示模块四部分组成。

各模块实现秒表不同的功能

3数字秒表设计的目的

本次设计的目的就是在掌握EDA实验开发系统的初步使用基础上,了解EDA技术,对计算机系统中时钟控制系统进一步了解,掌握状态机工作原理,同时了解计算机时钟脉冲是怎么产生和工作的。

在掌握所学的计算机组成与结构课程理论知识时。

通过对数字秒表的设计,进行理论与实际的结合,提高与计算机有关设计能力,提高分析、解决计算机技术实际问题的能力。

通过课程设计深入理解计算机结构与控制实现的技术,达到课程设计的目标。

如上图所示,计时控制器的作用是控制计时。

计时控制器的输入信号是启动,暂停和清零。

为符合惯例,将启动和暂停功能设置在同一个按键上,按一次是启动,按第二次是暂停,按第三次是清零。

所以计时控制器共有2个开关输入信号,即启动/暂停和清零信号。

计时电路的输入信号、计数允许,保持和清零信号,输出为10Om、s1s和

min的计时数据。

时基分频器是一个分频器,产生100ms周期的脉冲.用于计时电路时钟信号。

显示电路为动态扫描电路。

用以显示min、1s,100ms信号。

5各模块实现

计时模块的作用是针对计时过程进行控制。

计时控制模块可用俩个按钮来完成秒表的启动、停止和复位。

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

计时模块执行计时功能,计时方法和计算机一样是对标准时钟脉冲计数。

它是由十进制计数器和六进制计数器构成,其中毫秒位、十毫秒位、秒位和分位采用十进制计数器,十秒位和十分位采用六进制计数器。

计时显示电路的作用是将计时值在LED数码管上显示出来。

计时电路产生的值经过BCD七段译码后,驱动LED数码管。

计时显示电路的实现方案采用扫描显示。

6仿真演示

7实验结果演示

 

5、程序

(1)分频模块:

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

inputCLK;

outputCLK1,CLK2;

regCLK1,CLK2;

reg[24:

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

reg[24:

0]counter2;

parameterN1=500000;//50_000_000;

parameterN2=2500;

always@(posedgeCLK)

begin

counter1<=counter1+1'b1;

//

if(counter1==N1/2-1)

begin

CLK1<=~CLK1;counter1<=0;

endcounter2<=counter2+1'b1;//if(counter2==N2/2-1)begin

CLK2<=~CLK2;counter2<=0;

end

end

endmodule

(2)六进制计数器:

moduleCNT6(CLK,RST,EN,CQ,DOUT);

inputCLK,EN,RST;

output[3:

0]DOUT;

outputCQ;

reg[3:

0]Q1;

regCQ;

assignDOUT=Q1;

always@(posedgeCLKornegedgeRST)begin

if(!

RST)Q1<=0;

elseif(EN)

begin

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

elseQ1<=3'b0000;

end

end

always@(Q1)

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

elseCQ=1'b1;

endmodule

(3)十进制计数器:

moduleCNT10(CLK,RST,EN,CQ,DOUT);inputCLK,EN,RST;output[3:

0]DOUT;outputCQ;reg[3:

0]Q1;regCQ;

assignDOUT=Q1;

always@(posedgeCLKornegedgeRST)begin

if(!

RST)Q1<=0;

elseif(EN)

begin

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

elseQ1<=4'b0000;

end

end

always@(Q1)if(Q1==4'h9)CQ=1'b0;elseCQ=1'b1;

(4)二十四进制计数器:

moduleCNT24(CLK,RST,EN,COUT);inputCLK,EN,RST;

output[7:

0]COUT;

reg[7:

0]COUT;

always@(posedgeCLK)

begin

if(COUT[7:

4]!

=2)

begin

if(COUT[3:

0]==4'b1001)

begin

COUT[7:

4]<=COUT[7:

4]+4'b0001;

COUT[3:

0]<=4'b0000;

end

else

begin

COUT[7:

4]<=COUT[7:

4];

COUT[3:

0]<=COUT[3:

0]+4'b0001

end

end

else

if(COUT[3:

0]==4'b0011)

begin

COUT[7:

4]<=4'b0000;

COUT[3:

0]<=4'b0000;

else

begin

COUT[7:

4]<=COUT[7:

4];

COUT[3:

0]<=COUT[3:

0]+4'b0001;

end

译码结果

case(count)

//选择扫描显示数据3'd0:

disp_dat=d[31:

28];

//第一个数码管3'd1:

disp_dat=d[27:

24];

//第二个数码管3'd2:

disp_dat=4'ha;

//第三个数码管3'd3:

disp_dat=d[19:

16];

//第四个数码管3'd4:

disp_dat=d[15:

12];

//第五个数码管3'd5:

disp_dat=4'hb;

//第六个数码管3'd6:

disp_dat=d[7:

4];

//第七个数码管3'd7:

disp_dat=d[3:

0];

//第八个数码管

case(count)

//选择数码管显示位3'd0:

dig_r=8'b01111111;//选择第一个数码管显示3'd1:

dig_r=8'b10111111;//选择第二个数码管显示3'd2:

dig_r=8'b11011111;//选择第三个数码管显示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;//选择第八个数码管显示endcase

end

always@(disp_dat)begin

case(disp_dat)

//七段译码4'h0:

seg_r=8'hc0;

//显示04'h1:

seg_r=8'hf9;

//显示1

 

4'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=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*/

end

endmodule

6、原理图:

7、引脚定义:

 

8、实验总结

本系统设计用了现在EDA设计手段,基于FPGA采用VHDL语言编程实现数字秒

表的设计。

运用层次化设计方法,完成各电路模块的连接。

本数字秒表可用于体育比赛,计时精度大于1/100S,计时器能显示1/100S的时间,计时器的最长计时时间为1小时,显示的最长时问为59分59.99秒。

系统具有简单、工作稳定可靠等优点.具有一定的实际意义。

开始做设计时总是会犯一些错误,只有经过不停的改错不停的编译得到正确的程序说明了作为软件编程人员是不能粗心大意的,一个程序的质量的高低与你细心与否有着一定的联系。

在编程时,我充分使用了结构化的思想,这样程序检查起来也比较方便,调试时也给了我很大方便,只要一个模块一个模块的进行调就可以了,充分体现了结构化编程的优势。

在设计中要求我要有耐心和毅力,还要细心,稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查要求我要有足够的耐心,通过这次设计和设计中遇到的问题,也积累了一定的经验,对以后从事集成电路设计工作会有一定的帮助。

但在验证过程中,也遇到了许许多多的困难,其结论与预期间的差距,其功能键复位、暂停,第一次按下去时为暂停,第二次为清零。

但使用时并没出现,第一次按下去时暂停了,但却不能正常显示;当第二次按时却不能出现清零的状态。

在应用VHDL的过程中让我真正领会到了其并行运行与其他软件顺序执行的差别及其在电路设计上的优越性。

用VHDL硬件描述语言的形式来进行数字系统的设计方便灵活,利用EDA软件进行编译优化仿真极大地减少了电路设计时间和可能发生的错误,降低了开发成本,这种设计方法在数字系统设计中发挥越来越重要的作用。

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

当前位置:首页 > 幼儿教育 > 育儿理论经验

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

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