一、实验目的与要求
1. 设计8位十六进制频率计,学习较复杂数字系统设计方法。
2. 熟悉元件例化语句;
3. 熟悉包含多个文件的电路设计方法。
二、实验原理
运用Quartus II 集成环境下的图形设计方法设计一个8位的十六进制频率计。进行波形仿真和分析。
三、实验内容
实验步骤:
- 编写测频控制器、32位锁存器、32位计数器并编译、仿真得到正确的波形;
- 编写顶层模块(注意:先将要使用的元件(即测频控制器、32位锁存器、32位计数器)包装入库(点击file—>Create/Update—>Create AHDL Include Files for Current File命令),再在顶层文件中调用),几个文件可以做在一个文件夹和一个工程里);
- 仿真并分析波形。
四、实验代码
1、测频控制器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY FTCTRL IS
PORT(CLKK:IN STD_LOGIC;
CNT_EN:OUT STD_LOGIC;
RST_CNT:OUT STD_LOGIC;
LOAD:OUT STD_LOGIC);
END;
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;
2、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;
ARCHITECTURE BEHAV OF REG32B IS
BEGIN
PROCESS(LK,DIN)
BEGIN
IF LK'EVENT AND LK='1' THEN
DOUT<=DIN;
END IF;
END PROCESS;
END;
3、32位计数器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY COUNTER32B IS
PORT(FIN:IN STD_LOGIC;
CLR:IN STD_LOGIC;
ENABL:IN STD_LOGIC;
DOUT: OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END;
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;
4、顶层设计文件
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY FREQTEST IS
PORT(CLK1HZ:IN STD_LOGIC;
FSIN:IN STD_LOGIC;
DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END;
ARCHITECTURE ATRUC OF FREQTEST IS
COMPONENT FTCTRL
PORT(CLKK: IN STD_LOGIC;
CNT_EN:OUT STD_LOGIC;
RST_CNT:OUT STD_LOGIC;
LOAD:OUT STD_LOGIC);
END COMPONENT;
COMPONENT COUNTER32B
PORT(FIN:IN STD_LOGIC;
CLR:IN STD_LOGIC;
ENABL:IN STD_LOGIC;
DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0));
END COMPONENT;
COMPONENT REG32B
PORT(LK:IN STD_LOGIC;
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;