• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > 电子设计 > PCB设计 > PCB设计 > 基于赛灵思FPGA的频率计设计

基于赛灵思FPGA的频率计设计

录入:edatop.com    点击:

首先是将频率分频,产生1HZ频率,程序如下:

-------------------------------------------------------------------
-- 说明: 分频模块,将标准输入频率分频为1HZ
-- 文件: fenpin.vhd
-- 作者:
-- 日期: 2012/04/09
-- 修改:
-- 软件: Altera QuartusII 9.0
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --运算符重载的一个头文件


--实体描述部分
ENTITY fenpin IS
PORT( --端口声明
CLKIN : IN STD_LOGIC;
CLK1HZ : OUT STD_LOGIC
);
END fenpin;


--结构体描述部分
ARCHITECTURE bhv OF fenpin IS

SIGNAL Q : STD_LOGIC;

BEGIN
PROCESS(CLKIN)--IF语句放在进程中
CONSTANT shuru_05CLK :integer := 50000; --shuru_05CLK是标准输入频率的一半,这里使shuru_05CLK=50000,
--就是假设标准信号是100000HZ,要根据实际输入频率更改这个常量
VARIABLE CNT :integer := 0 ;
BEGIN
IF (CLKIN'EVENT AND CLKIN='0') THEN --功能:当时钟下降沿到来,判断变量CNT=shuru_05CLK的值没有
IF CNT=shuru_05CLK THEN -- 不等于就继续累加,直到CNT=shuru_05CLK,此时就将信
CNT := 0; Q = NOT Q; -- 号Q取反,并把CNT清零,也就是每shuru_05CLK(这里是
ELSE CNT := CNT + 1;-- 50000)次时钟变化,才让Q变一次,达到了分频效果。
END IF;
END IF;
END PROCESS; --进程结束
CLK1HZ = Q ;
END bhv; --结束结构体

其次是测频控制模块,主要用来产生1S的闸门信号,如下:

-------------------------------------------------------------------
-- 说明: 测频控制模块
-- 文件: kongzhi.vhd
-- 作者:
-- 日期: 2012/04/09
-- 修改:
-- 软件: Altera QuartusII 9.0
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
--USE IEEE.STD_LOGIC_UNSIGNED.ALL; --运算符重载的一个头文件


--实体描述部分
ENTITY kongzhi IS
PORT( --端口声明
CLKK : IN STD_LOGIC;
RST_CNT,CNT_EN,LOAD : OUT STD_LOGIC
);
END kongzhi;


--结构体描述部分
ARCHITECTURE bhv OF kongzhi IS

SIGNAL Q : STD_LOGIC;

BEGIN
PROCESS(CLKK)--IF语句放在进程中
BEGIN
IF (CLKK'EVENT AND CLKK='1') THEN
Q = NOT Q;
END IF;
IF CLKK='0' AND Q = '0' THENRST_CNT = '1' ;
ELSE RST_CNT = '0';
END IF;
END PROCESS; --进程结束
CNT_EN = Q ;
LOAD = NOT Q ;
END bhv; --结束结构体

第三步是计数器部分,对待测信号进行频率计数:

-------------------------------------------------------------------
-- 说明: 1位十进制计数器模块
-- 文件: CNT10.vhd
-- 作者:
-- 日期: 2012/04/09
-- 修改:
-- 软件: Altera QuartusII 9.0
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --运算符重载的一个头文件


--实体描述部分
ENTITY CNT10 IS
PORT( --端口声明
CLK, CLR, EN, RESET : IN STD_LOGIC;
COUT : OUT STD_LOGIC;
Q : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )
);
END CNT10;


--结构体描述部分
ARCHITECTURE bhv OF CNT10 IS

SIGNAL Q1 : STD_LOGIC_VECTOR ( 3 DOWNTO 0 );--定义四位宽的矢量型信号节点

BEGIN
PROCESS(CLR,CLK)--IF语句放在进程中
BEGIN
IF RESET = '0' THEN Q1 = 0000;COUT = '0'; --复位信号,当RESET为0时复位,正常为低电平
ELSIF CLR = '1' THEN Q1 = 0000;COUT = '0'; --清零信号,当CLR为1时清零,正常为低电平
ELSIF CLK'EVENT AND CLK = '1' THEN
IF EN='1' THEN
IF Q19 THEN Q1 = Q1+1;COUT = '0'; --计数器未计满9就继续计数
ELSE Q1 = 0000;COUT = '1'; --计数器计满9就清零,产生进位信号
END IF;
END IF;
END IF;
END PROCESS; --进程结束
Q = Q1; --端口赋值
END bhv; --结束结构体

[p]

第四步,将测得的频率锁存,即设计锁存器:

-------------------------------------------------------------------
-- 说明: 锁存器模块
-- 文件: suocun.vhd
-- 作者:
-- 日期: 2012/04/09
-- 修改:
-- 软件: Altera QuartusII 9.0
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; --运算符重载的一个头文件


--实体描述部分
ENTITY suocun IS
PORT( --端口声明
RESET, CLK1HZ : IN STD_LOGIC;
AIN0,AIN1,AIN2,AIN3 : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
Q0,Q1,Q2,Q3 : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)
);
END suocun;


--结构体描述部分
ARCHITECTURE bhv OF suocun IS
BEGIN
PROCESS(CLK1HZ) --这里输入的1HZ是来自控制模块的LOAD,LOAD是1HZ的信号
VARIABLE T3,T2,T1,T0 : STD_LOGIC_VECTOR (3 DOWNTO 0);--定义变量
BEGIN
IF RESET = '0' THEN --复位信号为低电平有效,当RESET=0时,将所有值清零
T3 := 0000 ;
T2 := 0000 ;
T1 := 0000 ;
T0 := 0000 ;
ELSIF (CLK1HZ'EVENT AND CLK1HZ='1') THEN --根据题目要求,LOAD上升沿锁存数据
T3:=AIN3;
T2:=AIN2;
T1:=AIN1;
T0:=AIN0;
END IF;
Q3 = T3;
Q2 = T2;
Q1 = T1;
Q0 = T0;
END PROCESS; --进程结束

END bhv; --结束结构体

最后是译码输出在数码管显示:

-------------------------------------------------------------------
-- 说明: 译码器设计
-- 文件: decoder.vhd
-- 作者:
-- 日期: 2012/04/09
-- 修改:
-- 软件: Altera QuartusII 9.0
-- 芯片: Altera Cyclone FPGA (EP1C3T144C8)
-------------------------------------------------------------------

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY decoder IS
PORT(
ain : IN STD_LOGIC_VECTOR (3 DOWNTO 0);
yout : OUT STD_LOGIC_VECTOR (6 DOWNTO 0)
);
END decoder;


ARCHITECTURE yimaqi OF decoder IS
BEGIN
PROCESS ( ain )
BEGIN
CASE ain IS
WHEN 0000 => yout= 0111111; --0
WHEN 0001 => yout= 0000110; --1
WHEN 0010 => yout= 1011011; --2
WHEN 0011 => yout= 1001111; --3
WHEN 0100 => yout= 1100110; --4
WHEN 0101 => yout= 1101101; --5
WHEN 0110 => yout= 1111101; --6
WHEN 0111 => yout= 0000111; --7
WHEN 1000 => yout= 1111111; --8
WHEN 1001 => yout= 1101111; --9
WHEN 1010 => yout= 1110111; --A
WHEN 1011 => yout= 1111100; --B
WHEN 1100 => yout= 0111001; --C
WHEN 1101 => yout= 1011110; --D
WHEN 1110 => yout= 1111001; --E
WHEN 1111 => yout= 1110001; --F
WHEN OTHERS => NULL;
END CASE;
END PROCESS;
END yimaqi;

射频工程师养成培训教程套装,助您快速成为一名优秀射频工程师...

天线设计工程师培训课程套装,资深专家授课,让天线设计不再难...

上一篇:多种PCB制作方法和工艺介绍
下一篇:PCB的布线原则介绍

射频和天线工程师培训课程详情>>

  网站地图