基于VDHL语言的数字频率计设计_第1页
基于VDHL语言的数字频率计设计_第2页
基于VDHL语言的数字频率计设计_第3页
基于VDHL语言的数字频率计设计_第4页
基于VDHL语言的数字频率计设计_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于vdhl语言的数字频率计设计唐耀清电子工程学院电子信息工程(9)2012029140023【摘要】数字频率计是使用领域非常广泛的测量仪器,在计算机、通讯设备、音频视频等科研生产领域不可缺少。通过十进制数字显示被测信号频率,具有测量迅速,精度高,显示直观等诸多优点。本实验中,我们使用vhdl开发fpga的一般流程,在软件开发平台ise上,采用频率计开发的基本原理和相应的测量方案,在fpga实验开发板进行数字频率计的设计和实现。【关键词】:频率计;vhdl;fpga【目录】一、系统总体要求21.设计要求22.系统工作原理22.单元电路的划分5二、单元电路设计61.分频器62.控制器83.计数器

2、94.锁存器135.显示单元15三、设计实现201.顶层设计202.管脚分配203.下载过程21四、测试结果及结论21测试结果:21实验结论:21五、参考资料22一、 系统总体要求1. 设计要求要求频率计设计指标如下:1、被测输入信号:方波2、测试频率范围为:10hz100mhz 3、量程分为三档:第一档:闸门时间为1s时,最大读数为999.999khz 第二档:闸门时间为0.1s时,最大读数为9999.99khz 第三档:闸门时间为0.01s时,最大读数为99999.9khz。4、显示工作方式:a、用六位bcd七段数码管显示读数。 b、采用记忆显示方法 c、实现对高位无意义零的消隐。 2.系

3、统工作原理在电子技术领域内,频率是一个最基本的参数,频率与其它许多电参量的测量方案、测量结果都有十分密切的关系。因此,频率的测量就显得更为重要.而且,目前在电子测量中,频率的测量精确度是最高的。所谓“频率”,就是周期性信号在单位时间(1秒)内变化的次数。若在一定的时间间隔t内计数,计得某周期性信号的重复变化次数为n,则该信号的频率可表达为:其中脉冲形成电路的作用是将被测信号变成脉冲信号,其重复频率等于被测频率f。时间基准信号发生器提供标准的时间脉冲信号,若其周期为1s,则门控电路的输出信号持续时间亦准确地等于1s。闸门电路由标准秒信号进行控制,当秒信号来到时,闸门开通,被测脉冲信号通过闸门送到

4、计数译码显示电路。秒信号结束时闸门关闭,计数器停止计数。由于计数器计得的脉冲数n是在1秒时间内的累计数,所以被测频率f=nhz。比如,时标信号的重复周期为1s,则加到闸门的门控信号作用时间t即闸门时间亦准确地等于1s,即闸门开通时间为1s,这时若计得10 000个数,则按式一,被测频率=10.000hz,若计数器上单位显示为“khz”,则显示10.000khz,即小数点定位在第三位。不难设想,若闸门时间改为t=0.1s,则计数值为1 000,这个数乘以10就等于1s的计数值,即hz。实际上,当改变闸门时间t时,显示器上的小数点也随着往右移一位(自动定位),即显示10.000khz。下面我们来分

5、析计数器测频的测量误差。从公式一可知,上述测频方法的测量误差,一方面决定于闸门时间t准不准,另一方面决定于计数器计得的数准不准。根据误差合成方法,从公式可得: 公式二公式二中第一项是数字化仪器所特有的误差,而第二项是闸门时间的相对误差,这项误差决定于石英振荡器所提供的标准频率的准确度。现分述如下。1误差在测频时,主门的开启时刻与计数脉冲之间的时间关系是不相关的,所以它们在时间轴上的相对位置是随机的。这样,在相同的主门开启时间内,计数器所计得的数却不一定相同,当主门开启时间t接近甚至等于被测信号周期的整数倍n倍时,此项误差为最大,下图画出的就是这种情况。图 一1若主门开启时刻为,而第1个计数脉冲

6、出现在,图 4-2 (a)中示出了0的情况(),这时计数器计得n个数(图中n=6);现在再来看图 4-2 (b)情况,即趋近于0,这就有两种可能的计数结果:若第1个计数脉冲和第7个计数脉冲都能通过主门,则可计得n+1=7个数;也可能这两个脉冲都没有能进入主门,则只能计得n-1=5个数。由此可知,最大的计数误差为个数。所以考虑到公式一),可写成 公式三式中t为闸门时间,为被测频率。从公式三可知,不管计数值n多少,其最大误差总是1个计数单位,故称“1个字误差”,简称“1误差”。而且一定时,增大闸门时间t,可减小1误差对测频误差的影响。当t选定后,越低,则由1误差产生的测频误差越大。闸门时间t准不准

7、,主要决定于由石英振荡器提供的标准频率的准确度,若石英振荡器的频率为,分频系数为k,则而所以 (4-4)可见,闸门时间的准确度在数值上等于标准频率的准确度,式中负号表示由引起的闸门时间的误差为。通常,对标准频率准确度的要求是根据所要求的测频准确度提出来的,例如,当测量方案的最小计数单位为1hz,而=hz,在t=1s时的测量准确度为(只考虑误差),为了使标准频率误差不对测量结果表明产生影响,石英振荡器的输出频率准确度应优于,即比误差引起的测频误差小一个量级。综上所述,可得如下结论:1、计数器直接测频的误差主要有两项:即误差和标准频率误差。一般,总误差可采用分项误差绝对值合成,即 公式五可把公式五

8、画成下图所示的曲线,即与t,以及的关系曲线。图 一2误差曲线从图可知,一定时,闸门时间t选得越长,测量准确度就越高。而当t选定后,越高,则由于误差对测量结果的影响越小,测量准确度就越高。但是,随着误差的减小,标准频率误差将对测量结果产生影响,并以(图中以为例)为极限,即测量准确度不可能优于。2、测量低频时,由于误差产生的测频误差大得惊人,例如,为10hz,t=1s,则由误差引起的测频误差可达到10%,所以,测量低频时不宜采用直接测频方法。2. 单元电路的划分通过对实验要求的分析,我们可以将数字频率计的单元电路划分为一下部分。1、 分频器分频器的功能是提供标准闸门时间控制信号以精确控制计数器的开

9、闭。2、 控制器控制器模块是整个数字频率计时序的关键,只有有恰当的时序关系,才能得到正确的结果。3、 计数器计数机是记录在闸门开启时间内方波上升沿的个数,从而计算出当前信号的频率大小。4、 锁存器如果计数器输出直接与译码器相连接,那么在计数过程中输出端则随输入脉冲数的增加而不断跳变,那么显示数码管则也会不断闪烁跳变,让人不能看到稳定的输出,设锁存器后,则不再跳变,便可清晰读出计数结果。5、 显示部分显示部分通过对数码管位选信号的循环扫描,实现不同位数上不同数字的显示功能,使测得的数据得以显示。二、 单元电路设计1. 分频器思路:由于频率计闸门时间1s的产生需要1hz的信号作为时基,并且显示部分

10、的数码管扫描也需要提供1khz的信号来扫描计数,但fpga板载晶振只提供48mhz的信号输入,所以需要分频器来从高频获取我们所需要的低频信号。分频器的工作原理:通过检测输入高频信号的上升沿跳变,并用一个计数单元记录下上升沿的个数,可得其累计时间=上升个数*输入信号周期,直到累计时间为所需低频信号周期的一半时,立即将计数单元清零并将低频信号的输出取反,适当设定累计上升沿的个数,即可获得我们所需的低频信号。元件符号如图二-1所示:图 二1源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use

11、ieee.std_logic_arith.all;entity fdiv isport(fin:in std_logic;fout100,fout1k:buffer std_logic);end fdiv;architecture fdiv_arc of fdiv issignal cnt1:integer range 0 to 23999:=0;signal cnt2:integer range 0 to 499:=0;beginprocess(fin)beginif finevent and fin=1 thenif cnt1=23999 thencnt1 = 0;fout1k = not

12、 fout1k;elsecnt1 =cnt1 + 1;end if;end if;end process;process(fout1k)beginif fout1kevent and fout1k=1 thenif cnt2=499 thencnt2 = 0;fout100 = not fout100;elsecnt2 =cnt2 + 1;end if;end if;end process;end fdiv_arc;仿真结果如图 二2:图 二2结果分析:从fin输入48mhz的信号, fout1k得到1khz信号的输出,fout100得到1hz的信号输出。2. 控制器思路:控制器通过输入信号b

13、signal作为时基,对计数器的计数使能、清零,以及锁存器的锁存触发的时序关系进行协调控制,是整个系统运行的关键。计数器的计数使能在一个bsignal信号的上升沿开启,在紧接的下一个上升沿关闭,从而使计数器在bsignal的一个周期所表示的闸门时间内进行计数;在上次使能关闭后,下一次使能未开启前,应对计数器清零以准备下一次计数,同时给锁存器发出锁存触发信号,以此次保存计数的结果到锁存器上。其时序关系如图二-3所示图 二3元件符号如图二-4所示:图 二4源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned

14、.all;use ieee.std_logic_arith.all;entity control isport(bsignal:in std_logic;gate,rst,latch:out std_logic);end control;architecture control_arc of control issignal g1,g2:std_logic:=0;beginprocess(bsignal,g1)beginif bsignalevent and bsignal=1 theng1 = not g1;end if;if bsignalevent and bsignal=0 theng

15、2 = not g1;end if;end process;gate = g1;latch = g2;rst = (not bsignal) and (not g1) and (g2);end control_arc;仿真结果如图二-5:图 二5结果分析:仿真结果与设计的时序关系一致。3. 计数器思路:计数器在1s的闸门时间内对被测信号进行计数,其计数所得的数值结果即为输入信号的频率,所以如果以十进制的方式对结果输出,其输出即可直接按位序在数码管上显示,而无需另作转换。由本实验要求,计数范围从10hz到100mhz,如默认显示时单位为khz,只显示6位数及一个小数点,则计数范围为0.010kh

16、z到99999.9khz,最高为实际为10000000hz位,所以需要8个十进制的计数器级联来实现计数。其级联方式为异步级联,如图二-6所示,即低位计数器的溢出信号为高一位计数器的时钟信号,并在最高为溢出后将over置位为高电平,表明被测信号超出测量范围。图 二6元件符号如图二-7:图 二7源程序:*十进制计数器单元:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity counter_4 isport(cnt_en,clk,rst

17、:in std_logic;cnt_out:buffer std_logic_vector(3 downto 0);cnt_carry:out std_logic);end counter_4;architecture cnt_arc of counter_4 isbeginprocess(clk,rst)beginif rst=1 thencnt_out = 0000;cnt_carry = 0;elsif clkevent and clk=1 thenif cnt_en=1 thenif cnt_out=1001 thencnt_out = 0000;cnt_carry = 1;elsec

18、nt_out = cnt_out + 1;cnt_carry rst, cnt_en =cnt_en, clk =csignal, cnt_out = result1, cnt_carry =c1);u2:counter_4 port map(rst = rst, cnt_en =cnt_en, clk =c1, cnt_out = result2, cnt_carry =c2);u3:counter_4 port map(rst = rst, cnt_en =cnt_en, clk =c2, cnt_out = result3, cnt_carry =c3);u4:counter_4 por

19、t map(rst = rst, cnt_en =cnt_en, clk =c3, cnt_out = result4, cnt_carry =c4);u5:counter_4 port map(rst = rst, cnt_en =cnt_en, clk =c4, cnt_out = result5, cnt_carry =c5); u6:counter_4 port map(rst = rst, cnt_en =cnt_en, clk =c5, cnt_out = result6, cnt_carry =c6);u7:counter_4 port map(rst = rst, cnt_en

20、 =cnt_en, clk =c6, cnt_out = result7, cnt_carry =c7);u8:counter_4 port map(rst = rst, cnt_en =cnt_en, clk =c7, cnt_out = result8, cnt_carry =c8);process(rst,c8)beginif rst=1 thenover = 0;elsif c8event and c8=1 thenover = 1;end if;end process;end counter_arc;仿真结果:在输入端输入频率为123456hz的信号,仿真结果如图二-8所示图 二8结

21、果分析:在一个闸门时间内对频率为123456hz的信号进行计数,最终所得结果为从result6到result1依次输出123457,即所测频率为123457hz,误差小于1%。4. 锁存器思路:锁存器作为保存计数结果的单元,在计数器完成计数后,在接受控制器发出的锁存触发上升沿信号时,将计数器的输出数据存储,而当计数器正在计数中时不保存数据。元件符号如图二-9:图 二9源程序:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity la

22、tcher isport(latchin,overin:in std_logic;numin1,numin2,numin3,numin4,numin5,numin6,numin7,numin8:in std_logic_vector(3 downto 0);overout:out std_logic;numout1,numout2,numout3,numout4,numout5,numout6,numout7,numout8:out std_logic_vector(3 downto 0);end latcher;architecture latch_arc of latcher isbegi

23、nprocess(latchin)beginif latchinevent and latchin=1 thenoverout = overin;numout1 = numin1;numout2 = numin2;numout3 = numin3;numout4 = numin4;numout5 = numin5;numout6 = numin6;numout7 = numin7;numout8 =101 thencnt = 000;elsecnt = cnt + 1;end if;end if;end process;selecte case gear iswhen 00 = data da

24、ta data = fvalue3;end case;dp case gear iswhen 00 = data = fvalue2; dp data = fvalue3; dp data = fvalue4; dp case gear iswhen 00 = data = fvalue3; dp data = fvalue4; dp data = fvalue5; dp case gear iswhen 00 = data = fvalue4; dp data = fvalue5; dp data = fvalue6; dp case gear iswhen 00 = data data d

25、ata = fvalue7;end case;dp case gear iswhen 00 = data data data = fvalue8;end case;dp null;end case;end process;process(data,hide)beginif hide=0 thencase data iswhen 0000 = led led led led led led led led led led null;end case;elseled =1111111;end if;end process;process(cnt,fvalue1,fvalue2,fvalue3,fv

26、alue4,fvalue5,fvalue6,fvalue7,fvalue8)beginhide if fvalue8=0000 and fvalue7=0000 and fvalue6=0000 thenhide if fvalue8=0000 and fvalue7=0000 and fvalue6=0000 and fvalue5=0000 thenhide null;end case;end process;process(cnt,fvalue1,fvalue2,fvalue3,fvalue4,fvalue5,fvalue6,fvalue7,fvalue8,over)beging = 0

27、;if over=1 then g = 1;elseif fvalue8=0000 and fvalue7=0000 then gear = 00;elsif fvalue8=0000 then gear = 01;elsegear = 11;end if;end if;end process;end display_arc;仿真结果:第一档结果如图二-12:图 二12第二档结果如图二-13:图 二13第三档结果如图二-14:图 二14结果分析:在不同档位时,数码管显示的是来自不同输入的数据,第一档显示1-6位,第二档显示2-7位,第三档显示3-8位,并且小数点也虽则档位的不同而改变位置。三、

28、 设计实现1. 顶层设计2. 管脚分配net dp loc = c11;net fin loc = t8;net g loc = d7;net led0 loc = b14;net led1 loc = a13;net led2 loc = c13;net led3 loc = c12;net led4 loc = a12;net led5 loc = b12;net led6 loc = a11;net sel0 loc = f8;net sel1 loc = d8;net sel2 loc = e7;net csignal clock_dedicated_route = false;# planahead generated physical constraints net csignal loc = c16;3. 下载过程全部仿真通过后,就

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论