使用VHDL语言进行的100MHZ数字频率计的设计
基于VHDL语言的数字频率计的设计方案

基于VHDL语言的数字频率计的设计方案
1.引言数字频率计是通讯设备、计算机、电子产品等生产领域不
可缺少的测量仪器。
由于硬件设计的器件增加,使设计更加复杂,可靠性变差,延迟增加,测量误差变大。
通过使用EDA技术对系统功能进行描述,运用VHDL语言,使系统简化,提高整体的性能和可靠性。
采用VHDL编程设计的数字频率计,除了被测信号的整形部分,键输入和数码显示以外,其他都在一片FPGA上实现,从而让整个系统非常精简,让其具有灵活的现场更改性,在不改变硬件电路的基础上,进一步改进提高系统的性能,使数字频率计具有高速,精确度高,可靠性强,抗干扰等优点,为数字系统进一步的集成创造了条件。
2.数字频率计的工作原理
频率测量方法中,常用的有直接测频法、倍频法和等精度测频法。
中直接测频法是依据频率的含义把被测频率信号加到闸门的输入端,只有在闸门开通时间T(以ls计)内,被测(计数)的脉冲送到十进制计数器进行计数。
直接测频法比其他两个方案更加简单方便可行,直接测频法虽然在低频段测量时误差较大,但在低频段我们可以采用直接测周法加测量,这样就可以提高测量精度了。
直接周期测量法是用被测周期信号直接控制计数门控电路,使主门开放时间等于Tx,时标为Ts的脉冲在主门开放时间进入计数器。
设在Tx期间计数值为N,可以根据Tx=N乘以Ts来算得被测信号周期。
因此本文采用低频测周,高频测频的方法来提高精度,减小误差。
3.主要功能模块的实现
该系统设计的控制器是由状态机实现,通过在不同测量档位,选择合理的时基信号频率降低误差,确定各状态转移条件和状态名,采用低频档位测周,。
基于VHDL语言数字频率计的设计

关于数字频率计设计[摘要]本报告介绍了一种以大规模可编程逻辑芯片为设计载体,由顶到底分层设计,多功能数字频率计的设计方法。
该频率计采用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的高精度数字频率计的设计与实现

基于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的频率范围内的量化误差均满足设计要求。
用VHDL语言设计频率计

模块设计 分频器 由于设计的需要,我们进行三种分频的设 计:10分频、100分频、1000分频。这三 种分频对500Hz的信号进行分频,得到的是 50Hz、5Hz、0.5Hz的信号,将它们作为计 数闸门。
图4 分频器模块
闸门 闸门选择电路实际就是3选1电路,相对简 单,分频所得信号一起送入闸门,在控制 器的控制下,选出其中一路信号作为计数 闸门送入计数器。
图5 闸门模块
计数器 我们采用的是直接测频法,所以计数器就是在闸 门信号有效期间对被测信号进行计数。直接测频 法
图6 计数器模块
锁存器 锁存器用于将计数器的计数结果锁存,以 便于较稳定的显示测量结果。计数器完成 计数后,计数结果要立即锁存,在闸门低 电平期间,即计数器停止工作期间,计数 的结果要在锁存器中保持,直到新的计数 结果产生为止。
用VHDL语言设计数字频率计
付宝成 2006年6月
第一部分 设计要Байду номын сангаас及意义
一、设计的意义 频率测量是电子测量领域最基本的测量之一。随 着数字电子技术的发展,频率测量成为一项越来 越普遍的工作,测频原理及测频方法受到越来越 多的关注。 具有50多年发展历史的频率计是数字电路中的典 型仪器。它是实验室中常用的仪器之一,同时也 是计算机、通讯设备、音频视频等科研领域不可 缺少的测量仪器,是一种典型的数字化、自动化 的测量仪器,并越来越趋于小型化。
二、设计要求 测量方波信号的频率 测量的频率范围是1~100KHz 测量结果用十进制数显示 具有自动校验和测量两种功能 具有超量程报警功能,在超出测量范围 时,发出指示信号
第二部分 设计的内容
频率测量一般有测频法与测周期法两种基 本方法,其原理如下: 测频法:由标准时钟分频产生一门控信号, 在门控信号下对输入的被测信号周期进行 计数,也叫直接测频法。如图1所示。 设输入信号频率为Fx,门控信号有效电平 时间为T,在此有效电平时间内的计数值为 N,则输入信号的频率为:Fx=N/T。
VHDL语言设计数字频率计

数字频率计的设计一、频率计实现的功能要设计的频率计的测量范围为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的脉冲。
一种基于VHDL语言的数字频率计设计

关 键 词 :P A; F G VHD 频 率 计 L ̄
所 谓 “ 率 ” 就 是 周 期 性 信 号 在 单 位 时 间 频 ,
先 分频 器 将 系 统 提 供 的 4 MHZ 的 时 钟 进 行 分 8
( ) 秒 内变 化 的次 数 。若 在 一 定 的时 间 间 隔 T 内
第 4卷 第 4期
f Pq
ck l ck s a l c n
cnr o t o1
ck 1 z l h cr l
g t ae
c k z l 1 h
lt h ac
图 4 分 频 器 模 块
u eI s EEE. STD
_
L I 一 ̄ I OG C /R TH. L; AL
p r( l o t ck:i t — o i ; n sd lgc
Ul TCH
ck l z:ou t l gi ; l h ts d o c
— —
ek s a l c n:ou t l g c ; t s d o i)
_
CUl
—
e d f q n p ; a c i c u e Be a i r l ff q i r h t t r h vo a p s e o
该 信 号 的频率 可表 达 为 : f— N /T。测 量方 法有 直 接测 频 、 测周 期 、 等精 度测 量等 方法 。在此采 用 直接测 频法 : 基信 号 ( 时 时钟 信号 ) 门控信 号 , 做 去
控 制 闸 门的开启 时 间 (S , 整 形后 的被 测 信 号 1)让
通 过 闸门送 人计 数 器 。计 数 器计 算信 号 的高低 电 平 的变 化 次数 。电路及 波 形 分 别 如 图 ( ) 图 ( ) 1 、 2 所 示 。放 大整形 电路 实现 方 法 较 多 , 术 也 比较 技
数字频率计的VHDL设计

课程设计题目、内容、要求目录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数码管提供驱动电压。
100MHz等精度频率计设计(基于某VerilogHDL)

某某: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语言直接测频法频率计设计(原创)

基于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数字频率计

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.采用图形化输入的方式,调用以上各模块器件,并加入输出输出,及必要的与非门等,并连接。
在FPGA上用VHDL实现数字频率计 实验报告

数字系统设计实验报告一、设计要求:1、(1)频率测量范围10Hz~1MHz(2)量程自动转换,量程分为10KHz (1s) 、100KHz (0.1s) 、1MHz (10ms)三档。
转换规则如下:当读数大于9999时,频率计处于超量程状态,下一次测量时,量程自动增大一档;当读数小于0999时,频率计处于欠量程状态,下一次测量时,量程自动减小一档(3)数据采用记忆显示方式,即计数过程中不显示数据,待计数过程结束以后,显示计数结果,并将此显示结果保持到下一次计数结束。
(4)用发光二极管显示量程二、方案选则1测量原理:当预置门控信号为高电平时,启动计数器,被测信号(频率为fx) 计数当预置门控信号为低电平时,关闭计数器设在一次预置门控时间Tg内对被测信号计数值为Nx,则fx= Nx / Tg2具体方案:本设计中将2MHz的时钟分三次频,分别作为防抖电路的周期信号、显示模块片选信号、计数及锁存模块闸门信号。
防抖电路滤去窄波,显示模块用模4计数器来分别输出四位测量结果。
计数器通过在0.1s内对输入信号的高电平(发生期)进行计数来得出结果,并且为了达到换挡目的,测量时计六位数,通过结果选择档位进行输出。
二、原理图三、总体电路图四、流程图五、设计清单1、防抖电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY debounce ISPORT(key,cp: IN STD_LOGIC; --复位键imp:OUT STD_LOGIC); --去掉窄波后输出END debounce;ARCHITECTURE base OF debounce ISSIGNAL ql,q2:STD_LOGIC;BEGINPROCESS(cp)BEGINIF cp'event AND cp='1'THENq2<=ql; ql<=key;END IF;END PROCESS;imp<=ql AND NOT q2;END base;时序仿真波形:2、分频电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY dividefre4 ISPORT(cp_2m:IN STD_LOGIC; --2MHzcpl:OUT STD_LOGIC; --200Hzcp2:OUT STD_LOGIC; --25Hzcp3:OUT STD_LOGIC); --5HzEND dividefre4;ARCHITECTURE behavior OF dividefre4 IS SIGNAL tout:INTEGER RANGE 0 TO 4999; --5000分频SIGNAL toutl:INTEGER RANGE 0 TO 7; --8分频SIGNAL tout2:INTEGER RANGE 0 TO 39; --40分频SIGNAL cp_1:STD_LOGIC;SIGNAL cp_2:STD_LOGIC;SIGNAL cp_3:STD_LOGIC;SIGNAL cp:STD_LOGIC;BEGINPROCESS(cp_2m) –分出400Hz时钟BEGINIF(cp_2m'event AND cp_2m='1')THENIF tout=4999 THENtout<=0;ELSE tout<=tout+1;END IF;IF tout=2499 THENcp<='0';ELSE cp<='1';END IF;END IF;END PROCESS;PROCESS(cp) --200Hz时钟BEGINIF(cp'event AND cp='1')THENcp_1<=NOT cp_1;END IF;END PROCESS;PROCESS(cp_1) --25Hz时钟和5HzBEGINIF(cp_1'event AND cp_1='1')THENIF toutl=7 THEN toutl<=0;ELSE toutl<=toutl+1;END IF;IF toutl=3 THENcp_2<='1';ELSIF toutl=7 THEN cp_2<='0'; --8分频得25Hz END IF;IF tout2=39 THEN tout2<=0; --40分频得5HzELSE tout2<=tout2+1;END IF;IF tout2=39 THENcp_3<='1';ELSIF tout2=19 THEN cp_3<='0';END IF;END IF;END PROCESS;cpl<=cp_1;cp2<=cp_2;cp3<=cp_3;END behavior;仿真波形:(因原程序所分频倍数太大,所以这里将5000倍分频降至50倍)3、计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY fretest ISPORT(enable:IN STD_LOGIC; --使能cp3:IN STD_LOGIC; --闸门INput:IN STD_LOGIC; --被测信号reset:IN STD_LOGIC; --复位信号overflow:OUT STD_LOGIC; --大于1000kHzPlay0,playl,play2,play3:OUT INTEGER RANGE 0 TO 9;decimal:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));--小数点,即档位END fretest;ARCHITECTURE behavior OF fretest ISSIGNAL r0_1,r1_1,r2_1,r3_1,r4_1,r5_1:INTEGER RANGE 0 TO 9;BEGINPROCESS(INput,enable,reset,cp3)BEGINIF enable='0'THEN NULL; --不测量ELSIF(input'event AND input='1')THEN --检测被测信号IF reset='1'THEN --同步复位,高电平有效overflow<='0';r0_1<=0;r1_1<=0;r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;ELSIF cp3='0'THEN --闸门为0时清零Overflow<='0';r0_1<=0;r1_1<=0;r2_1<=0;r3_1<=0;r4_1<=0;r5_1<=0;ELSE --闸门为高电平计数r0_1<=r0_1+1;IF r0_1=9 THEN r1_1<=r1_1+1;r0_1<=0;IF(r1_1=9)THEN r2_1<=r2_1+1;r1_1<=0;IF(r2_1=9)THEN r3_1<=r3_1+1;r2_1<=0;IF(r3_1=9)THEN r4_1<=r4_1+1;r3_1<=0;IF(r4_1=9)THEN r5_1<=r5_1+1;r4_1<=0;IF(r5_1=9)THEN r5_1<=0;overflow<='1'; --大于1000kHz END IF;END IF;END IF;END IF;END IF;END IF;END IF;END IF;END PROCESS;PROCESS(r5_1,r4_1)BEGINIF r5_1=0 AND r4_1=0 THEN --为小于9999Hz时play0<=r0_1;playl<=r1_1;play2<=r2_1;play3<=r3_1;decimal<="100";ELSIF r5_1=0 THEN --为几十kHz时play0<=r1_1;playl<=r2_1;play2<=r3_1;play3<=r4_1;decimal<="010";ELSE --为几百kHz时play0<=r2_1;playl<=r3_1;play2<=r4_1;play3<=r5_1;decimal<="001";END IF;END PROCESS;END behavior;仿真波形4、锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY frelatch ISPORT(reset:IN STD_LOGIC; --复位cp3:IN STD_LOGIC; --时钟Overflow: IN STD_LOGIC; --大于1000kHz表示play0,playl,play2,play3:IN INTEGER RANGE 0 TO 9;decimal:IN STD_LOGIC_VECTOR(2 DOWNTO 0);--小数点overlatch:OUT STD_LOGIC; --大于1000kHzp0latch,pllatch,p21atch,p31atch:OUT INTEGER RANGE 0 TO 9; delatch:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));--小数点END frelatch;ARCHITECTURE behavior OF frelatch ISBEGINPROCESS(cp3,reset)BEGINIF reset='1'THENoverlatch<='0';p0latch<=0;pllatch<=0;p21atch<=0;p31atch<=0;delatch<=decimal;ELSIF cp3'event AND cp3='0'THENoverlatch<=overflow;p0latch<=play0;pllatch<=playl;p21atch<=play2;p31atch<=play3;delatch<=decimal;END IF;END PROCESS;END behavior;仿真波形5、显示模块LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;ENTITY display ISPORT( cpl:IN STD_LOGIC; --时钟overflow:IN STD_LOGIC; --高于1000kHz标志p0,p1,p2,p3:IN INTEGER RANGE 0 TO 9;--BCD码输入 show:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--7段码输出 sel:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));--位扫描码END dISplay;ARCHITECTURE behavior OF display ISSIGNAL count: INTEGER RANGE 0 TO 3;SIGNAL sel_1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(cpl)BEGINIF(cpl'event AND cpl='1') THENIF count=3 THEN count<=0;ELSEcount<=count+1;END IF;END IF;END PROCESS;PROCESS(count)BEGINCASE count ISWHEN 0=>sel_1<="1110"; --第0位WHEN 1=>sel_1<="1101"; --第1位WHEN 2=>sel_1<="1011"; --第2位WHEN 3=>sel_1<="0111"; --第3位END CASE;END PROCESS;PROCESS(overflow,sel_1)BEGINIF(overflow='1')THENshow<="0110111"; --高于1000kHz,显示HELSIF(sel_1(0)='0')THEN --第0位数码管译码CASE p0 ISWHEN 0=>show<="1111110";--显示0,a-gWHEN 1=>show<="0110000";--1WHEN 2=>show<="1101101";--2WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(1)='0')THEN --第1位译码 CASE p1 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111"; WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(2)= '0')THEN --第2位译码 CASE p2 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;ELSIF(sel_1(3)='0')THEN --第3位译码 CASE p3 ISWHEN 0=>show<="1111110";WHEN 1=>show<="0110000";WHEN 2=>show<="1101101";WHEN 3=>show<="1111001";WHEN 4=>show<="0110011";WHEN 5=>show<="1011011";WHEN 6=>show<="0011111";WHEN 7=>show<="1110000";WHEN 8=>show<="1111111";WHEN 9=>show<="1110011";END CASE;END IF;END PROCESS; sel<=sel_1; END behavior; 仿真波形。
数字频率计设计(使用VHDL语言)

实验报告\
一、实验目的
设计数字频率计,学习较复杂数字系统设计方法。
二、实验内容
设计八位数码显示频率计P228
三、实验环境
计算机、QuartusII软件
四、实验步骤
1、子模块FTCTRL(用于产生控制信号) (1)程序代码
(2)仿真结果
2
、子模块COUNTER32B (用于计数)
(1)程序代码
(2)仿真结果
(3)结果分析
当使能信号ENABLE=‘1’时,允许计数。
当CLR=‘1’时重新计数
3、子模块REG32B(输出数据)
(1)程序代码
(2)仿真结果
(3)结果分析
当LK=’1’时,输出当前数据DIN,否则不做处理。
4、子模块SHOW
(1)程序代码
(2)仿真结果
(3)结果分析
当S=‘0’时,载入数据DATA,否则将数据DATA左移4位。
每次上升沿,SHOW1输出数据的高四位。
综合模块:
五、实验结果与讨论
这个实验花了比较多的时间,在做计数器的时候由于没有考虑到最后使用的是二进制显示的,所以在转换的时候遇到了不少的问题,最后
新亏有老师帮我想了办法解决。
基于VHDL语言设计数字频率计

基于VHDL语言设计数字频率计摘要:该频率计采用STC公司生产的STC89C51单片机和Altera公司所生产的FPGA芯片EP1C6Q240C8N。
FPGA的软件用VHDL语言描述实现在单片机的控制信号下进行计数。
单片机的软件采用C语言编写,很方便处理运算由FPGA传给单片机的数据。
关键字:一、引言频率检测是电子测量领域的最基本也是最重要的测量之一。
频率信号抗干扰能力强、易于传输,可以获得较高的测量精度,所以测频率方法的研究越来越受到重视。
以往的测频仪都是在低频段利用测周的方法、高频段用测频的方法,其精度往往会随着被测频率的下降而下降。
该设计采用等精度测量方法,解决了这个问题。
本设计中采用的STC89C51是一种低功耗、高性能的8位CMOS单片机,片内有4KB的闪烁可编程/擦除只读存储器,并且与MCS-51引脚和指令系统完全兼容,并且有宽工作电压范围、存储数据保存时间长(10年)等优点,是一款性价比较高的单片机。
EP1C6Q240C8N可容纳各种各样、独立的组合逻辑和时序逻辑函数,可以快速而有效的重新编程,并保证可编程擦除100次,这样可以进行重复烧录,比较方便系统的调试。
FPGA的各种功能块用VHDL语言描述实现。
该测频仪将FPGA 的高速高可靠性、单片机的灵活控制功能和等精度测频原理较高的测量精度相结合,具有速度快、功能全、精度高等特点。
二、设计原理1、设计内容设计一数字频率计,测量功能如下:(1) 能测量正弦波、方波等信号的频率(周期);(2) 能测量脉冲信号的宽度、占空比;(3) 由键盘选择确定测量功能;(4) 能实时显示被测信号的频率(周期)、脉宽等参数;(5) 具有自校功能,时标信号频率为2MHz;系统可由单片机控制单元与FPGA测量单元两部分构成。
其中,单片机控制单元主要实现处理运算FPGA测量单元送来的信号并产生反馈信号,通过单片机处理键盘的键值来选择区分各功能并控制液晶显示测量值。
基于VHDL语言的频率计设计

目录一、课程设计任务: (2)二、课程设计原理: (2)三、课程设计所需仪器: (2)四、课程设计使用的硬件资源及原理框图: (2)五、设计过程及操作: (3)1、FTCTRL测频控制模块: (3)2、计数器模块: (3)3、REG32B锁存器模块 (3)4、DECL7S译码器模块 (4)5、分频器模块 (4)6、MUX多路选择器模块。
(4)7、器件连接: (4)8、操作过程: (4)六、设计各个模块代码: (5)1:FTCTRL模块 (5)2:CNT_10计数器模块 (5)3:REG32B锁存器模块 (6)4:DECL7S译码器模块 (6)5:any_10 10分频器模块 (7)6:any_5 5分频器模块 (7)7:any_16 16分频模块 (8)8:MUX多路选择器模块 (9)9:顶层例化代码 (9)七、总电路: (12)八、管脚配置: (13)九、设计结果: (14)设计8位十进制频率计二、课程设计原理:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这清0个信号可以由一个测频控制信号发生器TESTCTL 产生,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的EN使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD 的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
三、课程设计所需仪器:Altrea DE2-115实验箱;quartusII 12.1;modelsim仿真软件。
基于VHDL语言设计数字频率计

基于VHDL 语言设计数字频率计1 引言VHDL (Very High Speed Integrated Circuit Hardware Description Language,超高速集成电路硬件描述语言)诞生于1982年,是由美国国防部开发的一种快速设计电路的工具,目前已经成为IEEE (The Institute of Electrical and Electronics Engineers )的一种工业标准硬件描述语言。
相比传统的电路系统的设计方法,VHDL 具有多层次描述系统硬件功能的能力,支持自顶向下(Top to Down )和基于库(LibraryBased )的设计的特点,因此设计者可以不必了解硬件结构。
从系统设计入手,在顶层进行系统方框图的划分和结构设计,在方框图一级用VHDL 对电路的行为进行描述,并进行仿真和纠错,然后在系统一级进行验证,最后再用逻辑综合优化工具生成具体的门级逻辑电路的网表,下载到具体的CPLD 器件中去,从而实现可编程的专用集成电路(ASIC )的设计。
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着复杂可编程逻辑器件(CPLD )的广泛应用,以EDA 工具作为开发手段,运用VHDL 语言。
将使整个系统大大简化。
提高整体的性能和可靠性。
本文用VHDL 在CPLD 器件上实现一种数字频率计测频系统,能够用十进制数码显示被测信号的频率,不仅能够测量正弦波、方波和三角波等信号的频率,而且还能对其他多种物理量进行测量。
具有体积小、可靠性高、功耗低的特点。
2 数字频率计的基本设计原理数字频率计的原理框图如图1所示。
他主要由5个模块组成,分别是:脉冲发生器电路、测频控制信号发生器电路、计数模块电路、锁存器、译码驱动电路。
当系统正常工作时,脉冲发生器提供的1 Hz 的输入信号,经过测频控制信号发生器进行信号的变换,产生计数信号,被测信号通过信号整形电路产生同频率的矩形波,送入计数模块,计数模块对输入的矩形波进行计数,将计数结果送入锁存器中,保证系统可以稳定显示数据,显示译码驱动电路将二进制表示的计数结果转换成相应的能够在七段数码显示管上可以显示的十进制结果。
基于VHDL的数字频率计设计_(1)

科技学院2009届本科毕业论文基于VHDL的数字频率计设计学科专业:06电科指导教师:陈茜学生姓名:黄淘学生学号:062004100369中国﹒贵州﹒贵阳2009年5月目录目录 (1)中文摘要 (2)ABSTRACT (3)第一章引言 (4)第二章设计语言和软件概述 (6)2.1 EDA技术 (6)2.2 VHDL语言介绍 (9)2.3 Max+plusⅡ软件介绍 (10)第三章系统设计方式概述 (12)3.1 电子系统的设计方式 (12)3.2 “自顶向下”与“自顶向上”的设计方式 (14)3.3系统组成 (17)第四章数字频率计的设计 (18)4.1 测频操纵信号发生器 (18)4.2 带时钟使能十进制计数器 (21)4.3 7段显示译码器LED7 (25)4.4 动态LED 数码管显示sm (28)4.5 本系统的顶层模块 (31)第五章总结 (40)参考文献 (41)致谢 (42)诚信责任书 (43)基于VHDL的数字频率计设计中文摘要随着运算机技术、超大规模集成电路、EDA(Electronics Design Automation)技术的进展和可编程逻辑器件的普遍应用,传统的自下而上的数字电路设计方式、工具、器件已远远掉队于现今信息技术的进展。
基于EDA技术和硬件描述语言的自上而下的设计技术正在承担起愈来愈多的数字系统设计任务。
本论文采纳自上向下的设计方式,基于VHDL硬件描述语言设计了一种数字频率计,并在Max+plusⅡ平台上进行了仿真。
关键词:EDA,VHDL,Max+plusⅡ,数字频率计ABSTRACTWith the development of computer, VLSI and EDA and the application of programmable logic devices, the traditional bottom-up design method, tools and devices have been far behind the development of information technology. The top-down design method based on the EDA technology and VHDL is used to design the digital system. In this paper, a digital cymometer is designed using the top-down method based on VHDL and then simulated on Max+plusⅡplatform. Keywords:EDA, VHDL, Max+plusⅡ, digital cymometer第一章引言在电子技术中,频率是最大体的参数之一,而且与许多电参量的测量方案、测量结果都有十分紧密的关系,因此频率的测量就显得更为重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《电气工程及其自动化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端口。