8位16进制频率计设计

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六:8位十六进制频率机设计

一实验目的:

设计8位16进制频率计,学习较复杂的数字系统设计方法。

二实验原理:

根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为 1 秒的输入信号脉冲计

数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清0,为下一测频计数周期作好准备。测频控制信号可以

由一个独立的发生器来产生,即图7-34中的FTCTRL。根据测频原理,测频控制时序可以如图7-33所示。

设计要求是:FTCTRL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计中的32位二进制计数器

COUNTER32B(图7-34)的ENABL使能端进行同步控制。当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进锁存器REG32B中,并由外部的16进制7段译码器译出,显示计数值。设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。锁存信号后,必须有一清0信号RST_CNT对计数器进行清零,为下1秒的计数操作作准备。

三实验内容:

1:分别仿真测试模块例7-7、例7-8和例7-9,再结合例7-10完成频率计的完整设计和硬件实现,并给出其测频时序波形及其分析。建议选实验电路模式5;8个数码管以16进制形式显示测频输出;待测频率输入FIN由clock0输入,频率可选4Hz、256HZ、3Hz...50MHz等;1HZ测频控制信号CLK1HZ可由clock2输入(用跳线选1Hz)。

注意,这时8个数码管的测频显示值是16进制的。

2:参考例3-22,将频率计改为8位10进制频率计,注意此设计电路的计数器必须是8个4 位的10

进制计数器,而不是1个。此外注意在测频速度上给予优化。

3:用LPM模块取代例7-8和例7-9,再完成同样的设计任务。

四实验步骤:

实验程序如下

1. 测频控制电路程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY FTCTRL IS

PORT (CLKK : IN STD_LOGIC; -- 1Hz

CNT_EN : OUT STD_LOGIC; -- 计数器时钟使能

RST_CNT : OUT STD_LOGIC; -- 计数器清零

Load : OUT STD_LOGIC ); -- 输出锁存信号

END FTCTRL;

ARCHITECTURE behav OF FTCTRL IS

SIGNAL Div2CLK : STD_LOGIC;

BEGIN

PROCESS( CLKK )

BEGIN

IF CLKK'EVENT AND CLKK = '1' THEN -- 1Hz时钟2分频

Div2CLK <= NOT Div2CLK;

END IF;

END PROCESS;

PROCESS (CLKK, Div2CLK)

BEGIN

IF CLKK='0' AND Div2CLK='0' THEN RST_CNT<='1';-- 产生计数器清零信号ELSE RST_CNT <= '0'; END IF;

END PROCESS;

Load <= NOT Div2CLK; CNT_EN <= Div2CLK;

END behav;

2. 32位锁存器程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY REG32B IS

PORT ( 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 IS

BEGIN

PROCESS(LK, DIN)

BEGIN

IF LK'EVENT AND LK = '1' THEN DOUT <= DIN;

END IF;

END PROCESS;

END behav;

3. 32位计数器程序如下:

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COUNTER32B IS

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

ENABL : IN STD_LOGIC; -- 计数使能信号

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); -- 计数结果END COUNTER32B;

ARCHITECTURE behav OF COUNTER32B IS

SIGNAL CQI : STD_LOGIC_VECTOR(31 DOWNTO 0);

BEGIN

PROCESS(FIN, CLR, ENABL)

BEGIN

IF CLR = '1' THEN CQI <= (OTHERS=>'0'); -- 清零

ELSIF FIN'EVENT AND FIN = '1' THEN

IF ENABL = '1' THEN CQI <= CQI + 1; END IF;

END IF;

END PROCESS;

DOUT <= CQI;

END behav;

4. 频率计顶层文件程序如下:

LIBRARY IEEE;

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

ENTITY FREQTEST IS

PORT ( CLK1HZ : IN STD_LOGIC;

FSIN : IN STD_LOGIC;

DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );

END FREQTEST;

ARCHITECTURE struc OF FREQTEST IS

COMPONENT FTCTRL

PORT (CLKK : IN STD_LOGIC; -- 1Hz

CNT_EN : OUT STD_LOGIC; -- 计数器时钟使能

RST_CNT : OUT STD_LOGIC; -- 计数器清零

Load : OUT STD_LOGIC ); -- 输出锁存信号

END COMPONENT;

COMPONENT COUNTER32B

PORT (FIN : IN STD_LOGIC; -- 时钟信号

CLR : IN STD_LOGIC; -- 清零信号

相关文档
最新文档