基于VHDL设计的频率计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VHDL设计的频率计
专业:信息工程学号:姓名:
一、实验任务及要求
1、设计一个可测频率的数字式频率计,测量范围为1Hz~12MHz。该频率计
的逻辑图如图所示。
2、用层次化设计方法设计该电路,编写各个功能模块的程序。
3、仿真各功能模块,通过观察有关波形确认电路设计是否正确。
4、完成电路设计后,用实验系统下载验证设计的正确性。
二、设计说明与提示
由上图可知8位十进制数字频率计,由一个测频控制信号发生器TESTCTL、8个有时钟使能的十进制计数器CNT10、一个32位锁存器REG32B组成。
1、测频控制信号发生器设计要求。频率测量的基本原理是计算每秒种内待测信号的脉冲个数。这就要求TESTCTL的计数使能信号TSTEN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同不控制。当TSTEN高电平时允许计数、低电平时停止计数,并保持其所计的数。在停止计数期间,首先需要一个锁存信号Load的上跳沿将计数器在前1秒钟的计
数值锁存进32位锁存器REG32B中,并由外部的7段译码器译出并稳定显示。设置锁存器的好处是为了显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零信号CLR_CNT对计数器进行清零,为下1秒钟的计数操作做准备。测频控制信号发生器的工作时序如下图。为了产生这个时序图,需首先建立一个由D触发器构成的二分频器,在每次时钟CLK上沿到来时使其值翻转。
其中控制信号时钟CLK的频率1Hz,那么信号TSTEN的脉宽恰好为1秒,可以用作闸门信号。然后根据测频的时序要求,可得出信号Load和CLR_CNT 的逻辑描述。由图可见,在计数完成后,即计数使能信号TSTEN在1秒的高电平后,利用其反相值的上跳沿产生一个锁存信号Load,0.5秒后,CLR_CNT产生一个清零信号上跳沿。
高质量的测频控制信号发生器的设计十分重要,设计中要对其进行仔细的实时仿真(TIMING SIMULATION),防止可能产生的毛剌。
2、寄存器REG32B设计要求。若已有32位BCD码存在于此模块的输入口,在信号Load的上升沿后即被锁存到寄存器REG32B的内部,并由REG32B的输出端输出,经7段译码器译码后,能在数码管上显示输出的相对应的数值。
3、十进制计数器CNT10设计要求。此十进制计数器的特殊之处是,有一时钟使能输入端ENA,当高电平时计数允许,低电平时禁止计数。
三、各个模块设计程序与时序仿真
(1)测频控制信号发生器
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY TESTCTL IS
PORT (CLK : IN STD_LOGIC;
TSTEN : OUT STD_LOGIC;
CLR_CNT : OUT STD_LOGIC;
Load : OUT STD_LOGIC);
END TESTCTL;
ARCHITECTURE behav OF TESTCTL IS
SIGNAL Div2CLK : STD_LOGIC;
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
Div2CLK <= NOT Div2CLK;
END IF;
END PROCESS;
PROCESS(CLK, Div2CLK)
BEGIN
IF CLK = '0' AND Div2CLK ='0' THEN CLR_CNT <= '1';
ELSE CLR_CNT <= '0'; END IF;
END PROCESS;
Load <= NOT Div2CLK; TSTEN <= Div2CLK;
END behav;
时序仿真如下:
符合测频控制信号发生器的要求。
(2)寄存器
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY REG32B IS
PORT (Load : 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 IS
BEGIN
PROCESS(Load, DIN)
BEGIN
IF Load'EVENT AND Load='1' THEN DOUT <=DIN;
END IF;
END PROCESS;
END behav;
时序仿真如下:
如上图时序仿真图所示,当DIN输入一个数字时,遇到LOAD的上升沿过后,输出DOUT锁入输入的数字,符合锁存器的设计要求。
(3)十进制计数器
程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CNT10 IS
PORT (CLK: IN STD_LOGIC;
CLR: IN STD_LOGIC;
ENA: IN STD_LOGIC;
CQ: OUT INTEGER RANGE 0 TO 15;
CARRY_OUT :OUT STD_LOGIC );
END CNT10;
ARCHITECTURE behav OF CNT10 IS
SIGNAL CQI: INTEGER RANGE 0 TO 15;
BEGIN
PROCESS(CLK, CLR, ENA)
BEGIN
IF CLR = '1' THEN CQI <= 0;
ELSIF CLK'EVENT AND CLK = '1' THEN
IF ENA = '1' THEN
IF CQI < 9 THEN CQI <= CQI + 1;
ELSE CQI <= 0;END IF;
END IF;
END IF;
END PROCESS;
PROCESS(CQI)
BEGIN
IF CQI = 9 THEN CARRY_OUT <= '1';
ELSE CARRY_OUT <= '0'; END IF;
END PROCESS;
CQ <= CQI;
END behav;
时序仿真图如下:
如上图所示,ENA为高电平,CLK输入时钟信号时,当输入第十个时钟信号时,CARRY_OUT进1位。当ENA为低电平时,CQ不再进行计数,符合要求。