E D A
实 验 报 告
实验——
八位十六进制频率计
学院: 班级: 姓名: 学号:
一、实验目的:
1.熟悉Quartus II软件的使用;
2.掌握VHDL文本设计流程、组合电路的设计仿真和测试;
3.通过电路的仿真及验证,进一步了解八位十六进制频率计的功能;
二、实验内容:
根据VHDL文本设计流程,利用Quartus II完成八位十六进制频率计。
A.建立工作库文件夹和编辑设计文件
a.新建一个文件夹,命名为liulan,放在D盘中;
b.打开Quartus II,新建文件,选择 VHDL File选项,分四个模块——侧频控制电路、32位锁存器、32位计数器、频率计顶层文件分别输入源程序如下:
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 FTCTRL;
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 behav;
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 REG32B;
ARCHITECTURE behav OF REG32B IS BEGIN
PROCESS(LK,DIN) BEGIN
IF LK'EVENT AND LK = '1' THEN DOUT <= DIN; END IF;
END PROCESS; END behav;
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; ENABLE : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END COUNTER32B;
ARCHITECTURE behav OF COUNTER32B IS
SIGNAL CQI : STD_LOGIC_VECTOR(31 DOWNTO 0); BEGIN
PROCESS(FIN,CLR,ENABLE)
BEGIN
IF CLR = '1' THEN CQI <= (OTHERS => '0'); ELSIF FIN'EVENT AND FIN = '1' THEN
IF ENABLE = '1' THEN CQI <= CQI + 1;END IF; END IF; END PROCESS; DOUT <= CQI;
END behav;
4.频率计顶层文件
LIBRARY IEEE;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; ENTITY wf IS
PORT(CLK1HZ : IN STD_LOGIC; FSIN : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END wf;
ARCHITECTURE struc OF wf 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; ENABLE : 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, ENABLE => TSTEN1,DOUT =>DTO1); END struc;
c.选择File—save as,找到已设立的文件夹:D:\\liulan,将文件存盘至该文件夹(存盘文件名与实体名一致)。
B.创建工程:
a.选择File—New Project Wizard,找到文件夹D:\\liulan b.将设计文件分别加入工程。 c.完成工程的设定。
C.输出原理图:
利用RTL Viewer,查看原理框图是否正确。若无误,则可分别观察到如下图形: 1.
2.