【VHDL笔记】 FIR滤波器的设计(基于Quartus II软件)

您所在的位置:网站首页 fpgafir滤波器 【VHDL笔记】 FIR滤波器的设计(基于Quartus II软件)

【VHDL笔记】 FIR滤波器的设计(基于Quartus II软件)

#【VHDL笔记】 FIR滤波器的设计(基于Quartus II软件)| 来源: 网络整理| 查看: 265

PS:此文章仅供参考

目录 前言一、什么是FIR滤波器?二、程序编写1.顶层程序DTFIR.vhd2.开关控制程序 KG.vhd3.数码管的控制程序 KZSR.vhd4.FIR滤波器程序 FIR.vhd5.数码管显示控制程序 XSKZQ.vhd6、RTL图显示结果 总结

前言

本文介绍了使用VHDL语言实现一个FIR滤波器的设计

以下是本篇文章正文内容,代码可供参考

一、什么是FIR滤波器?

通常数字滤波器常用于修正或改变时域中信号的属性。学过信号与系统的同学应该知道,最为普通的数字滤波器就是 线性时不变量(LTI)滤波器,线性时不变量滤波器又分为两大类:有限脉冲响应(FIR)滤波器和无线脉冲响应(IIR)滤波器,FIR滤波器的组成结构如下图所示,该滤波器的优点在于其不再需要给X[n]提供额外的移位寄存器。 在这里插入图片描述

在这里插入图片描述 简单的来说就是

二、程序编写 1.顶层程序DTFIR.vhd

代码如下:

--顶层 LIBRARY LPM; USE LPM.LPM_COMPONENTS.ALL; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY DTFIR IS PORT(K:IN STD_LOGIC; CLK:IN STD_LOGIC; CLK2:IN STD_LOGIC; COM:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); SEG:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END ENTITY DTFIR; ARCHITECTURE ART OF DTFIR IS COMPONENT KG IS PORT(CLK:IN STD_LOGIC; K:IN STD_LOGIC; TIMES:OUT STD_LOGIC); END COMPONENT KG; COMPONENT CLKGEN IS PORT(CLK: IN STD_LOGIC; NEWCLK: OUT STD_LOGIC); END COMPONENT CLKGEN; COMPONENT KZSR IS PORT(CLK:IN STD_LOGIC; XOUT:OUT STD_LOGIC_VECTOR(8 DOWNTO 0); LOAD:OUT STD_LOGIC; COUT:OUT STD_LOGIC_VECTOR(8 DOWNTO 0)); END COMPONENT KZSR; COMPONENT FIR IS GENERIC(W1:INTEGER:=9; W2:INTEGER:=18; W3:INTEGER:=19; W4:INTEGER:=11; L:INTEGER:=4; MPIPE:INTEGER:=3); PORT(CLK,LOAD_X:IN STD_LOGIC; X_IN,C_IN:IN STD_LOGIC_VECTOR(W1-1 DOWNTO 0); Y_OUT:OUT STD_LOGIC_VECTOR(W4-1 DOWNTO 0)); END COMPONENT FIR; COMPONENT XSKZQ IS PORT (ABCD:IN STD_LOGIC_VECTOR(10 DOWNTO 0); G,S,B,Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END COMPONENT XSKZQ; COMPONENT CTRLS IS PORT(CLK: IN STD_LOGIC; SEL: OUT STD_LOGIC_VECTOR(2 DOWNTO 0)); END COMPONENT CTRLS; COMPONENT DISPLAY IS PORT(SEL: IN STD_LOGIC_VECTOR(2 DOWNTO 0); G,S,B,Q: IN STD_LOGIC_VECTOR(3 DOWNTO 0); COM: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); SEG: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END COMPONENT DISPLAY; SIGNAL CK:STD_LOGIC; SIGNAL S0,S1,S2:STD_LOGIC; SIGNAL SD:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL SL:STD_LOGIC_VECTOR(8 DOWNTO 0); SIGNAL SM:STD_LOGIC_VECTOR(10 DOWNTO 0); SIGNAL A,B,C,D:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL SE:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN U0: KG PORT MAP(CLK=>CLK,K=>K,TIMES=>S0); U1: CLKGEN PORT MAP(S0,CK); U2: KZSR PORT MAP(CK,SD,S1,SL); U3: FIR PORT MAP(CK,S1,SD,SL,SM); U4: XSKZQ PORT MAP(SM,A,B,C,D); U5: CTRLS PORT MAP(CLK2,SE); U6: DISPLAY PORT MAP(SE,A,B,C,D,COM,SEG); END ARCHITECTURE ART;

顶层代码也可采用原理图输入的方法,这里简单介绍一下在Quartus II软件中,顶层程序原理图输入使用。 第一步:将所需工程的各种底层模块代码编写完毕,并验证其是否正确。 第二步:右键程序文件,点击Create Symbol File for Current file 创建一个原理图模块 在这里插入图片描述 生成好的原理图模块如下图所示: 在这里插入图片描述 之后在工程目录中新建一个原理图工程.bdf后缀的文件,之后添加各个模块,连线编译就可以了,此次工程的原理图输入如下图所示: 在这里插入图片描述

2.开关控制程序 KG.vhd

使用一个外部拨码开关控制外部输入时钟信号,达到滤波器的启动停止功能。 外部输入 KG.vhd 代码如下:

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY KG IS PORT(CLK:IN STD_LOGIC; K:IN STD_LOGIC; TIMES:OUT STD_LOGIC); END ENTITY KG; ARCHITECTURE ART OF KG IS BEGIN PROCESS(CLK,K)IS BEGIN IF K='1' THEN TIMES


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3