《基于FPGA数字跑表.docx》由会员分享,可在线阅读,更多相关《基于FPGA数字跑表.docx(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于FPGA数字跑表 基于FPGA的数字跑表 学院:物电学院 姓名: 学号: 班级:班 日期:2011年X月X日 书目 一、实例的主要内容 3 二、试验目标: 4 1初步驾驭Verilog HDL语言的设计方法 4 2、完成一个数字跑表的设计。 4 三、试验原理: 4 四、程序代码及分析 5 五、试验步骤 9 5.1新建一个文件夹, 9 5.2创建工程 10 5.3 编译、运行程序 13 5.4导入波形 14 5.5显示波形 17 5.6波形运行后结果 18 5.7引脚安排 20 5.8引脚安排完成图 21 六、设计心得 22 七、参考文献 22 一、试验的主要内容 通过对Verilog HD
2、L语言的编写一个具有“百分秒、秒、分”计时功能的数字跑表,可以实现一个小时以内精确至百分之一秒的计时器。数字跑表的显示可以通过编写数码管显示程序来实现, 实现了计数及进位的设计,通过几个always模块的设计实现一个特定用途的模块-数字跑表。二、试验目标: 1初步驾驭Verilog HDL语言的设计方法 2、完成一个数字跑表的设计。三、试验原理: 本字跑表首先要从最低位的百分秒计数器起先,根据系统时钟进行计数。计数至100后向秒计数器仅为,秒计数器一百分秒计数器的进位位为时钟进行计数。计数至60后向分计数器进位,分计数器以秒计数器的进位位为时钟进行计数。数字跑表奇妙地运用进位位作为时钟来 削减
3、计数的位数。假如统一运用系统时钟作为计数时钟,那秒计数器将是一个6000进制的计数器,额分计数器将是一个3600000进制的计数器。这将极大的奢侈FPGA的逻辑资源。而运用进位位作为计数时钟,只须要一个100进制的计数器和两个60进制的计数器。在实际的设计中,为了是计数器更加简洁,计数器运用凹凸位两个计时器来实现。100进制计数器分别是最高位10进制计数器,地位10进制计数器,60进制计数器分别是高6进制计数器,低位10进制计数器。这样整个数字跑表运用6个计数器来实现。同时由于10进制计数器重复运用了5次,可以运用独立的模块实现十进制计数器,这样就可以通过模块复用来节约整个模块运用的资源。数字
4、跑表供应了清零为CLR和暂停位PAUSE,百分秒的时钟信号可以通过系统时钟分频供应。分频至1/100s,即可实现真实的时间计数。具体的时钟分频设计渎职可以参考相关的资料实现。代码中端口信号的定义: CLK:时钟信号 CLR:异步复位信号 PAUSE:暂停信号 MSH、MSL:百分秒的高位和低位 SH、SL:秒信号的高位和低位 MH、ML:分钟信号的高位和低位 如图是本实例的数字跑表模块图。 四、程序代码及分析 module paobiao(CLK,CLR,PAUSE,MSH,MSL,SH,SL,MH,ML); /端口说明 input CLK,CLR; input PAUSE; output 3
5、:0 MSH,MSL,SH,SL,MH,ML; /内部信号说明 reg 3:0 MSH,MSL,SH,SL,MH,ML; reg cn1,cn2; /cn1为百分秒向秒的进位,cn2为秒向分的进位 /百分秒技术模块,每计满100,cn1产生一个进位 always (posedge CLK or posedge CLR) begin if(CLR) begin /异步进位 MSH,MSL<=8h00; cn1<=0; end else if(!PAUSE) begin /PAUSE为0时正常计数,为1时暂停计数 if(MSL=9) begin MSL<=0; /低位计数至10时
6、,低位归零 if(MSH=9) begin MSH<=0; /低、高位计数至10时,高位归零 cn1<=1; /低、高位计数至10时,触发进位位 end else /低位计数至10,高位技术为止10时,高位计数 MSH<=MSH+1; end else begin MSL<=MSL+1; /低位计数未至10时,低位计数 cn1<=0; /低位计数未至10时,触发进位位 end end end /秒计数模块,每计满60,cn2产生一个进位 always (posedge CLK or posedge CLR) begin if(CLR) begin /异步复位 SH
7、,SL<=8h00; cn2<=0; end else if(SL=9) begin SL<=0; /低位计数至10时,低位归零 if(SH=5) begin SH<=0; /低位计数至10时,高位计数至6位,高位归零 cn2<=1; /低位计数至10时,高位计数至6位,触发进位位 end else SH<=SH+1; /低位计数至10时,高位计数未至6时,高位计数 end else begin SL<=SL+1; /低位计数至10时,低位计数 cn2<=0; /低位计数至10时,不触发进位位 end end /分钟计数模块,每计满60,系统自动
8、清零 always (posedge cn2 or posedge CLR) begin if(CLR) begin /异步复位 MH,ML<=8h00; end else if(ML=9) begin ML<=0; /低位计数至10时,低位归零 if(MH=5) MH<=0; /低位计数至10,高位计数至6时,高位归零 else MH<=MH+1; /低位计数至10时,高位计数未至6时,高位计数 end else ML<=ML+1; /低位计数未至10时,低位计数 end endmodule 五、试验步骤 5.1新建一个文件夹, 1.后面产生的工程和原程序都保存
9、在这个文件夹中 5.2创建工程 2.打开Quartus II软件,在file菜单里选择new可新建一个工程 选择合适的语言 3、保存 指定工程存放的书目、工程名和顶层实体名,工程名和顶层实体名要求相同,工程书目可以随意设置,但必需是英文的书目,单击Next按钮。 4、将程序输入 5.3 编译、运行程序 1.单击processing>start comilation,运行程序 2.若没有错进行下一步 创建波形文件,单击File>other files>vector waveform file, 5.4导入波形 1.右击>node finder>list,把元器件添加
10、进去 5.5显示波形 1.波型图如下: 2.更改类型 5.6波形运行后结果 1.如下所示: 2、保存 3、运行后的波形图 5.7引脚安排 (1)单击assignments>timing analysis setting进行引脚安排 (2)干脆导入引脚安排,单击assignments>import assignments 5.8引脚安排完成图 完成引脚安排 六、设计心得 本次试验设计经过了四个阶段的程序设计,第一阶段是了解数字电子跑表的工作方式及其原理,确定设计的方向与方法以及确定设计过程中发须要的软件及工具。其次阶段是熟识用Quartus软件编写Verilog HDL语言的方法,这
11、一阶段侧重于对Verilog HDL语言的基本驾驭,在这一阶段中因为对Verilog HDL语言不太熟识,所以显得相对笨拙,进展也会相对缓慢。第三阶段是进行硬件的设计,在这个过程中,对软硬件结合出现的问题做了大量的工作,得到了比较志向的效果。总体上,笨设计已近达到了预期的效果,在软件上做了相关的功能仿真和时序仿真,也实现了再硬件上的测试,虽然离工程上的运行还比较远,但作为试验探讨课题及达到了要求。 在这一次课程设计过程中,我很是受益匪浅,不仅对自己在大三所学的只是进行了回顾,并积累了珍贵的阅历和培育了自己额动手实力和运用所学学问解决实际问题的实力。通过这次试验,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性。从中得到了许多书上没有的学问。自己今后将会更加努力地把理论学问和实际应用结合起来,提高自己的实力。七、参考文献 1、黄焱 FPGA应用开发入门与经典实例,人民邮电出版社出版,2008年7月 2、侯建军 郭勇SOPC技术基础教程 清华高校出版社 北京交通高校出版社 2008年5月 3、黄智伟 FPGA系统设计与实践 电子工业出版社 2005年9月
限制150内