基于VHDL设计的频率计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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不再进行计数,符合要求。

相关文档
最新文档