8位16进制频率计设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; -- 清零信号