基于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 HDL语言的编写一个具有“百分秒、秒、分”计时功能的数字跑表,可以实现一个小时以内精确至百分之一秒的计时器。
数字跑表的显示可以通过编写数码管显示程序来实现,实现了计数及进位的设计,通过几个always模块的设计实现一个特定用途的模块------数字跑表。
二、实验目标:
1初步掌握Verilog HDL语言的设计方法 2、完成一个数字跑表的设计。
三、实验原理:
本字跑表首先要从最低位的百分秒计数器开始,按照系统时钟进行计数。计数至100后向秒计数器仅为,秒计数器一百分秒计数器的进位位为时钟进行计数。计数至60后向分计数器进位,分计数器以秒计数器的进位位为时钟进行计数。
数字跑表巧妙地运用进位位作为时钟来 减少计数的位数。如果统一使用系统时钟作为计数时钟,那秒计数器将是一个6000进制的计数器,额分计数器将是一个3600000进制的计数器。这将极大的浪费FPGA的逻辑资源。而使用进位位作为计数时钟,只需要一个100进制的计数器和两个60进制的计数器。
在实际的设计中,为了是计数器更加简单,计数器使用高低位两个计时器来实现。100进制计数器分别是最高位10进制计数器,地位10进制计数器,60进制计数器分别是高6进制计数器,低位10进制计数器。这样整个数字跑表使用6个计数器来实现。
同时由于10进制计数器重复使用了5次,可以使用独立的模块实现十进制计数器,这样就可以通过模块复用来节省整个模块使用的资源。
数字跑表提供了清零为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: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}<=8'h00;cn1<=0;end else if(!PAUSE)begin //PAUSE为0时正常计数,为1时暂停计数 if(MSL==9)begin MSL<=0;//低位计数至10时,低位归零 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,SL}<=8'h00;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,系统自动清零 always @(posedge cn2 or posedge CLR)begin if(CLR)begin //异步复位 {MH,ML}<=8'h00;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.后面产生的工程和原程序都保存在这个文件夹中 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,把元器件添加进去 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语言的方法,这一阶段侧重于对Verilog HDL语言的基本掌握,在这一阶段中因为对Verilog HDL语言不太熟悉,所以显得相对笨拙,进展也会相对缓慢。第三阶段是进行硬件的设计,在这个过程中,对软硬件结合出现的问题做了大量的工作,得到了比较理想的效果。总体上,笨设计已近达到了预期的效果,在软件上做了相关的功能仿真和时序仿真,也实现了再硬件上的测试,虽然离工程上的运行还比较远,但作为实验研究课题及达到了要求。
在这一次课程设计过程中,我很是受益匪浅,不仅对自己在大三所学的只是进行了回顾,并积累了宝贵的经验和培养了自己额动手能力和运用所学知识解决实际问题的能力。通过这次实验,我们知道了理论和实际的距离,也知道了理论和实际想结合的重要性。从中得到了很多书上没有的知识。自己今后将会更加努力地把理论知识和实际应用结合起来,提高自己的能力。
七、参考文献 1、黄焱 《FPGA应用开发入门与经典实例》,人民邮电出版社出版,2008年7月 2、侯建军 郭勇《SOPC技术基础教程》
清华大学出版社 北京交通大学出版社 2008年5月 3、黄智伟 《FPGA系统设计与实践》
电子工业出版社 2005年9月
版权声明:
1.大文斗范文网的资料来自互联网以及用户的投稿,用于非商业性学习目的免费阅览。
2.《基于FPGA数字跑表》一文的著作权归原作者所有,仅供学习参考,转载或引用时请保留版权信息。
3.如果本网所转载内容不慎侵犯了您的权益,请联系我们,我们将会及时删除。
