FPGA实验7:8位十六进制频率计设计

一、实验目的与要求

1. 设计8位十六进制频率计,学习较复杂数字系统设计方法。

2. 熟悉元件例化语句;

3. 熟悉包含多个文件的电路设计方法。

二、实验原理

运用Quartus II 集成环境下的图形设计方法设计一个8位的十六进制频率计。进行波形仿真和分析。

三、实验内容

实验步骤:

  1. 编写测频控制器、32位锁存器、32位计数器并编译、仿真得到正确的波形;
  2. 编写顶层模块(注意:先将要使用的元件(即测频控制器、32位锁存器、32位计数器)包装入库(点击file—>Create/Update—>Create AHDL Include Files for Current File命令),再在顶层文件中调用),几个文件可以做在一个文件夹和一个工程里);
  3. 仿真并分析波形。

四、实验代码

 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;

  • 9
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

x陌北x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值