END rt3;
经过编译后生成模块文件,其D型触发器的模块文件如图4-3所示。
图4-3 D型触发器的模块文件
4.3.2 计数器的设计
计数是一种简单基本的运算,计数器是实现这种逻辑运算的电路。计数器在电子设计中的主要作用是对脉冲个数进行计数,来实现对所求参数的测量、计数和控制功能。计数器的组成主要有计数单元和一些控制门。计数单元是由一系列有存储功能的各种触发器构成的,这些触发器有D触发器、RS触发器、JK触发器以及D触发器等。计数器在现代电子设计系统中具有广泛的应用,如在电子计算机的控制中对指令地址进行计数,以便顺序取出一条指令。在运算中作乘法、除法运算剑法、减法次数,又如在数字仪器中对脉冲的计数等等。计数器可以用来显示产品的工作状态,一般来说,常见的有3为和4位的。很显然,3位的最大能显示到999,4位的最大可以显示到9999。本设计对计数要求比较高,因为要对200MHz的信号进行计数,故采用32位的计数器,器计数值最大为4294967296,足以达到设计要求。
在Quartus II中使用文本输入的方法,定制一个满足要求的32位计数器。新建一个工程,然后新建一个VHDL文本,输入程序进行调试仿真。本设计需要两个32位计数器,分别对标准信号和被测信号进行计数。
标准信号的VHDL程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_UNSIGNED_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY c_counter IS
PORT(
clk :in std_logic;
clr :in std_logic;
c_en :in std_logic;
c_cnt :buffer std_logic_vector(31 downto0)
);
END c_counter;
ARCHITECTURE rt1 OF c_counter IS
BEGIN
PROCESS(clr,clk)
BEGIN
IF clr='1' THEN
c_cnt<=(OTHERS=>'0');
ELSIF rising_edge(clk) then
IF c_en='1'THEN
c_cnt<=c_cnt+'1';
END IF;
END IF;
END PROCESS;
END ARCHITECTURE;
在计数器完成计数后,需要将计数结果送入锁存器进行锁存,故在设计被测信号计数器时,将锁存器的使能控制信号over添加了进来,被测信号计数器的输出端over与锁存器的使能端相连,这样就能很好的完成计数和锁存功能了。被测信号计数器的VHDL程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY s_counter IS
PROT(
s_en :in std_logic; 基于SOC技术的等精度频率计设计+源码+流程图(7):http://www.youerw.com/tongxin/lunwen_507.html