数字显示频率计的设计Word格式.docx
《数字显示频率计的设计Word格式.docx》由会员分享,可在线阅读,更多相关《数字显示频率计的设计Word格式.docx(12页珍藏版)》请在冰点文库上搜索。
八位数字显示频率计
1设计目的
通过EDA的试验设计,加深我们对FPGA的了解,熟悉FPGA的工作原理和试验环境,知道FPGA的开发流程,熟悉各种软件如QuartusII6.0的使用。
通过设计小型试验项目学会仿真和硬件测试的基本方法。
2设计的主要内容和要求
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更加重要。
通过运用HDL语言,实现8位数字频率计,并利用QuartusII6.0集成开发环境进行编辑、综合、波形仿真,并下载到FPGA器件中,经实际电路测试,该系统性能可靠。
3整体设计方案
3.1八位十进制数字显示频率计设计
在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此,频率的测量就显得更为重要。
测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。
数字式频率计的测量原理有两类:
一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;
二是间接测频法即测周期法,如周期测频法。
直接测频法适用于高频信号的频率测量,通常采用计数器、数据锁存器及控制电路实现,并通过改变计数器阀门的时间长短在达到不同的测量精度;
间接测频法适用于低频信号的频率测量,本设计中使用的就是直接测频法,即用计数器在计算1S内输入信号周期的个数
数字频率计是数字电路中的一个典型应用,实际的硬件设计用到的器件较多,连线比较复杂,而且会产生比较大的延时,造成测量误差、可靠性差。
随着现场可编程门阵列FPGA的广泛应用,以EDA工具作为开发手段,运用VHDL等硬件描述语言,将使整个系统大大简化,提高了系统的整体性能和可靠性。
3.2具体设计方法
本实验通过频率控制模块,将时钟信号clk两分频后分别取反赋给锁存使能和计数使能端,这样计数完成后就能实现数据的锁存,当计数使能和锁存使能同时无效,即都出现低电平的时候,计数复位信号有效,将计数器清零,从新开始计数。
3.3原理框图
译码显示
锁存器
计数器
被测信号
图3.3实验原理框图
频率控制部分
4底层文件设计程序及仿真
4.1十进制计数器模块
4.1.1计数器程序
cnt.vhd
LIBRARYieee;
USEieee.std_logic_1164.all;
--打开库
ENTITYcntIS--端口定义
PORT
(
clk,rst,ena:
INSTD_LOGIC;
--clk为时钟脉冲,rst为复位信号,ena使能
outy:
OUTintegerrange0to9;
--计数输出端口
COUT:
OUTSTD_LOGIC);
--计数进位输出端口
ENDCnt;
--实体定义结束
ARCHITECTUREaOFCntIS--结构体开始
BEGIN
PROCESS(clk,RST,ena)--过程定义,敏感表
VARIABLECQI:
integerrange0to9;
--定义进程里的局部变量,整型0到9
BEGIN
IFRST='
1'
THENCQI:
=0;
--如果复位信号高电平,这将cqi清零
ELSIF(clk'
EVENTANDclk='
)THEN--复位信号无效,clk上升沿到来就执行下一步
IFena='
THEN--如果ena高,则cqi加1
IFCQI<
9THENCQI:
=CQI+1;
--如果ena高且cqi小于9,则cqi加1
ELSECQI:
--否则cqi置零
ENDIF;
--结束if语句
ENDIF;
IFCQI=9THENCOUT<
='
;
--若
ELSECOUT<
0'
--
outy<
=CQI;
--将进程局部变量赋值给outy输出端口
ENDPROCESS;
--结束进程
ENDa;
--结束结构体
图4.1十进制计数器元件符号
4.1.2十进制计数器模块软件仿真图
图4.2十进制计数器仿真波形图
仿真说明:
仿真结果验证了十进制计数器的设计的正确性。
clk是时钟信号,clk是上升沿的时候执行下一步。
r是复位信号,低电平有效。
ena是使能信号,ena为1时,进行加计数。
当加到9时,进位输出,COUT=1。
计数又重新开始。
仿真结果说明了计数器设计的正确性。
4.2锁存器模块
4.2.1锁存器程序
reg4b.vhd
libraryieee;
useieee.std_logic_1164.all;
entityreg4bis--定义实体
port(load:
instd_logic;
--信号锁存
din:
instd_logic_vector(3downto0);
--信号输入端口
dout:
outstd_logic_vector(3downto0));
--锁存输出
endreg4b;
--实体定义完毕
architecturetwoofreg4bis--定义结构体
begin
process(load,din)--定义进程及其敏感表
ifload'
eventandload='
then--锁存有效,则将输入给输出显示
dout<
=din;
endif;
--否则不改变输出
endprocess;
--进程结束
endtwo;
图4.3锁存器元件符号
4.2.2锁存器软件仿真图
图4.4锁存器软件仿真波形图
load=1时锁存有效,则将输入给输出显示。
则din=dout。
仿真结果说明锁存器的设计是正确的。
4.3频率控制模块
4.3.1频率控制的程序
Testctl.vhd
--打开标准库
useieee.std_logic_unsigned.all;
--打开ussigned库
entitytestctlis--定义实体
port(clkk:
--输入时钟端口定义
cnt_en,rst_cnt,load:
outstd_logic);
--cnt使能端口,rst
endtestctl;
--结构体结束
architectureoneoftestctlis--结构体开始
signaldiv2clk:
std_logic;
--2分频信号
process(clkk)--2分频进程
ifclkk'
eventandclkk='
then--时钟上升沿到来
div2clk<
=notdiv2clk;
--2分频
--if时序结束
endprocess;
--2分频进程结束
process(clkk,div2clk)--计数复位控制进程,div2clk为计数使能信号缓冲单元
begin
ifclkk='
anddiv2clk='
then--时钟信号低电平,2分频信号低电平,则计数复位置一
rst_cnt<
--计数复位信号置一
else
rst_cnt<
--否则置零
--计数复位控制进程结束
load<
--2分频取反给锁存器使能信号
cnt_en<
=div2clk;
--2分频给计数使能信号
endone;
图4.5频率控制模块元件符号
4.3.2频率控制模块软件仿真图
图4.6频率控制模块软件仿真波形图
clkk时钟信号上升沿来临,开始2分频。
当clkk时钟信号为低电平,2分频信号为低电平,则计数复位rst_cnt置1,否则清零。
2分频取反给锁存使能信号。
仿真结果说明频率控制模块的设计是正确的。
5顶层设计原理图及仿真
5.1顶层原理图
Freq.bdf
图5.1顶层原理图
5.2最终程序仿真图
结果输出:
F1hz=1us,ftest=250ns时的仿真波形图:
图5.2.1仿真波形图1
F1hz=1us,ftest=50ns时的仿真波形图:
图5.2.1仿真波形图2
当F1hz=1us,ftest=250ns的周期是ftest=50ns的5倍,即频率是1/5。
频率控制的计数复位rst_cnt为1时,输出dout为0。
当复位端为0时,load=1锁存,输出为0。
进位输出为0。
6心得体会
这次EDA试验我学会了vhdl语言的基本语法规范,了解了quartus软件的使用方法,学会了用硬件测试的基本技能,在学习过程中也遇到各种各样的问题,下面就总结出来,做为以后的学习的经验:
语法规则不熟悉,vhdl语法规则在刚刚接触的时候确实有各种各样的疏漏,写源码的时候会不小心遗漏一两个字母或者标点符号,有时候把半角改成全角,这都会导致编译出错。
Quartus软件版权问题,应为条件有限,实验室的软件都是破解版的,这些软件都经过了一定的修改,部分功能缺失,在使用过程中常常会出现奇怪的问题。
如毛刺现象:
不同的工程在同一个文件夹中是编译常会出现毛刺,如果把一个工程新建到一个新的文件夹中,毛刺显现就消除了。
图形化界面顶层设计,如设计时输出端口dout【0..3】为四输出端口,定义是应该用..,不能用:
,另外连线时候可能是一端口连到多端口,或者多端口连到一端口,这时候应该注意连线的根数。
硬件测试的时候,要选对工作模式,管脚的封装必须正确,否则会出现八段数码管乱显示的现象。
参考文献
[1]赵伟军.Protel99se教程[M].北京:
人民邮电出版社,1996年.
[2]金西.VHDL与复杂数字系统设计[M].西安:
西安电子科技大学出版社,2003.
[3]汉泽西.EDA技术及其应用[M].北京:
北京航空航天大学出版社,2004.
[4]江国强.EDA技术与应用[M].北京:
电子工业出版社,2010.