EDA-8位16进制频率计设计.doc
一、设计方案介绍
用VHDL语言,完成8位16进制频率计的设计。
根据频率的定义和频率测量的根本原理,测定信号的频率必须有一个脉宽为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以由一个独立的发生器来产生。
数字频率计的关键组成局部包括一个测频控制信号发生器FTCTRL、计数器COUNTER32B和一个锁存器REG32B,另外包含外电路的信号整形电路、脉冲发生器、译码驱动电路和显示电路。其工作原理如下:FTCTRL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计中的32位二进制计数器COUNTER32B的ENABL使能端进行同步控制。当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进锁存器REG32B中,并由外部的16进制7段译码器译出,显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。锁存信号后,必须有一清0信号RST_CNT对计数器进行清零,为下1秒的计数操作作准备。
该实验组要有四个模块组成:测频信号发生器、32位锁存器
、32位计数器以及顶层文件。
VHDL设计局部
测频控制电路FTCTRL
设计频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。控制时钟信号clk取为1Hz,2分频后即可产生一个脉冲宽为1秒的时钟cnt-en,以此作为计数闸门信号。当cnt-en为高电平时,允许计数;当cnt-en由高电平变为低电平〔下降沿到来〕时,应产生一个锁存信号,将计数值保存起来;锁存数据后,还要在下次cnt-en上升沿到来之前产生零信号ret-en,将计数器清零,为下次计数做准备。
程序代码如下:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYTESTCTLIS
PORT(CLK:INSTD_LOGIC;
TSTEN:OUTSTD_LOGIC;
CLR_CNT:OUTSTD_LOGIC;
Load:OUTSTD_LOGIC);
ENDTESTCTL;
ARCHITECTUREbehavOFTESTCTLIS
SIGNALDiv2CLK:STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IFCLKEVENTANDCLK=1THEN
Div2CLK=NOTDiv2CLK;
ENDIF;
ENDPROCESS;
PROCESS(CLK,Div2CLK)
BEGIN
IFCLK=0ANDDiv2CLK=0THEN
CLR_CNT=1;
ELSE
CLR_CNT=0;
ENDIF;
ENDPROCESS;
Load=NOTDiv2CLK;TSTEN=Div2CLK;
ENDbehav;
生成LPM模块的流程:选择File→Creat/_Update→Creatsymbolfilesforcurrentfile,再选择Tools→Netlistviewers→RETviewer那么可以看到生成的元件模块图。
2〕锁存器REG32B
当cnt-en下降沿到来时,将计数器的计数值锁存,这样可由外部的七段译码器译码并在数码管显示。设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存器的位数应跟计数器完全一样。
程序代码如下:
LIBRARYieee;
USEieee.std_logic_1164.all;
ENTITYREGIS
PORT
(
clock :INSTD_LOGIC;
data :INSTD_LOGIC_VECTOR(31DOWNTO0);
q :OUTSTD_LOGIC_VECTOR(31DOWNTO0)
);
ENDREG;
ARCHITECTURESYNOFREGIS
SIGNALsub_wir