clr :in std_logic;
sign :in std_logic;
over :out std_logic;
s_cnt :buffer std_logic_vector(31 downto o)
);
END s_counter;
ARCHITECTURE rt2 OF s_counter IS
signal TEMP:std_logic:='0';
BEGIN
PROCESS(clr,sign)
BEGIN
IF clr='1' THEN
s_cnt<=(OTHERS=>'0');
ELSIF rising_edge(sign)THEN
IF s_en='1'THEN
s_cnt<=s_cnt+'1';
END IF;
END IF;
END PROCESS;
PROCESS(s_en)
BEGIN
IF falling_edge(s_en)THEN
IF s_en='0' THEN
TEMP<='1';
END IF;
END IF;
END PROCESS;
over<=TEMP;
END ARCHITECTURE;
经过编译后生成模块文件,标准信号计数器的模块文件如图4-4,被测信号计数器的模块文件如图4-5。
图4-4 标准信号计数器模块 图4-5 被测信号计数器模
4.3.3 锁存器的设计
锁存器是一种对脉冲电平敏感的储存单元电路,它可以在特定输入脉冲电平作用下改变状态。锁存,就是把信号暂存以文持某种电平状态。锁存器的主要作用是缓存,其次完成高速的控制其与慢速的外设的不同步问题,再次是解决驱动的问题,最后是解决一个I/O既能输入又能输出的问题。
本设计主要是使用其缓存的作用。当计数器完成计数后,将计数结果先进行锁存,然后在启动CPU进行计数。这样就可以保证CPU在读数时不受影响。在这里使用的是一个2路32位锁存器。锁存器的VHDL程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164,ALL;
ENTITY ffd IS
PROT(
CLR :in std_logic;
LOAD :in std_logic;
DATA_EN :out std_logic;
DATA1_IN :in std_logic_vector(31 downto 0);
DATA2_IN :in std_logic_vector(31 downto 0);
DATA1_OUT :out std_logic_vector(31 downto 0);
DATA2_OUT :out std_logic_vector(31 downto 0)
);
END ENTITY;
ARCHITECTURE ONE OF ffd IS
BEGIN
PROCESS(CLR,LOAD)
BEGIN
IF CLR='1' THEN
DATA1_OUT<=(others=>'0');
DATA2_OUT<=(others=>'0');
DATA_EN<='0';
ELSIF LOAD='1' THEN
DATA1_OUT<=DATA1_IN;
DATA2_OUT<=DATA2_IN;
DATA_EN<='1'; 基于SOC技术的等精度频率计设计+源码+流程图(8):http://www.youerw.com/tongxin/lunwen_507.html