EDA实验报告1.doc
文本预览下载声明
数字频率计设计
实验目的
学习并掌握数字频率计原理,设计,分析和测试方法。
实验内容
用高频率信号检测低频率的信号,通过对高频率脉冲个数的计数得到低频率信号的频率。(高频率信号已知,低频率信号为所测量值)。或用低频率信号检测高频率信号(低频率信号已知,高频率信号为所测量值)。
实验要求
用八段数码管显示频率值。
频率值用十进制表示
四,实验原理。
本实验采用低频测高频的方法,基本原理是利用低频信号产生1s的计数时间,记录在这段时间内高频的脉冲的个数,即高频的频率。由于采用六段数码管显示高频单位为赫兹(Hz)所以测量并显示的范围是2~999999Hz的频率值。
实验设计大体分为五个模块,第一个模块将输入的低频信号进行分频产生0.5Hz,和1HZ的频。其中利用0.5HZ的高电平(持续时间为1s)作为高频信号的计数时间。当1HZ的频率为低电平0.5HZ频率低电平时保存计数器的值并输入到显示模块显示相应的频率。当1HZ的频率信号为低电平时,0.5HZ频率信号为高电平时清除计数器的值以便于下一个计数周期再次计数。可以连续测量不同的频率。
第二个模块为计数模块,当在1s的计数时间里,每到来一个高频脉冲计数器的值就加1,由于是和显示模块相匹配的,所以计数是采用四位二进制数来表示一个数,当个位满9就向十位进1,十位满9向百位进1,依次类推,得到各位的数值。
第三个模块为二次分频与计数显示控制模块,通过它来使能各部分的工作。
第四个模块为锁存器模块,锁存驱动信息。
最后一个为译码器,用来驱动八段数码管显示频率值。
第一个为分频器,第二个为二次分频与计数显示控制器,第三个为锁存器,最右侧的为译码器。
五,实验问题分析和测试方法。
本实验出现的一个问题是计数器的值如何赋值给一个变量然后显示出来,首先要保证的是显示的值是一个稳定的值且为计数器在1s中计数的最大值。
解决方案:在实验中将低频信号(这里暂定为2Hz)分别进行一次2频和2分频,这样便可以产生一个0.5Hz,1Hz的低频计数信号,当0.5Hz,即四分频信号为高电平时,对高频信号脉冲进行计数,在四分频后的0.5Hz频率下降沿将信号送入到显示模块,在之后的二分频低电平和二分频的高电平时间里将计数器清零,以便在下一个计数周期里计数。
测试方法:
①软件仿真:采用quartusII软件进行功能和时序的仿真。得到正确结果后,烧录进579中进行硬件测试。
②硬件测试:调整不同的高频信号,观察显示频率值是否正确。
六,实验代码和仿真图形。
㈠分频模块。
⑴代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity div2 is
port(clkk:in std_logic; --1Hz
clk:out std_logic); --latch out data
end entity div2;
architecture rtl of div2 is
signal div:std_logic;
begin
process(clkk)
begin
if clkkevent and clkk=1
then div=not div; --clkk=2Hz,div=1Hz
end if;
end process;
clk=div;
end architecture rtl;
(2)RTL视图:
㈡计数模块
⑴代码:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
port(clk2:in std_logic; --under test signal
rst_n:in std_logic; --clear reset
en:in std_logic; --counter enable signal
dout:out std_logic_vector(3 downto 0);--4 bit result output
cout:out std_logic); --counter carry
end entity counter;
architecture rtl of counter is
signal count_bit:std_logic_vector(3 downto 0);
begin
process(rst_n,clk2) is
begin
if rst_n=1
显示全部