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

FPGA频率计设计毕业设计(论文).doc

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《可编程数字系统》课程设计[论文] 学 生 姓 名: 学号: 专 业 年 级: 年月 日 一、课程设计原理 1、测频原理及误差分析 本次课程设计采用测频法。测频法就是在确定的闸门时间内,记录被测信号的脉冲个数。这种方法的计数值也会产生±1个脉冲误差产生待测的信号,此程序要求将1Mhz的频率控制信号的标准输入时钟该模块产生的3个控制信号,分别为ENLOAD,CLR。CLR信号用于在每次测量开始时,对计数器进行复位,以清除上次测量的结果,该复位信号高电平有效。EN为计数允许信号,在EN信号的上升沿时刻计数模块开始对输入信号的频率进行测量在此时间里被测信号的脉冲数进行计数,即为信号的频率。然后将值锁存,并送到数码管显示出来。设置锁存器的好处是使显示的数据稳定,不会由于周期性的清零信号而不断闪烁。在每一次测量开始时,都必须重新对计数器清0。process(clk) begin if clkevent and clk = 1 then temp1=temp1+1; end if; end process; freq=temp1(16); --381Hz=50Mhz/2^17 2、计数模块 计数模块分为2个子模块。模块一为对频率的测量,模块二为对占空比的测量。为了分开计数和显示,采用一个按键key1。每当按一次key1按键,类型为std_logic_vector的m会加1,利用末位是0还是1区分显示频率还是占空比。因此每按一次按键,数码管会在频率和占空比之间切换。 区分显示的程序如下: process(key1) begin if key1=0 then m=m+1; ---按下按键,m加1 end if; end process; process(clk,m) begin if rising_edge(clk) then if m(0)=1 then -----------由key1产生m末位是1,选择显示频率 bcd3=d3; bcd2=d2; bcd1=d1; bcd0=d0; xsd=h; else bcd3=0; -----------------如果是0,选择显示占空比 bcd2=e2; bcd1=e1; bcd0=e0; xsd=0111; end if;end if; end process; 2.1 频率测量模块 本次课程设计采用测频法PROCESS(freq,CLR_CNT,TSTEN) IS BEGIN IF CLR_CNT= 1 THEN -----清零信号 b1=0;b2=0;b3=0;b4=0;b5=0;b6=0;b7=0; ELSIF freqEVENT AND freq= 1 THEN IF TSTEN= 1 THEN ----使能信号 if b1=9 then b1=0; if b2=9 then b2=0; if b3=9 then b3=0; if b4=9 then b4=0; if b5=9 THEN b5=0; if b6=9 then b6=0; if b7=9 then b7=0; else b7=b7+1; end if; else b6=b6+1; end if; else b5=b5+1; end if; else b4=b4+1; end if; else b3=b3+1; end if; else b2=b2+1; end if; else b1=b1+1; end if; end if; end if; END PROCESS; PROCESS ( LOAD1,b1,b2,b3,b4,b5,b6,b7 ) IS BEGIN IF LOAD1 EVENT AND LOAD1= 1 THEN c1=b1; --- ------锁存输入数据 c2=b2; c3=b3; c4=b4; c5=b5; c6=b6; c7=b7; END IF; END PROCESS; process(clk) -------------选出首位非0的前四位十进制数输出 begin if rising_edge(clk) then if c70 then d3=c7; d2=b6; d1=c5; d0=c4; h=1110; elsif c60 then d3=c6; d2=c5; d1=c4; d0=c3; h=1101; elsif c50 then d

文档评论(0)

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

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

1亿VIP精品文档

相关文档