使用VHDL语言进行的100MHZ数字频率计的设计
- 格式:doc
- 大小:1.71 MB
- 文档页数:23
基于VHDL语言的数字频率计的设计方案
1.引言数字频率计是通讯设备、计算机、电子产品等生产领域不
可缺少的测量仪器。
由于硬件设计的器件增加,使设计更加复杂,可靠性变差,延迟增加,测量误差变大。
通过使用EDA技术对系统功能进行描述,运用VHDL语言,使系统简化,提高整体的性能和可靠性。
采用VHDL编程设计的数字频率计,除了被测信号的整形部分,键输入和数码显示以外,其他都在一片FPGA上实现,从而让整个系统非常精简,让其具有灵活的现场更改性,在不改变硬件电路的基础上,进一步改进提高系统的性能,使数字频率计具有高速,精确度高,可靠性强,抗干扰等优点,为数字系统进一步的集成创造了条件。
2.数字频率计的工作原理
频率测量方法中,常用的有直接测频法、倍频法和等精度测频法。
中直接测频法是依据频率的含义把被测频率信号加到闸门的输入端,只有在闸门开通时间T(以ls计)内,被测(计数)的脉冲送到十进制计数器进行计数。
直接测频法比其他两个方案更加简单方便可行,直接测频法虽然在低频段测量时误差较大,但在低频段我们可以采用直接测周法加测量,这样就可以提高测量精度了。
直接周期测量法是用被测周期信号直接控制计数门控电路,使主门开放时间等于Tx,时标为Ts的脉冲在主门开放时间进入计数器。
设在Tx期间计数值为N,可以根据Tx=N乘以Ts来算得被测信号周期。
因此本文采用低频测周,高频测频的方法来提高精度,减小误差。
3.主要功能模块的实现
该系统设计的控制器是由状态机实现,通过在不同测量档位,选择合理的时基信号频率降低误差,确定各状态转移条件和状态名,采用低频档位测周,。
关于数字频率计设计[摘要]本报告介绍了一种以大规模可编程逻辑芯片为设计载体,由顶到底分层设计,多功能数字频率计的设计方法。
该频率计采用VHDL语言程序与原理图相结合的方法,极大地减少了硬件资源占用。
该数字频率计测量范围为0到9999HZ,基准频率为1HZ,结果用4只7段数码管显示十进制结果。
中间用到了设置控制电路、计数电路、锁存电路和译码电路等模块。
仿真结果表明,该数字频率计性能优异,设计语言灵活,硬件更简单,速度更快。
[关键词]数字频率计;控制电路;计数电路;锁存电路With regard to the design of digital frequency meter[Abstract] The present report describes a large-scale programmable logic chip design carrier, in the end by a top-tiered design, multi-function digital frequency meter design methods. The frequency counter using VHDL language programs, and the method of combining schematic, greatly reducing the hardware footprint. The digital frequency meter measurement range from 0 to 9999HZ, the base frequency of 1HZ, the results with the four 7-segment LED display decimal results. Intermediate used for setting up control circuit, counting circuit, latch circuit and decoding circuit modules. The simulation results show that the digital frequency meter high-performance, design language flexibility, hardware simpler and faster.[Key words]digital frequency meter; control circuit; counting circuit; Latch Circuit目录摘要 (I)Abstract (II)第1章引言 (3)第2章VHDL的简述 (4)2.1 VHDL的发展 (4)2.2 VHDL的特点 (4)2.3 VHDL语言结构 (4)2.3.1 实体(ENTITY) (5)2.3.2结构体(ARCHITECTURE) (6)2.4 VHDL软件设计简介 (6)第3章频率计方案的设计 (8)3.1 方案一 (8)3.2 方案二 (11)3.3 方案比较 (12)3.4 方案改造 (12)第4章利用VHDL语言设计频率计 (13)4.1 系统功能的分析与电路设置 (13)4.2 测频原理 (13)4.3 测频模块工作描述及VHDL程序 (13)4.3.1 计数模块(CNT10) (13)4.3.2 锁存模块(REG16B) (14)4.3.3 控制模块(TESTCTL) (15)4.3.4 译码模块(DISPLAR) (15)4.3.5 测频主系统实现(FREQ) (16)4.3.6 原理图的制作 (18)第5章数字频率计仿真及分析 (19)5.1 MAX+PLUS II的特点 (19)5.2 MAX+PLUS II的编译、仿真简介 (19)5.3 多功能数字频率计编译及仿真 (20)5.3.1 编译结果的记载 (20)5.3.2 仿真结果的记载 (22)5.4 引脚锁定 (23)5.5 程序的下载和测试 (24)第6章实验过程中遇到的问题及分析 (25)结论 (25)致谢 (26)参考文献 (27)附录 (28)附录一方案一总程序 (28)附录二原理图 (34)附录三实验结果记录 (35)第1章引言随着计算机技术和半导体技术的发展,传统的硬件电路电路设计方法已大大落后于当今技术的发展,一种崭新的、采用硬件描述语言的硬件电路设计方法已经兴起,这是电子设计自动化(EDA)领域的一次重大变革。
基于VHDL的高精度数字频率计的设计与实现作者:屈宝鹏张喜凤李想来源:《现代电子技术》2013年第18期摘要: FPGA/CPLD在数字系统开发的应用日益广泛,影响到生产生活的方方面面。
电子计数式频率计在各种电子测量领域应用广泛。
为了降低频率计的量化误差,提高频率测量精度,在Quartus Ⅱ9.0开发环境下,用VHDL语言设计了一种能在1 Hz~100 MHz频率范围内使频率测量相对量化误差小于10-5的高精度数字频率计,仿真结果表明,所设计的数字频率计达到了设计精度要求,并能准确显示测量数值。
最后,以Cyclone Ⅱ系列EP2C20F484C7芯片为硬件环境,验证了各项设计功能的正确性。
关键词: VHDL;频率测量;量化误差; EP2C20F484C7中图分类号: TN710⁃34 文献标识码: A 文章编号: 1004⁃373X(2013)18⁃0144⁃040 引言FPGA/CPLD在数字系统设计中的广泛应用,影响到了生产生活的各个方面[1⁃4]。
在FPGA/CPLD的设计开发中,VHDL语言作为一种主流的硬件描述语言,具有设计效率高,可靠性好,易读易懂等诸多优点[3,5⁃6]。
作为一种功能强大的FPGA/CPLD 数字系统开发环境,Altera公司推出的Quartus Ⅱ,为设计者提供了一种与结构无关的设计环境,使设计者能方便的进行设计输入、快速处理和器件编程,为使用VHDL语言进行FPGA/CPLD设计提供了极大的便利[7]。
频率计作为电子技术中一种常用的电子测量仪器,有着广泛的应用,以往的电子计数式频率计大多数是采用单元电路或单片机技术进行设计的。
本文在Quartus Ⅱ9.0开发环境下,用VHDL语言设计了一种高精度电子计数式频率计,较传统的单元电路设计更灵活,同时大大简化了电路结构的复杂性,提高了电路的稳定性。
为了提高频率测量精度,使量化误差小于10-5,本文设计的频率计采用了双路计数器,在1 Hz~100 MHz的频率范围内的量化误差均满足设计要求。
数字频率计的设计一、频率计实现的功能要设计的频率计的测量范围为1MHz。
为了提高测量的精度,量程分为三档,分别是:10kHz、100kHz、1MHz。
并要求在测量频率大于或小于选择的量程时,频率计自动换档。
1、当读数大于999时,频率计处于超量程状态,下一次测量时,量程自动增加一档。
2、当读数小于009时,频率计处于欠量程状态,下一次测量时,量程自动减小一档。
3、当超出测量范围时,显示错误。
4、在计数时不显示数据,计数完成后只显示测量结果。
5、小数点位置要自动移位。
二、频率计各部分的分析在这个设计中,需要用计数器来进行计数,而且计数器在各个档位要被重复使用,在测量的过程中,计数允许时钟信号还要进行调整,故将计数器设计成一个单独的模块,提供计数值的输出。
显示结果包括数值显示,档位显示及溢出标志显示。
其中数值显示要用到三个数码管,实验箱上连在一起的三个数码管中,只有两个数码管内部接有译码器,因此我们自己还要在程序中为那个没有译码器的数码管再加一段七段译码器程序来显示结果。
档位标志由三个LED灯来显示,代替数码管上的小数点的功能。
溢出标志由两个LED灯来显示,其中一个显示结果溢出,另一个显示输入信号在测量范围之内。
该频率计的顶层逻辑电路原理图如图(1)所示:图(1)三、频率计各部分的设计和实现从上面的分析可以知道,频率计可以由三个模块来组成。
下面对各个模块的设计方法和实现方法进行详细说明。
1、时基进程的设计和实现在实际使用时,输入的信号是随意的,没有办法预知输入的频率。
因此选取频率计的时基是非常重要的。
在设计要求中,将量程分为三档,在某一档进行测量时,需要提供该档的时基。
在10kHz档,该档最大读数为9.99kHz,最小读数为0.01 kHz,所以要提供的时基是频率为0.01 kHz的脉冲。
同理,在100 kHz档上,要提供的时基应该是频率为0.1 kHz的脉冲。
在1 MHz档上,要提供的时基是频率为1 kHz的脉冲。
课程设计题目、内容、要求目录1 课程设计题目、内容与要求……………………………………1.1 设计内容……………………………………………………1.2 具体要求……………………………………………………2 系统设计…………………………………………………………2.1 设计思路……………………………………………………2.2 系统原理与设计说明3 系统实现…………………………………………………………4 系统仿真…………………………………………………………5 硬件验证(操作)说明…………………………………………6 总结……………………………………………………………7 参考书目………………………………………………………1 课程设计题目、内容与要求1.1课程设计的题目:数字频率计设计1.2课程设计内容:(1)设计一个能测量方波信号的频率计;(2)测量范围是0-999999Hz;(3)结果用十进制数显示。
2 系统设计2.1设计思路:2.1.1 数字频率计是一种用十进制数字显示被测信号频率的数字测量仪器.它的基本功能是测量方波信号及其他各种单位时间内变化的物理量。
本数字频率计采用自顶向下的设计思想,通过闸门提供的1s闸门时间对被测信号进行计数及测出的被测信号的频率,测出的频率再通过译码器译码后输出给显示器显示。
根据系统设计的要求,数字频率计的电路原理框图如下:数字频率计电路原理框图2.2 系统原理与设计说明系统各个模块的功能如下:2.2.1标准时钟发生电路模块借用实验板上标准时钟发生电路,为计数闸门控制电路提供一个标准8Hz信号。
2.2.2 计数器闸门控制电路模块计数器闸门控制电路就是产生三个控制信号,即计数器复位信号、4位十进制计数器允许计数信号、锁存信号。
2.2.3锁存电路模块锁存电路就是为了让LED数码管在信号来临之前保持计数值不变。
2.2.4计数器复位电路模块计数器复位电路是让频率计恢复到计数初始态。
2.2.5 LED数码管驱动电路模块LED数码管驱动电路就是为LED数码管提供驱动电压。
某某:X中权学号:152210303127班级:电子1班数电课设报告100MHz等精度频率计设计〔基于Verilog HDL〕一、设计要求:提供一个幅值为10mV ~ 1 V,频率为 1 ~ 100MHz的正弦信号,需测试以下指标:1.频率:测频X围 1Hz ~ 100MHz,测频精度为测频全域内相对误差恒为百万分之一。
2.占空比:测试精度 1% ~ 99%3.相位差:测试两个同频率的信号之间的相位差,测试X围 0 ~ 360 某某科技大学2017/10/12二、设计分析使用FPGA数字信号处理方法,首先需要将正弦信号转换成可读取的数字方波信号,再经过FPGA 设计计算得出所需测量值。
三、模电局部首先选择比拟器,对于 100 MHz 信号,比拟器灵敏度需要达到5ns内,TI公司的LTV3501灵敏度为4.5ns,符合要求由TLV3501数据手册得知:当频率低于 50MHz 的时候,正弦波的峰峰值需大于 20mV,频率高于50MHz时,峰峰值需大于 1V。
然后需要选择放大器,当正弦波幅值为 10mV时,放大倍数需大于35。
方法通过二级放大,一级用OPA847放大20倍,二级用OPA675放大8倍,得到总放大倍数160的正弦波。
经转换后的输出电压符合TTL电平要求,可以被识别出0和1。
四、数电局部开发板:Cyclone IV E: EP4CE6E22C8板载时钟为 50MHz,带4个按键和一个复位键〔按键按下为0,抬起为1〕,四个七段数码管〔共阳〕,FPGA的引脚可由杜邦线引出。
设计思路:测量频率:输入一个100MHz的基准频率,由计数器T1来计算基准频率的上升沿个数,即周期数。
输入一个被测信号,它由计数器T2来测量周期数。
两个信号在同一个使能信号EN〔使能信号时间为1~2s〕下开始计数,计数完后,存储计数结果,由〔T1 * 10〕可以算出具体的计数时间〔单位ns〕,再由(〔T1 * 10ns〕/T2 )*10^9可算得被测信号频率,单位Hz。
基于vhdl语言直接测频法频率计设计一.设计原理频率计的基本原理是用一个频率稳定度高的频率源作为基准时钟,对比测量其他信号的频率。
测频法就是在确定的闸门时间Tw内,记录被测信号的脉冲个数Nx ,则被是信号的频率为fx=Nx/Tw。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为1 s。
闸门时间越长,得到的频率值就越准确,但闸门时间越长,则每测一次频率的间隔就越长。
闸门时间越短,测得的频率值刷新就越快,但测得的频率精度就受影响。
一般取1 s作为闸门时间。
原理图:原理图设计框图:设计框图二.系统分析1.顶层文件。
用于集成各个模块的进程,定义输入输出端口。
2.控制模块。
控制十进制计数器的计数及锁存器的工作,当计数器停止计数,则锁存器接收计数器的计数数据。
3.计数器。
由于需要使用数码管显示频率,所以采用的是十进制可清零、具有使能功能的计数器模块。
4.锁存模块。
接受七个计数器信号中的四个进行锁存。
5.译码显示模块。
因为每个数码管有八个段(包括小数点),所以需要八个段选输出,另外有四个位选输出控制四位数码管的亮灭。
二.程序设计(1)十进制计数器模块计数器模块是对输入脉冲信号的频率进行测量,由4个十进制加法器组成,其中EN为计数器选通控制信号,START为计数清零信号。
在计数清零信号清零后,当计数使能信号EN有效时,开始对待测信号进行计数。
本程序计数使能信号EN的宽度为1s(与闸门信号同宽),计数结果为待测信号的频率。
(2)4位锁存器模块当锁存信号上升沿到来时,将计数器的计数值锁存,这样可由外部的八段译码器译码并在数码管上显示。
设置锁存器的好处是显示的数据稳定。
复位后,锁存器里面的内容将清零。
另外程序设定开关s3用于将低四位送锁存器,当按下时显示低四位,用于测量大于9999Hz的信号时显示低四位。
(3)控制模块根据频率的定义和测量的基本原理,测量信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许(EN)的信号,1秒计数结束后,计数值锁入锁存器的锁存信号。
VHDL数字系统设计与仿真作业三:数字频率计学院:学号:姓名:一.实验要求截图二.设计思路截图三.各模块设计思路,源程序及仿真1.测量/校验选择模块源程序:meas_test.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY meas_test ISPORT(func_sel,meas,test:IN STD_LOGIC;CP1:OUT STD_LOGIC);END meas_test;ARCHITECTURE lion OF meas_test ISBEGINPROCESS(func_sel,meas,test)BEGINIF func_sel='1'THEN CP1<=test;ELSECP1<=meas;END IF;END PROCESS;END lion;仿真截图:2.测频控制信号发生器模块源程序:clk2.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY clk2 ISPORT(clk: IN STD_LOGIC;clk2: OUT STD_LOGIC);END clk2;ARCHITECTURE lion OF clk2 ISSIGNAL clk2_temp:STD_LOGIC;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THEN clk2_temp <= NOT clk2_temp;END IF;END PROCESS;clk2<=clk2_temp;END lion;仿真截图:3.四级十进制计数模块源程序:counter.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter ISPORT(RD:IN STD_LOGIC;CP:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(15 DOWNTO 0);C:OUT STD_LOGIC);END counter;ARCHITECTURE lion OF counter ISSIGNAL count:STD_LOGIC_VECTOR(15 DOWNTO 0);BEGINPROCESS(RD,CP)BEGINIF(RD='0')THENcount<="0000000000000000";C<='0';ELSE IF(CP'EVENT AND CP='1')THEN IF(count="1001100110011001")THEN count<="0000000000000000";C<='1';ELSE IF(count(11 DOWNTO 0)="100110011001")THEN count(15 DOWNTO 12)<=count(15 DOWNTO 12)+1;count(11 DOWNTO 0)<="000000000000";ELSE IF(count(7 DOWNTO 0)="10011001")THEN count(15 DOWNTO 8)<=count(15 DOWNTO 8)+1;count(7 DOWNTO 0)<="00000000"; C<='0';ELSE IF(count(3 DOWNTO 0)="1001")THEN count(15 DOWNTO 4)<=count(15 DOWNTO 4)+1;count(3 DOWNTO 0)<="0000";C<='0';ELSE count<=count+1;END IF;END IF;END IF;END IF;END IF;END IF;END PROCESS;Q<=count;END lion;4.送存选择/报警模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY PASS_ALERT ISPORT(K: IN STD_LOGIC;CLK: IN STD_LOGIC;Q: IN STD_LOGIC_VECTOR(15 DOWNTO 0);C: IN STD_LOGIC;D: OUT STD_LOGIC_VECTOR(11 DOWNTO 0);dot: out STD_LOGIC_VECTOR(2 DOWNTO 0);Y: out STD_LOGIC;alert:OUT STD_LOGIC);END PASS_ALERT;ARCHITECTURE lion OF PASS_ALERT ISBEGINPROCESS(K,Q,C)BEGINIF(K='0')THEN Y<='0';IF(Q(15 DOWNTO 12)="0000" AND C='0')THEN D<=Q(11 DOWNTO 0);dot<="001";alert<='0';ELSE D<=Q(11 DOWNTO 0);dot<="001";alert<='1';END IF;ELSE IF(C='0')THEN Y<='1';D<=Q(15 DOWNTO 4);alert<='0';dot<="100";ELSE D<=Q(15 DOWNTO 4);alert<='1';dot<="100";END IF;END IF;END PROCESS;END lion;仿真截图:5.锁存模块源程序:lock_store.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LOCK_STORE ISPORT(Q:IN STD_LOGIC_VECTOR(11 DOWNTO 0);--Q2:IN STD_LOGIC_VECTOR(3 DOWNTO 0);--Q1:IN STD_LOGIC_VECTOR(3 DOWNTO 0);LD:IN STD_LOGIC;D:OUT STD_LOGIC_VECTOR(11 DOWNTO 0)--D2:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--D1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);--dot:OUT STD_LOGIC;);END LOCK_STORE;ARCHITECTURE lion OF LOCK_STORE ISBEGINPROCESS(LD)BEGINIF(LD'EVENT AND LD='1')THEN D<=Q;END IF;END PROCESS;END lion;仿真截图:6.扫描显示电路模块扫描源程序SCAN.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY SCAN ISPORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC_VECTOR(11 DOWNTO 0);Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);SEL:OUT STD_LOGIC_VECTOR(1 DOWNTO 0));END SCAN;ARCHITECTURE lion OF SCAN ISBEGINPROCESS(D)VARIABLE init:BOOLEAN:=TRUE;VARIABLE count:INTEGER:=0;BEGINIF(CLK'EVENT AND CLK='1')THENIF(D="000000000000")THEN count:=0;SEL<="00";Q<=D(3 DOWNTO 0);ELSE IF(init) THEN count:=0;SEL<="00";Q<=D(3 DOWNTO 0);init:=FALSE;ELSE IF(count=0) THEN count:=1; SEL<="01";Q<=D(7 DOWNTO 4);ELSE IF(count=1) THEN count:=2; SEL<="10";Q<=D(11 DOWNTO 8);ELSE IF(count=2) THEN count:=0; SEL<="00";Q<=D(3 DOWNTO 0);END IF;END IF;END IF;END IF;END IF;END IF;END PROCESS;END lion;仿真截图:7.显示源程序DEC_LED.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164;ENTITY DEC_LED ISPORT( num:IN BIT_VECTOR(3 DOWNTO 0);dout:OUT BIT_VECTOR(6 DOWNTO 0));END DEC_LED;ARCHITECTURE lion of DEC_LED ISBEGINPROCESS(num)BEGINCASE num ISWHEN "0000"=>dout<="1111110";WHEN "0001"=>dout<="0110000";WHEN "0010"=>dout<="1101101";WHEN "0011"=>dout<="1111001";WHEN "0100"=>dout<="0110011";WHEN "0101"=>dout<="1011011";WHEN "0110"=>dout<="1011111";WHEN "0111"=>dout<="1110000";WHEN "1000"=>dout<="1111111";WHEN "1001"=>dout<="1111011";WHEN OTHERS=>dout<=NULL;END CASE;END PROCESS;END lion;仿真截图:8.顶层模块设计将以上各模块生成对应器件,然后新建顶层工程Digita_Freq.采用图形化输入的方式,调用以上各模块器件,并加入输出输出,及必要的与非门等,并连接。
《电气工程及其自动化EDA课程设计》课程设计报告\题目:数字频率计的设计院(系):机电与自动化学院专业班级:电气工程及其自动化学生姓名: XXX学号: 2011XXXXXXX指导教师: XXX 】2014年1月6日至2014年1月10日#华中科技大学武昌分校《电气工程及其自动化EDA课程设计》设计任务书(目录摘要 (1)一.课程设计要求及内容 (1)主要技术指标 (1)工作内容及要求 (1)二数字频率计的基本原理 (1)数字频率计的组成 (1):数字频率器的原理 (2)三具体电路模块设计 (2)100MHz分频器 CLK_GEN的设计 (2)带时钟使能的十进制计数器CNT10的设计 (3)32位锁存器REG32B的设计 (5)测频控制信号发生器TESTCTL的设计 (6)动态输入编译译码器HC4511的设计 (7)四数字频率计系统模块的设计 (9)>系统模块程序设计及仿真波形 (9)数字频率计系统顶层设计 (10)五心得体会 (13)课程设计成绩评定表 (14)(摘要数字频率计是一种用十进制数字显示被测信号频率的一种数字测量仪器,其功能是测量正弦信号,方波信号,尖脉冲信号以及其他各种单位时间内变化的物理量,因此已经成为电路设计的常用元器件之一,有它不可替代的地位。
在电子技术中,频率与许多电参量的设计测量方案,测量结果都有着十分紧密的关系,因此频率的测量就显得更为重要。
测量频率的方法有很多种,其中数字计数器测量频率具有精度高,使用方便,测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
其原理为通过测量一定闸门时间内信号的脉冲个数。
本文阐述了利用VHDL语言在CPLD器件的基础上设计一个简单的数字频率计的过程。
采用VHDL编程技术设计实现的数字频率计,除被测信号的整形部分,键输入部分和数码显示部分以外,其余全部在一片集成电子芯片上实现,整个系统非常精简,而且具有灵活的现场可更改性。
关键词:数字频率计,测量,VHDL语言,设计一.课程设计要求及内容主要技术指标】(1)可测量范围从1Hz到Hz;(2)8位频率计输入端分别为:系统基准时钟100MHZ(CLK)、被测信号输入(Fx);及输出端为(DOUT),皆采用BCD码计数方式;(3)将被测信号的频率直接送到8个LED显示。
工作内容及要求(1)根据任务的要求进行方案构思,初选方案,绘制系统原理框图并与指导教师讨论,方案定稿。
(2)根据选定的方案,在QuartusII软件中,编写各个模块VHDL源程序;并上机调试通过,记录系统各个模块仿真结果;(3)对各个模块进行综合仿真,调试,实现数字频率计的基本功能和硬件实现;(4)记录仿真结果中出现的问题及解决办法。
》二数字频率计的基本原理数字频率计的组成本课程设计设计的数字频率计正常工作时,可测量0Hz-100MHz的频率。
设(1)计系统是有五部分组成:一个100MHz分1Hz的分频器CLK_GEN,一个测频控制信号发生器TESTCTL,带时钟使能的十进制计数器CNT10(设计中需要八个),一个32位锁存器REG32B,以及动态输入译码器HC4511电路设计(设计中需要八个)。
数字频率器的原理数字频率计的基本原理是用一个频率稳定度高的频率源作为基准信号,对比测量出其他信号的频率。
通常情况下计算每秒内待测信号的脉冲个数,即闸门时间为一秒。
闸门时间可以根据取值大于或小于1秒都可以。
闸门时间越长,则每测一次频率的间隔就越长,闸门时间越短,测得的频率值刷新就越快,单侧的的频率精度就越受影响。
一般取1秒作为闸门时间。
其原理框图如下:。
设计的数字频率计工作过程如下:被测信号接入频率计的输入端FSIN,下载板上100M时钟通过频率计的分频器模块中CLK端口输入,经过分频器的分频,变成1Hz的工作频率提供给测频器。
当被测频率和工作频率进入测频器模块时,测频器TESTCTL工作进行测频,TESTCTL的计数使能信号CLR_CNT产生一个1秒脉宽的周期信号,并对频率集中的十进制计数器CNT10的ENT使能端进行同步控制。
当ENT高电平时允许计数,低电平时停止计数,并保持其所记得脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,数字频率计的源程序综合以上模块并且通过对硬件的链接,实现8个数码管显示出计数值。
三具体电路模块设计100MHz分频器 CLK_GEN的设计100MHz工作时钟接入分频器,用一个计数器进行计数,计满二分之一100M 个,CLK信号取反一次,分频后频率变为1Hz,周期由1/0秒变大为1秒,满足数字频率计时序工作频率的要求。
分频器程序设计如下:--------------------------------------------------------------------- 100MHz分频器:---------------------------------------------------------------------:library ieee;use clk_gen isport(clk: in std_logic;newclk: out std_logic);end entity clk_gen;(2)architecture art of clk_gen issignal clk2:std_logic;【beginprocess(clk) isvariable cnter: integer range 0 to ;beginif clk'event and clk='1' thenif cnter= then cnter:=0;else cnter:=cnter+1;end if;~if cnter< then clk2<='1';else clk2<='0';end if;end if;end process;newclk<=not clk2;end architecture art;分频器编译仿真波形如下:(带时钟使能的十进制计数器CNT10的设计计数器模块是对输入脉冲信号的频率进行测量技术的部分,有八个带时钟使能的十进制计数器组成。
其中ENA为计数器选通控制信号,CLR为计数清零信号。
在计数清零信号清零后,当使能信号ENA有效时,开始对待测信号进行计数。
如果使能信号ENA的宽度为1时,那么计数结果就为待测信号的频率。
(3)带时钟使能的十进制计数器程序设计如下:---------------------------------------------------------------------带时钟使能的十进制计数器:---------------------------------------------------------------------@LIBRARY IEEE;USE CNT10 ISPORT (CLK:IN STD_LOGIC;CLR,ENA: IN STD_LOGIC;CQ:OUT INTEGER RANGE 0 TO 15;CO:OUT STD_LOGIC);END ENTITY CNT10;ARCHITECTURE ART OF CNT10 IS&SIGNAL CQI:INTEGER RANGE 0 TO 15;BEGIN PROCESS(CLK,CLR,ENA)ISBEGINIF CLR='1'THEN CQI<=0;ELSIF CLK'EVENT AND CLK='1'THENIF ENA='1'THENIF CQI<9 THEN CQI<=CQI+1;ELSE CQI<=0;END IF;—END IF;END IF;END PROCESS;PROCESS(CQI)ISBEGINIF CQI=9 THEN CO<='1';ELSE CO<='0';END IF;END PROCESS;.CQ<=CQI;END ARCHITECTURE;十进制计数器编译仿真波形如下:(4)32位锁存器REG32B的设计当锁存信号上升沿到来时,将计数器的计数值锁存。
设置锁存器的好处是显示的数据稳定,不会由于周期的清零信号而闪烁。
锁存器的位数应该和计数器一样,都是32位。
寄存器在计数结束后,利用触发器的上升沿把最新的频率测量值保存起来,这样在计数过程中不必一直看数码显示管,显示器将最终的频率读数定期进行更新,其输出将作为动态扫描电路的输入。
32位锁存器程序设计如下:》--------------------------------------------------------------------- 32位锁存器:---------------------------------------------------------------------Library ieee;use entity reg32b isport(lk: in std_logic;din: in std_logic_vector(31 downto 0);dout: out std_logic_vector(31 downto 0));—end reg32b;architecture behav of reg32b isbeginprocess(lk,din)beginif lk'event and lk='1' thendout<=din;end if;!end process;end architecture behav;32位锁存器编译仿真波形图如下:(5)测频控制信号发生器TESTCTL的设计频率测量的基本原理就是计算每秒钟内待测信号的脉冲个数。
这就要求TESTCTL的计数使能信号TATEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当TSTEN高电平时,允许计数,低电平时停止计数,并保持所记的数。
在停止计数期间,首先需要一个锁存信号LOAD的上升沿将计数器所计的值锁存进32位锁存器REG32B中,并有外部的译码器译出并稳定显示。
锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下一秒做好准备。
测频控制信号发生器程序设计如下:(---------------------------------------------------------------------测频控制信号发生器:---------------------------------------------------------------------Library ieee;use testctl isport(clk:in std_logic;tsten:out std_logic;clr_cnt:out std_logic;^load:out std_logic);end entity testctl;architecture art of testctl issignal div2clk:std_logic;beginprocess(clk) isbeginif clk'event and clk='1' then'div2clk<=not div2clk;end if;end process;process(clk,div2clk) isbeginif clk='0' and div2clk='0' thenclr_cnt<='1';else clr_cnt<='0';(end if;end process;load<=not div2clk; tsten<=div2clk;end architecture art;测频控制信号发生器编译仿真波形图如下:(6)~动态输入编译译码器HC4511的设计分别将寄存器的输出端DATA(0至3),DATA(4至7),DATA(8至11),DATA(12至15),DATA(16至19),DATA(20至23),DATA(24至27),DATA (28至31)对应接到各个译码器的输出端口datain,然后将各个译码器的输出端a,b,c,d,e,f,g端接到数码管的a,b,c,d,e,f,g端口。