ImageVerifierCode 换一换
格式:DOCX , 页数:37 ,大小:54.86KB ,
资源ID:9146233      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9146233.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于FPGA的等精度频率计论文版.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于FPGA的等精度频率计论文版.docx

1、基于FPGA的等精度频率计论文版 基于FPGA的等精度数字频率计 摘要:利用超高速硬件描述语言(VHDL)在现场可编程逻辑门阵列(FPGA)上编程实现的纯数字式等精度频率计,不但具有较高的测量精度,而且其测量精度不会随着被测信号频率的降低而下降。为了实现对任意信号进行频率测量,在前端输入加整形电路即可。关键字: VHDL FPGA 等精度 波形整形串行BCD码除法 Design of the Cymometer Based on FPGAAbstract: The cymoneter that be implemented with using the VHDL (Very High Spee

2、d Integrated Hardware Description Language) to program into the FPGA (Field Programmable Gate Array )chip,it not only has high precision,but also its precision do not decrease with measured-frequency s becoming lower. In order to measure any signal,it put a reshaping circuit at the front-end.Keyword

3、: VHDL FPGA Iso-precision Wave reshaping Serial BCD division目录第一章 总体设计.3第二章 单元电路设计.5第三章 软件设计.5第四章 系统测试.6第五章 结论及参考文献.6第六章 附录.6一.总体设计基于传统测频原理的频率计的测量精度将随被测信号频率的下降而降低,在实用中有较大的局限性,而等精度频率计不但具有较高的测量精度,而且在整个频率区域能保持恒定的测试精度。1.1.方案选择1.1.1.总体方案比较:方案一:采用数字逻辑电路制作,用IC拼凑焊接实现。其特点是直接用现成的IC组合而成,简单方便,但由于使用的器件较多,连线复杂,体积

4、大,功耗大,焊点和线路较多将使成品稳定度与精确度大打折扣。方案二:采用可编程逻辑器件(CPLD)制作,利用EDA软件编程,下载烧制实现。将所有器件集成在一块芯片上,体积大大减小的同时还提高了稳定性,并且可应用EDA软件仿真,调试,每个设计人员可以充分利用软件代码,提高开发效率,缩短研发周期,降低研发成本。易于进行功能扩展,可以利用频率计的核心技术,改造成其它产品。实现方法灵活,调试方便,修改容易。比较以上两种方案,易见采用后者更优。1.1.2.测频方案比较:方案一:完全按定义式进行测量。被测信号x经放大整形形成时标X,晶振经分频形成时基TR。用时基TR开闸门,累计时标X的个数,则有公式可得x=

5、1/X=N/TR。此方案为传统的测频方案,其测量精度将随被测信号频率的下降而降低。方案二:对被信号的周期进行测量,再利用(频率周期)可得频率。测周期时,晶振R经分频形成时标X,被测信号经放在整形形成时基T控制闸门。闸门输出的计数脉冲XTR,则TX=NX。但当被测信号的周期较短时,会使精度大大下降。方案三:等精度测频,按定义式进行测量,但闸门时间随被测信号的频率变化而变化。如图所示,被测信号x经放大整形形成时标X,将时标X经编程处理后形成时基TR。用时基TR开闸门,累计时标X的个数,则有公式可得x=1/X=N/TR。此方案闸门时间随被测信号的频率变化而变化,其测量精度将不会随着被测信号频率的下降

6、而降低。综上所述,选用第三种等精度测频方案。FX 图1 测频方案方框图1.2.串行BCD码除法介绍测频方案中用到了定义式:,即要用到除法运算。利用FPGA实现二进制除法运算,一种方法是采用逼近法,这种方法速度低、准确性不高。另一种方法是采取被除数与除数的倒数相乘的方法,即将除数作为寄存器的地址,其倒数的小数部分作为寄存器的内容,通过一次寄存器寻址来计算除数的倒数。这种方法在一个时钟周期内即可完成一个完整的除法运算,虽然速度较高,但对于多字节除法运算,不仅程序复杂,而且占用资源较多。根据频率计的实际情况,本设计采用串行除法运算,利用多个时钟周期完成一个完整的除法运算,从而兼顾了频率计对速度和资源

7、两方面的要求。1.2.1.多位串行BCD码减法原理:在数字串行除法运算中,减法运算是必不可少的部分。数字串行BCD码的减法运算是将P位的BCD码分为P个宽为4的二进制数,然后从低位开始相减,在P个时钟周期内完成减法操作。如果输入的操作数位数为8,那么串行BCD码减法器可以在8个时钟周期内完成8位BCD码减法运算。数字串行减法的控制也比较简单,1位BCD码减法运算完成,进行移位操作,并且移位次数加1,然后通过采用start信号指示新计算周期。当移位次数为n时,输出移位寄存器完成串并转换,输出结果。设计者可以根据实际情况,通过选择不同的n,提高设计的灵活性。本设计选择n=8。该设计在提高速度的同时

8、,节省了资源。实验证明,采用1OOMHz的工作频率,实现一个8位BCD码串行减法运算,耗用的资源却小于实现2位BCD码并行减法运算所耗用的资源。1.2.2.多位串行BCD码除法原理:本设计采用循环式除法运算,循环原理可以用下面的公式表示:j+1=rj-dqj+1式中,j为第j步的余数,0为被除数;d为除数;qj+1为第j+1步所得的商;r为与移位步长有关的常数,在此取为16。除法运算循环图表如图2所示。 图2 串行BCD码除法运算算循环图循环步骤如下:将j左移四位,构成rj。通过多次BCD码减法运算,求得部分商qJ+1,得到部分余数。部分余数、部分商移位,准备下次循环。高速串行BCD码除法是建

9、立在BCD码减法运算基础上的循环运算。用被除数减除数得到部分余数的BCD码,如果够减,则使商加1;否则,余数和商同时左移四位,并记录移位的次数m,根据对有效位数的不同要求,可以对m进行赋值,如果要求保留8位有效数字,则m=8。在这种循环除法运算中,减少循环的次数是提高运算速度比较有效的方法。在一般循环式除法运算中,是从低位开始进行循环相减,循环次数等于商。如果是8位除法运行,则得到一个8位的商,要进行8位次的BCD码减法循环,例如:568952308=71119038,要进行71119038次循环,计算的速度可想而知。在本设计中借鉴了一般十进制除法的运算方法,从高位开始相减,大大减少了循环次数

10、。下面以一个例子说明它的原理:将被除数和除数移位,使其第一位BCD码不为0000,并记录移位的次数P(例如:5689523080000000,p=8)。比较最高位的大小,如果除数的最高位大于被除数的最高位,则将除数右移4位,同时将P减1(即:5689523008000000,且p=7)。得到的数卢为小数点的位置(F:7说明小数点的位置在第七位数后)。循环相减。当部分余数小于08000000,再将部分余数左移四位,继续进行相减。循环m次后即可得到m个有效数字的结果,然后根据p可以确定小数点的位置。使用这种方法计算一个8位数的除法运算,循环减法次数最大为80次,每次循环使用时间为8个时钟周期。如果

11、工作频率为100MHz,则最长的运算时间为64s,运算速度大大提高。二.单元电路设计2.1.整形电路: 图 3 输入信号整形电路图三.软件设计 3.1.程序流程图:频率测量程序流程图如图所示。 图 4 频率测量程序流程图四.系统测试4.1.使用仪器: 直流稳压电源: DC POWER SUPPLY DF1731SL2A,Zhong Ce Electronics CO., LTD; 数字万用表:UT101 MULTIMETER 金创电子仪器厂;FPGA实验仪:DP-FPGA, 广州致远电子有限公司;4.2.测试数据:被 测 次 数12345678被测频率(Hz)测得频率(Hz)测量误差()五.结

12、论及参考文献5.1.参考文献:1.潘松,黄计业.EDA 技术实用教程m.北京:科学出版社.2002。2.黄智伟主编,王彦,陈文光,朱卫华编著.全国大学生电子设计竞赛训练教程M.北京:电 子工业出版社 2005.3.南华大学第六届全国电子设计竞赛全体参赛成员 .第六届电子大赛资料C(多谢老师提供).4.王松武,蒋志坚.通用仪器【M】.哈尔滨:哈尔滨工程大学出版社.2002。5.高吉祥.电子技术基础实验与课程设计【M】.北京:电子工业出版社.2002。六.附件6.1.元件清单:DesignatorPart TypeQuantityFootprint电阻3.3k1axial0.4电阻10k2axia

13、l0.4电阻100k4axial0.4电容瓷片电容2rad0.1插针2针2sip2插针3针1sip3插针20针1idc20芯片DAC08321DIP20电容电解电容1rb.2/.4液晶2x16字符型1led-a集成运放LM3241DIP14电阻RES22axial0.46.2.程序清单:-/* DJDPLJ_TOPVHD*/-顶层模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following line

14、s to use the declarations that are- provided for instantiating Xilinx primitive components.-library UNISIM;-use UNISIM.VComponents.all;entity djdplj_top is Port (rst,clk:in std_logic; dc,das:in std_logic; rs,wr,e:out std_logic; lcd_data:inout std_logic_vector(7 downto 0);end djdplj_top;architecture

15、Behavioral of djdplj_top iscomponent cepin is Port (bz:in std_logic; dc:in std_logic; rst,cl:in std_logic; bzclk,dcclk:out std_logic_vector(31 downto 0);end component cepin;component div is Port (clk,rst:in std_logic; bei,chu:in std_logic_vector(31 downto 0); shang:out std_logic_vector(31 downto 0);

16、 dian:out integer range -10 to 10 );end component div;component lcd is Port (clk,rst:in std_logic; rs,wr,e:out std_logic; data:inout std_logic_vector(7 downto 0); pl:in std_logic_vector(31 downto 0); d:in integer range -10 to 10);end component lcd;component reset is Port (clk,rst:in std_logic; cl,cl

17、r:out std_logic );end component reset;signal rst1,cl1,clr1,clkk:std_logic;signal bzclk1,dcclk1,shang1:std_logic_vector(31 downto 0);signal dian1:integer range -10 to 10;signal dc1:std_logic;beginu1:cepin port map(bz=clkk,dc=dc1,rst=clr1,cl=cl1,bzclk=bzclk1,dcclk=dcclk1);u2:div port map(clk=clk,rst=r

18、st1,bei=dcclk1,chu=bzclk1,shang=shang1,dian=dian1);u3:lcd port map(clk=clk,rst=rst1,rs=rs,wr=wr,e=e,data=lcd_data,pl=shang1,d=dian1);u4:reset port map(clk=clk,rst=rst1,cl=cl1,clr=clr1);process(clk,rst)variable cnt:integer range 0 to 15;begin if rst=0 then cnt:=0;clkk=0; elsif rising_edge(clk) then i

19、f cnt=15 then cnt:=0;clkk=not clkk; else cnt:=cnt+1; end if; end if;end process;process(clk,rst)variable cnt:integer range 0 to 3200000;begin if rst=0 then cnt:=0; elsif rising_edge(clk) then if cnt=10000 then cnt:=cnt+1; rst1=1; elsif cnt=20000 then cnt:=cnt+1; rst1=0; else cnt:=30000; rst1=rst; en

20、d if; end if;end process;process(das,dc)begin if das=0 then dc1=dc; end if;end process;end Behavioral;-/* RESETVHD*/-复位模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;- Uncomment the following lines to use the declarations that are- provided fo

21、r instantiating Xilinx primitive components.-library UNISIM;-use UNISIM.VComponents.all;entity reset is Port (clk,rst:in std_logic; cl,clr:out std_logic );end reset;architecture Behavioral of reset isbeginprocess(clk,rst)variable cnt:integer range 0 to 32000000;begin if rst=0 then cnt:=0;clr=1;cl=0;

22、 elsif rising_edge(clk) then cnt:=cnt+1; if cnt=1000000 then -cnt=1000000 clr=1; elsif cnt=2000000 then -cnt=2000000 clr=0; elsif cnt=3000000 then -cnt=3000000 cl=1; elsif cnt=19000000 then -cnt=19000000 cl=0; elsif cnt=20000000 then -cnt=20000000 cnt:=0; end if; end if;end process;end Behavioral;-/

23、*DIVVHD*/-串行BCD码除法模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity div is Port (clk,rst:in std_logic; bei,chu:in std_logic_vector(31 downto 0); shang:out std_logic_vector(31 downto 0); dian:out integer range -10 to 10 );end div;architectu

24、re Behavioral of div istype ss is array (1 to 8) of std_logic_vector(3 downto 0);signal s:ss;signal a,b:std_logic_vector(31 downto 0);signal n:integer range -10 to 10;signal c:integer range 0 to 8;signal k:integer range 1 to 7;signal d:integer range 0 to 1;beginprocess(clk,k,n,c,s,bei,chu,a,b,rst)va

25、riable cnt:integer range 0 to 31;variable m:std_logic_vector(3 downto 0);begin if rst=0 then k=5;n=7;c=8;cnt:=0;m:=0000;s=(0000),(0000),(0000),(0000),(0000),(0000),(0000),(0000); shang0); elsif rising_edge(clk) then case k is when 1=if b(31 downto 28)=0 then b=b(27 downto 0)&0000; if n10 then n=n+1;

26、 else k=5; n=7; end if; else kif ab then b=0000&b(31 downto 4); n=n-1; else if n=0 then k=5; n=7; else k if a(cnt+3 downto cnt)=b(cnt+3 downto cnt)+d then a(cnt+3 downto cnt)=a(cnt+3 downto cnt)-b(cnt+3 downto cnt)-d; d=0; else a(cnt+3 downto cnt)=a(cnt+3 downto cnt)+10-b(cnt+03 downto cnt)-d; d=1;

27、end if; if cnt28 then cnt:=cnt+4; k=3; else k m:=m+1; cnt:=0; d=0; if a=b then s(c)=m; m:=0000; if c=1 then k=5; else k=7; c=c-1; if a(31 downto 28)=0 then a=a(27 downto 0)&0000; else b=0000&b(31 downto 4); end if; end if; else kif a=b then k=3; else a=a(27 downto 0)&0000; s(c)=2 then c=c-1; else ka=bei; b=chu; shang=s(8)&s(7)&s(6)&s(5)&s(4)&s(3)&s(2)&s(1); k=6; dian=n; n=7; m:=0000; cif a(31 downto 28)=0 then

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1