基于fpga的fir数字滤波器的设计及仿真毕业设计论文(编辑修改稿)内容摘要:

7 页 共 36 页 4 FIR 数字滤波器的 FPGA 设计及仿真 本章采用 VHDL 语言,利用 FPGA 的查找表结构,完成了一个基于分布式算法的 256 阶 FIR 低通数字滤波器的程序设计。 在设计中采用模块化、参数化设计方法,简化了设计过程,并将设计结果进行了仿真验证。 FIR 数字滤波器分布式算法的基本原理 分布式算法( Distributed Arithmetic, DA)是 1973 年由 Crosier 提出来的,后来 Peled 和 Liu 进行了推广工作,直到现场可编程门阵列( FPGA)的查找表( Look Up Table LUT)结构的出现,这种方法才受到重视,其主要原理如下。 为了分析简单起见,将 FIR 滤波器的表达式改写为: 112211001k0y kkkk kxhxhxhxhxh (4–1) 设  1,0,210   kbbBb kbk xxx ,其中 Xkb 表示 Xk 中的第 b 位, xk 即 x 的第 k次采样,则 y 可以表示为:   1010Bb kbkk k xhy (4–2) 重新分别求和,其结果可表示成如下形式: kbkk kBbb xhy   1010 2 (4–3) 可以看出,分布式算法是一种以实现乘加运算为目的的运算方法,与传统的乘累加不同在于执行部分积运算的先后顺序不同,这个过程可用图 的结构来实现,可以看出,该算法可以利用一个查找表( LUT)实现映射,即 2K 字宽( 即2K 行),预先编好程序的 LUT 接受一个 k 位输入量 xb=[x0bx1bx(k1)b]的映 基于 FPGA的 FIR数字滤波器的设计及仿真 第 18 页 共 36 页 射,经查找表的查找后直接输出部分积 kbkk k xhbo u tta b le  10)(_ ,算法中的乘法以位权 2b 可以通过图中的寄存器和累加器完成,在 K 次循环后完成计算结束。 这个过程共进行了 B 次查找和 B 次累加 [15]。 12)(_2/  Bbo u tta b leyy ( 4–4) L U T累加器寄存器2 1t a b l e _ o u tX0 ( B 1 )X1 ( B 1 )X( k 1 ) ( B 1 )………X0 1X1 1X( k 1 ) 1X0 0X1 0X( k 1 ) 0… … … …位 移 寄 存 器Y 图 DA 算法结构图 FPGA 设计流程 确定了滤波器的实现方案后,就可以借助 FPGA 来设计了。 FPGA 设计是指利用 EDA 软件 (Altera 公司的 Max+plusⅡ 、 QuartusⅡ 等 )和编程工具对器件进行开发的过程。 本设计是在 QuartusⅡ 开发平台上进行的, FPGA 的设计流程如图 所示。 基于 FPGA的 FIR数字滤波器的设计及仿真 第 19 页 共 36 页 图 FPGA 设计流程 1. 设计准备 按照设计需求,进行方案确定和器件选择工作。 在第三章已经确定了 FIR 滤波器的实现方案,鉴于实现这一方案要用到查找表 结构,所以选择了具备查找表结构的 FLEX 10K 元器件。 2. 设计输入 设计者将所设计的系统或电路以开发软件要求的某种形式表现出来,并送入计算机的过程称为设计输入。 设计输入通常有原理图输入方式、硬件描述语言输入方式和波形输入方式三种方式,在本设计中采用硬件描述语言输入方式,即VHDL 输入方式。 3. 设计处理 这是器件设计中的核心环节。 在设计处理过程中,编译软件将对设计输入文件进行逻辑化简、综合和优化,并适当地用一片或多片器件自动进行适配,最后产生编程用的编程文件。 设计处理包括语法检查和设计规则检查、逻辑 优化和综合、适配和分割、布局和布线及生成编程数据文件等七个步骤。 4. 器件编程 对 FPGA 来说是将位流数据文件 “配置 ”到 FPGA 中去,这样,配置的芯片就能够执行所设计的系统的功能。 设计准备 设 计 输 入 原理图 /硬件描述 设计处理 优化 器件编程 功能仿真 时序仿真 基于 FPGA的 FIR数字滤波器的设计及仿真 第 20 页 共 36 页 FIR 滤波器各功能模块的具体实现 FPGA 有着规整的内部逻辑阵列和丰富的连线资源,特别适合于数字信号处理任务,相对于串行运算为主导的通用 DSP 芯片来说,其并行性和可扩展性更好,更适合 FIR 滤波器的设计。 FIR 滤波器的总体结构 设计的 FIR 滤波器可以分为以下三种模块:寄存器模块、加法器模块、乘法器模块。 寄存器模块 对模块进行逻辑设计时,采用了 VHDL 文本输入方式。 VHDL 语言的一个基本设计单元是由实体说明( ENTITY Declaration)和构造体说明( ARCHITECTURE Body)两部分构成,对端口的定义以及对参数的说明都包含在实体( ENTITY)部分,设计时将移位寄存器命名为 dff8。 寄存器用于寄存一组二值代码,对寄存器的触发器只要求它们具有置 置 0 的功能即可,在 CP 正跳沿前接受输入信号,正跳沿时触发翻转,正跳沿后输入即被封锁。 此模块程序如下: LIBRARY IEEE。 USE。 ENTITY dff8 IS GENERIC (width_1:integer:=7。 width_2:integer:=7。 PORT( clk : IN STD_LOGIC。 clear : IN STD_LOGIC。 Din : IN STD_LOGIC_VECTOR(width_1 DOWNTO 0)。 Dout : OUT STD_LOGIC_VECTOR(width_2 DOWNTO 0) )。 END dff8。 ARCHITECTURE a OF dff8 IS BEGIN 基于 FPGA的 FIR数字滤波器的设计及仿真 第 21 页 共 36 页 PROCESS(clk,clear) BEGIN IF clear=39。 139。 THEN Dout=00000000。 ELSIF clear=39。 039。 THEN IF(clk39。 EVENT AND clk=39。 139。 ) THEN Dout = Din。 END IF。 END IF。 END PROCESS。 END a。 程序中的前两句是库和包集合说明,语句 IEEE 是程序中要用到的库。 从语句 “ENTITY dff8 IS”开始到 “END dff8”为止是实体说明语句,在实体说明中定义了 3 个输入端口和 1 个输出端口,这个输入分别是时钟信号 clk、清零信号 clear、输入信号 Din;输出信号 Dout。 std_logic、 std_logic_vector 是 IEEE 定制的标准化数据类型。 在 dff8 模块的实体说明中又定义了 2 个参数, width_1 是输入信号的宽度, width_2 是输出信号的宽度; 2 个参数的数据类型均为整数类型 ,后面的数据是对参数赋予的值,改变这个值就修改了参数。 从语句 “ARCHITECTURE a OF dff8 IS”到 “END a”是对构造体的描述,它对模块内部的功能进行了说明。 设计的 dff8 模块的逻辑符号如图 所示。 图 dff8 模块的逻辑符号 寄存器的波形仿真如图 所示。 基于 FPGA的 FIR数字滤波器的设计及仿真 第 22 页 共 36 页 图 寄存器的波形仿真 在 CP 正跳沿前接受输入信号,正跳沿时触发翻转,正跳沿后输入即被封锁,仿真结果表明 dff8 模块的功能完全正确。 加法器模块 在将两个多位二进制数相加时,除了最低位以外, 每一位都应该考虑来自低位的进位,即将两个对应位的加数和来自低位的进位 3 个数相加。 这种运算称为全加,所用的电路称为全加器。 多位加法器的构成有两种方式:并行进位和串行进位。 并行进位加法器设有进位产生逻辑,预算速度较快;串行进位方式是将全加器级联构成多位加法器。 并行进位加法器通常比串行级联加法器占用更多的资源。 随着为数的增加,相同位数的并行加法器与串行加法器的资源占用差距也越来越大,因此,在工程中使用加法器时,要在速度和容量之间寻找平衡点。 本次设计采用的是并行加法器方式。 实现两个二进制数字的相加运算。 当到达时 钟上升沿时,将两数输入,运算,输出结果。 此模块程序如下: LIBRARY IEEE。 USE。 USE。 ENTITY add121616 is GENERIC ( add_1:integer:=11。 add_2:integer:=15。 add_3:integer:=15。 PORT(clk : in STD_LOGIC。 Din1 :in signed (add_1 downto 0)。 Din2 :in signed (add_2 downto 0)。 Dout:out signed (add_3 downto 0))。 基于 FPGA的 FIR数字滤波器的设计及仿真 第 23 页 共 36 页 END add121616。 ARCHITECTURE a of add121616 is SIGNAL s1: signed(add_3 downto 0)。 BEGIN s1=(Din1(add_1)amp。 Din1(add_1)amp。 Din1(add_1)amp。 Din1(add_1)amp。 Din1)。 PROCESS(Din1,Din2,clk) BEGIN if clk39。 event and clk =39。 139。 then Dout=s1+Din2。 end if。 end process。 end a。 程序中的前三句是库和包集合说明,语句 IEEE 是程序中要。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。