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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于FPGA的数字频率计方案设计书报告.docx

1、基于FPGA的数字频率计方案设计书报告 班级:测控一班 学号:2907101002 姓名:李大帅 指导老师:李颖基于FPGA的数字频率计设计报告一、 系统整体设计设计要求: 1、被测输入信号:方波 2、测试频率范围为:10Hz100MHz 3、量程分为三档:第一档:闸门时间为1S时,最大读数为999.999KHz 第二档:闸门时间为0.1S时,最大读数为9999.99KHz 第三档:闸门时间为0.01S时,最大读数为99999.9KHz。4、显示工作方式:a、用六位BCD七段数码管显示读数。 b、采用记忆显示方法 c、实现对高位无意义零的消隐。 系统设计原理: 所谓“频率”,就是周期性信号在单

2、位时间(1秒)内变化的次数。若在一定的时间间隔T内计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:f = N / T .基于这一原理我们可以使用单位时间内对被测信号进行计数的方法求得对该信号的频率测量,具体实现过程简述如下: 首先,将被测信号(方波)加到闸门的输入端。由一个高稳定的石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频率基准)信号去控制门控电路形成门控信号,门控信号的作用时间T是非常准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的时间内,方波脉冲才能通过闸门成为被计数的脉冲由计数器计数。闸门开通的时间称为闸门时间,其长度等

3、于门控信号作用时间T。比如,时间基准信号的重复周期为1S,加到闸门的门控信号作用时间T亦准确地等于1S,即闸门的开通时间“闸门时间”为1S。在这一段时间内,若计数器计得N=100000个数,根据公式f = N / T,那么被测频率就是100000Hz。如果计数式频率计的显示器单位为“KHz”,则显示100.000KHz,即小数点定位在第三位。不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量范围和测量

4、精度。 系统单元模块划分:1)分频器,将产生用于计数控制的时钟分别为1HZ,10HZ,100HZ脉冲和1KHZ的用于七段显示数码管扫描显示的扫描信号。2)闸门选择器,用于选择不同的闸门时间以及产生后续的小数点的显示位置。3)门控电路,产生用于计数的使能控制信号,清零信号以及锁存器锁存信号。4)计数器,用于对输入的待测信号进行脉冲计数,计数输出。5)锁存器,用于对计数器输出数据的锁存,便于后续译码显示电路的对数据进行记忆显示,同时避免计数器清零信号对数据产生影响。6)译码显示,用于产生使七段显示数码管的扫描数字显示,小数点显示的输出信号,同时对高位的无意义零进行消隐。二、 单元电路设计1、 分频

5、器:该电路将产生四个不同频率的信号输出,因为电路板上给出了一个48MHZ的晶振,所以我们只需要对48MHZ的信号进行适当分频即可得到我们所需的四个不同频率的信号输出,我们设计一个输入为48MHZ,有四个输出端分别为1HZ,10HZ和100HZ,1KHZ的分频器,原程序如下: library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity fenpinqi is Port ( clk : in STD_LOGIC; clkout1 : out

6、STD_LOGIC; clkout10 : out STD_LOGIC; clkout100 : out STD_LOGIC;clkout1K : out STD_LOGIC);end fenpinqi; architecture Behavioral of fenpinqi issignal cnt1:integer range 1 to 24000000;signal cnt10:integer range 1 to 2400000;signal cnt100:integer range 1 to 240000;signal cnt1K:integer range 1 to 24000;s

7、ignal c1:std_logic;signal c2:std_logic;signal c3:std_logic;signal c4:std_logic;beginprocess(clk)is begin if clkevent and clk=1 then if cnt124000000 then -对cnt1进行计数,当cnt1未计满后对其进行加1 cnt1=cnt1+1; elsif cnt1=24000000 then -cnt1计满后对其进行赋一,并且令c1进行翻转,然后将c1的值赋给clkout1 c1=not c1; -由于48MHZ的的信号,前一半的时候c1为0,则后一半是

8、为1,就完成了对信号进行分频,产生了1HZ的信号 cnt1=1; end if; end if;end process;process(clk)is begin if clkevent and clk=1 then -方法同上 if cnt102400000 then cnt10=cnt10+1; elsif cnt10=2400000 then c2=not c2; cnt10=1; end if; end if;end process; process(clk)is begin if clkevent and clk=1 then -方法同上 if cnt100240000 then cn

9、t100=cnt100+1; elsif cnt100=240000 then c3=not c3; cnt100=1; end if; end if;end process;process(clk)is begin if clkevent and clk=1 then -方法同上 if cnt1K24000000 then cnt1K=cnt1K+1; elsif cnt1=24000 then c4=not c4; cnt1K=1; end if; end if;end process;clkout1=c1;clkout10=c2;clkout100=c3;clkout1K clk, cl

10、kout1 = clkout1, clkout10 = clkout10, clkout100 = clkout100, clkout1K = clkout1K); tb : PROCESS BEGIN clk=0; wait for 10 ps; clk=1; wait for 10 ps; END PROCESS;END;对该模块进行仿真结果如下:有上图可知分频器工作正常,产生的个信号也没有毛刺,结果十分理想。2、闸门选择器: 在这个模块中我们有四个输出端和六个输入端,其中四个输出端中有一个是频率输出端,是通过三个闸门选择开关输入和三个输入频率决定的,另外三个输出端则是用来后面的小数点控制

11、的,而六个输入端中的三个是上面分频器的三个输出1HZ,10HZ和100HZ,另外三个是电路板上的拨动开关,用来选择闸门,控制输出。其原程序和分析如下: library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity SELE is Port ( SE1 : in STD_LOGIC; SE10 : in STD_LOGIC; SE100 : in STD_LOGIC; F1HZ : IN STD_LOGIC; F10HZ : IN STD_L

12、OGIC; F100HZ :IN STD_LOGIC; FREF : out STD_LOGIC; DP1 : out STD_LOGIC; DP2 : out STD_LOGIC; DP3 : out STD_LOGIC);end SELE;architecture Behavioral of SELE isbeginPROCESS(SE1,SE10,SE100) IS BEGIN IF SE1=1 AND SE10=0 AND SE100=0 THEN FREF=F1HZ; -当闸门控制在第一档的时候,令输出端输出1HZ输入端的输入,小数点控制dp1有效,dp2,dp3无效 DP1=0;

13、DP2=1; DP3=1; END IF; IF SE1=0 AND SE10=1 AND SE100=0 THEN FREF=F10HZ; -第二档,输出为10HZ,dp2有效 DP1=1; DP2=0; DP3=1; END IF; IF SE1=0 AND SE10=0 AND SE100=1 THEN FREF=F100HZ; -第三档,输出为100HZ,dp3有效 DP1=1; DP2=1; DP3 SE1, SE10 = SE10, SE100 = SE100, F1HZ = F1HZ, F10HZ = F10HZ, F100HZ = F100HZ, FREF = FREF, DP

14、1 = DP1, DP2 = DP2, DP3 = DP3); tb : PROCESS BEGIN F1HZ=0;FREF=0; wait for 100 ns; F1HZ=1;FREF=1; WAIT FOR 100 NS; END PROCESS;END;仿真结果如图:有仿真结果可知闸门选择器工作正常,能够准确输出我们所需的信号。 3、门控信号:在此模块中有一个输入端和两个输出端,输入端为上面的闸门选择器输出的频率,两个输出端分别为计数器是能控制信号(锁存器控制信号),和计数器清零信号。具体源程序即分析如下: library IEEE;use IEEE.STD_LOGIC_1164.AL

15、L;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity CONTROLS is Port ( FREF : in STD_LOGIC; GAT : out STD_LOGIC; CLR : out STD_LOGIC);end CONTROLS;architecture Behavioral of CONTROLS isSIGNAL G1: STD_LOGIC:=0;begin PROCESS(FREF) IS BEGIN IF FREFEVENT AND FREF=1 THEN G1=NOT G1; -该过程

16、对时钟信号又一次进行分频,产生出半个周期时间为1的控制信号,作为计数使能,保证了时间的准确性 END IF; END PROCESS; PROCESS(FREF,G1) IS BEGIN IF FREF=0 AND G1=0 THEN CLR=1; -该过程产生清零信号,即当使能信号为无效0同时时钟为0时,即在技术始终无效半个时钟时间后,对计数器清零 ELSE CLR=0; -清零信号高电平有效 END IF; END PROCESS; GAT FREF, GAT = GAT, CLR = CLR); tb : PROCESS BEGIN FREF=0; WAIT FOR 100 NS; FR

17、EF=1; WAIT FOR 100 NS; END PROCESS;END;对上面的文件进行仿真,结果如下:由上图的仿真结果可知,控制电路工作正常,输出信号稳定,很理想。同时我们也可以看出来该模块对分频器的时钟输出的稳定性依赖十分严重,一旦分频器输出时钟有毛刺,该控制信号将会完全的无效,这也是为什么我知道上面的分频器设计不是最优的方案,却还是采用了上述方法的原因。4、计数器: 该模块实现的功能是对输入信号脉冲的计数,并正确的输出结果和溢出。使用上面的门控信号产生的gat信号控制计数器的使能端,以实现计数器的定时计数。该模块是使用六个十进制计数器同步并联而成的,首先我们设计用于并联的十进制计数

18、器,原程序如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity CNT10 is Port ( CLK : in STD_LOGIC; CLR : in STD_LOGIC; ENA : in STD_LOGIC; CQ : out STD_LOGIC_VECTOR (3 downto 0); CO : out STD_LOGIC);end CNT10;architecture Behavioral of CNT10 is S

19、IGNAL CQI: STD_LOGIC_VECTOR(3 DOWNTO 0):=0000; -定义中间信号CQI,用于数据输出的循环计数beginPROCESS(CLK,CLR) IS BEGIN IF CLR=1 THEN CQI=0000; -当CLR清零信号有效时使输出为0000,无效时进行下述操作 ELSIF CLKEVENT AND CLK=1 THEN -对时钟进行计数 IF ENA=1 THEN -判断使能信号,有效则进行计数,否则不作处理 IF CQI=1001 THEN CQI=0000; -数据09循环,计满后重新回到0 ELSE CQI=CQI+1; END IF; E

20、ND IF; END IF; END PROCESS; CO = 1 when ena = 1 and cqi = 9 else 0; -进位信号,最高位的仅为信号作为计数的溢出信号 CQ CLK, CLR = CLR, ENA = ENA, CQ = CQ, CO = CO); tb : PROCESS BEGIN CLK=0; wait for 100 ns; CLK=1; WAIT FOR 100 NS; END PROCESS;END; 仿真结果如图: 如仿真结果我们可以看出,该模块运行正常,计数稳定,结果十分理想。5、锁存器: 由于前面的计数器的输出为六组四位二进制数和一个溢出信号,所以我们使用的锁存器也使用六个四位锁存器和一个一位锁存器。锁存器使用下降沿锁存,即当计数器的使能信号变为无效的一瞬间我们令锁存器将数据锁存。四位锁存器的原代码如下:library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity LATCH4 is Port ( CLK : in STD_LOGIC; DIN

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

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