8位十六进制频率计的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二利用VHDL实现8位十六进制频率计
一、实验目的
1)掌握更复杂的原理层次化设计和数字系统设计方法;
2)完成8位16进制频率计的设计。
二、实验内容
在Quartus II上利用VHDL设计出一个8位的十六进制的频率计,分别设计出频率计的各个模块。
三、实验仪器
1)计算机及操作系统;
2)QuartusII软件。
四、实验原理
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉冲宽度为1秒的输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号并为下一测频计数周期做准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即TESTCTL。
TESTCTL的计数是能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA是能端进行同步控制。
当CNT_EN高电平时允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进个锁存器REG4B 中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是数据显示稳定,不会由于周期性的清0信号而不断闪烁。
锁存信号后,必须有一清0信号RST_CNT对计数器进行清零,为下1秒的计数操作作准备。
数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包含外电路的信号整形电路、脉冲发生器、译码驱动电路和显示电路。
工作原理:系统正常工作时,脉冲信号发生器输入1Hz的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。
测量信号时,将被测信号通过信号整形电路,产生同频率的矩形波,输入计数器作为时钟。
当计数闸门信号高电平有效时,计数器开始计数,
并将计数结果送入锁存器中。
设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
最后将锁存的数值由外部的七段译码器译码并在数码管上显示。
五、实验步骤
1、完成频率计控制电路的设计
1)频率计控制电路程序编译;
2)频率计控制电路程序允许生成模块;
3)频率计控制电路。
2、完成32位计数器的设计
1) 32位计数器程序编译;
2) 32位计数器程序允许生成模块;
3) 32位计数器。
3、完成32位寄存器的设计
1) 32位锁存器程序编译;
2) 32位锁存器程序允许生成模块;
3) 32位锁存器模块。
4、完成一个8位16进制频率计电路的设计
1)8位16进制频率计电路程序编译;
2)8位16进制频率计电路程序允许生成模块;
3)8位16进制频率计电路。
六、实验结果及分析
1、频率计控制电路仿真波形如图1所示
由仿真图形可知,当CLKK作为1Hz时钟输入时,CNT_EN信号是其2分频信
号即脉宽为1s,也就可以作为计数器的使能信号。
当CNT_EN信号由高电平跳变为低电平即计数器计数结束时,Load信号出现一个上升沿作为锁存器锁存数据的使能信号。
在下一个CNT_EN信号由低电平变为高电平即开始计数之前,RST_EN 出现一段时间的高电平,即作为对计数器的异步清零信号,为计数器计数做准备。
故测频电路部分设计成功。
2、32位计数器的仿真波形
以下的图为DOUT的低四位波形
由仿真波形可知当CLR信号为高电平时,DOUT被清零。
当CLR为低电平而ENABL 信号为低电平时,此时DOUT也被清零。
只有当CLR为低电平且ENABL为高电平时,计数器才会正常计数,且FIN出现上升沿的时候计数一次。
故可知计数器的设计正确。
3、32位寄存器的仿真波形
下图为输入DIN的低6位的波形
下图为输出DOUT的低6位的波形
由仿真电路可知,当LK没有出现上升沿的时候,DIN的数值不能赋值给到DOUT。
而当LK出现上升沿的时候,DIN的值将会赋值给DOUT被锁存起来。
故32位寄存器设计成功。
4、8位十六进制频率计的仿真波形
以下图为DOUT的低四位
由仿真图形知每CLK1HZ的一个周期里面,对输入的PSIN脉冲的上升沿进行计数,且在计数过程中DOUT始终保持着上一次计数的结果用以显示。
故8位十六进制频率计设计成功。
七、思考题
1、简述Quartus II设计的流程
⑴编辑和输入设计文件。
⑵创建工程。
⑶全程综合和编译。
⑷仿真测试
⑸引脚锁定与硬件测试。
2、功能仿真与时序仿真有什么不同
功能仿真是指在一个设计中,在设计实现前对所创建的逻辑进行的验证其功能是否正确的过程。
布局布线以前的仿真都称作功能仿真,它包括综合前仿真和综合后仿真。
综合前仿真主要针对基于原理框图的设计;综合后仿真既适合原理图设计,也适合基于 HDL 语言的设计。
时序仿真使用布局布线后器件给出的模块和连线的延时信息,在最坏的情况下对电路的行为作出实际地估价。
时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有。
3、还有什么其他的方法实现频率计
还可以使用单片机(如STC89C52RC)实现频率计的功能
八、附录
1、源程序:
32位计数器描述
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNTER32B IS
PORT(FIN,CLR,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;
测频控制电路:
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FTCTRL IS
PORT (CLKK : IN STD_LOGIC;
CNT_EN,RST_CNT ,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
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;
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;
频率计顶层文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FREQTEST IS
PORT (CLK1HZ,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; --0.5HZ信号,产生1s的计数时间
RST_CNT : OUT STD_LOGIC; --计数器清零信号,1HZ与使能信号同为低时清零
Load : OUT STD_LOGIC); --0.5HZ锁存信号
END COMPONENT;
COMPONENT COUNTER32B --32位计数器
PORT(FIN :IN STD_LOGIC; --计数信号,与FSIN相连,输入待测信号CLR : IN STD_LOGIC; --清零信号,与RST_CNT相连
ENABL : IN STD_LOGIC; --计数使能信号,与CNT_EN相连
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) );
END COMPONENT;
COMPONENT REG32B --32位锁存器
PORT(LK :IN STD_LOGIC; --使能输入0.5HZ信号,与Load相连DIN : IN STD_LOGIC_VECTOR(31 DOWNTO 0); --计数结果输入
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0) ); --计数结果输出END COMPONENT;
SIGNAL TSTEN1 : STD_LOGIC;
SIGNAL CLR_CNT1 : STD_LOGIC;
SIGNAL Load1 : STD_LOGIC;
SIGNAL DTO1 : STD_LOGIC_VECTOR(31 DOWNTO 0);
SIGNAL CARRY_OUT1 : STD_LOGIC_VECTOR(6 DOWNTO 0); BEGIN
U1: FTCTRL PORT MAP(CLKK => CLK1HZ,CNT_EN => TSTEN1,
RST_CNT => CLR_CNT1,Load => Load1 );
U2: REG32B PORT MAP(LK => Load1,DIN => DTO1,DOUT =>DOUT); U3: COUNTER32B PORT MAP( FIN =>FSIN,CLR => CLR_CNT1,
ENABL => TSTEN1,DOUT =>DTO1 );
END struc;
2、8位十六进制频率计的逻辑示意图。