电 子 设 计 自 动 化 实 验
实验名称 综合性实验二、硬件描述语言的层次化设计 实验设备
(1)EDA实验箱(型号 ),(2)计算机,(3)EDA软件(QuartusII) 实验目的
1、 熟悉EDA软件(QuartusII)的硬件描述语言输入设计方法; 2、 掌握VHDL语言的层次化设计方法和仿真分析方法; 3、 了解功能仿真、时序仿真和时序参数分析的意义。 实验内容
1、 用VHDL语言完成4位十进制计数器、4位锁存器、测频控制器的设计,包括 编译、综合、仿真;**
2、 采用层次化设计的方法,用VHDL语言的元件例化语句写出4位十进制频率计的 顶层文件,并分别给出其测频功能和时序仿真分析波形图,并加以分析;** 3、 用EDA实验箱进行硬件验证,并分析测量结果;建议硬件测试实验电路采用NO.0 电路结构,待测信号F_IN接clock0;测频控制时钟CLK接clock2;**
4、 在2基础上将其扩展为8位十进制频率计,或带译码输出的4位十进制频率计。 实 验 报 告 要 求
根据以上实验内容写出实验报告:
1、 简述4位频率计模块的工作原理及其设计、编译、仿真分析过程; 2、 给出模块设计文件、仿真测试文件、仿真结果波形图及其分析报告; 3、 简述硬件验证过程和验证结果。
1、 简述4位频率计模块的工作原理
根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值锁入锁存器的锁存信号和为下一测频计数周期作准备的计数器清0信号。
这3个信号可以由一个测频控制信号发生器产生,即TESTCTL,它的设计要求是,TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要产生一个锁存信号LOAD,在该信号上升沿时,将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是,显示的数据稳定,不会由于周期性的清零信号而不断闪烁。锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
每一个计数器CNT10有4位输出(0000~1001分别表示十进制中的0~9),因此需要用四片CNT10。四片CNT10应串接起来,当前一片CNT10产生进位信号后,由CARRY_OUT输出跳变高电平,引入下一片CNT10(也即输入时钟信号CLK)。 四位十进制计数器 LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); END CNT10;
ARCHITECTURE behav OF CNT10 IS BEGIN
PROCESS(CLK, RST, EN)
VARIABLE CQI : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN
IF RST = '1' THEN CQI := (OTHERS =>'0') ; --计数器异步复位 ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿 IF EN = '1' THEN --检测是否允许计数(同步使能) IF CQI < 9 THEN CQI := CQI + 1; --允许计数, 检测是否小于9 ELSE CQI := (OTHERS =>'0'); --大于9,计数值清零 END IF; END IF; END IF;
IF CQI = 9 THEN COUT <= '1'; --计数大于9,输出进位信号 ELSE COUT <= '0'; END IF;
CQ <= CQI; --将计数值向端口输出 END PROCESS; END behav; 四位寄存器
LIBRARY IEEE; --4位锁存器 USE IEEE.STD_LOGIC_1164.ALL; ENTITY REG4B IS
PORT ( LK : IN STD_LOGIC;
DIN : IN STD_LOGIC_VECTOR(3 DOWNTO 0); DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END REG4B;
ARCHITECTURE behav OF REG4B 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; 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;
实验记录:
1、 仿真分析(目标芯片型号 ,待测信号频率FIN=132*CLK,XX为末两位学号) 测频控制器工作时序波形:
4位频率计工作时序波形:(功能仿真分析)
4位频率计工作时序波形:(时序仿真分析)