网站大量收购独家精品文档,联系QQ:2885784924

基于PFGA的数字跑表参考.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于PFGA的数字跑表参考

基于FPGA的数字跑表 学院:物电学院 姓名: 学号: 班级:08(27)班 日期:2011年6月28日 目录 一、实例的主要内容 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进制的计数器,额分计数器将是一个进制的计数器。这将极大的浪费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}=8h00; 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}=8h00; cn2=0; end else if(SL==9) begin SL=0; //低位计数至10时,低位归零 if(SH==5) begin SH=0; //低位计数至10时,高位计数至6位,高位

文档评论(0)

feixiang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档