基于FPGA的FIR抽取滤波器设计

技术分类: 可编程器件  | 2006-04-01
来源:电子设计应用 | 国防科技大学ATR实验室 佟力永 肖山竹

      用FPGA实现抽取滤波器比较复杂,主要是因为在FPGA中缺乏实现乘法运算的有效结构,现在,FPGA中集成了硬件乘法器,使FPGA在数字信号处理方面有了长足的进步。本文介绍了一种采用Xilinx公司的XC2V1000实现FIR抽取滤波器的设计方法。

      具体实现结构设计基于抽取滤波器的工作原理,本文采用XC2V1000实现了一个抽取率为2、具有线性相位的3阶FIR抽取滤波器,利用原理图和VHDL共同完成源文件设计。图1是抽取滤波器的顶层原理图。其中,clock是工作时钟,reset是复位信号,enable是输入数据有效信号,data_in(17:0)是输入数据,data_out(17:0)是输出数据,valid是输出数据有效信号。adder18是加法器模块,mult18是乘法器模块,acc36是累加器模块,signal_36to18是数据截位器模块,fir_controller是控制器模块。控制器定时向加法器、乘法器和累加器发送数据或控制信号,实现流水线操作。

抽取滤波器顶层原理图

图1  抽取滤波器顶层原理图

      控制器

      控制器是抽取滤波器的核心模块,有两个功能:一是接收输入数据,二是向其它模块发送数据和控制信号。它根据加法器、乘法器和累加器的时序特性,有规律地向加法器发送抽头数据,向乘法器发送系数,向累加器发送控制信号,让加法器、乘法器和累加器在每个时钟周期都完成指定的任务,从而实现流水线操作。控制器用VHDL语言描述,用寄存器存放抽头和系数。

      加法器

      加法器的输入和输出都是18 bit,用VHDL语言描述实现。它有两个工作时钟的延迟,在输入数据准备好的情况下,第一个时钟得出相加结果,第二个时钟把相加结果锁存输出。

      乘法器

      乘法器为18 bit输入,36 bit输出,用库元件MULT18X18S和36 bit锁存器实现。MULT18X18S是XC2V1000自带的18×18 bit硬件乘法器,单个时钟就可完成乘法运算。36 bit锁存器工作于时钟的上升沿,用VHDL语言描述。乘法器(mult18)也有两个工作时钟的延时,在输入数据准备好的情况下,第一个时钟得出相乘结果,第二个时钟把相乘结果锁存输出。加法器和乘法器采用锁存输出的结构,虽然增加了一个工作时钟的延迟,但有利于抽取滤波器稳定的工作,提高可靠性。

      累加器

      36 bit累加器用于累加乘法器的输出,得出滤波结果。它有一个控制端口clr,当clr为高电平时,输出前一轮累加结果,并初始化,开始新一轮累加;当clr为低电平时,进行累加运算。累加器用VHDL语言描述。

      数据截位器

      数据截位器用VHDL语言描述,用于把累加器的36bit输出进行取舍处理,一般截掉数据低位部分,保留数据高位。为了对抽取滤波器进行功能仿真,这里截掉数据高18bit,保留数据低18bit。

      工作过程及功能仿真

      下面以抽取滤波器完成一次抽取滤波的全过程为例,说明抽取滤波器的工作过程。假设时钟1、时钟2、时钟3和时钟4控制器已接收了数据x(n-3)、x(n-2)、x(n-1)和x(n),那么,

      时钟5:控制器向加法器发送数据x(n)和x(n-3);
      时钟6:加法器进行x(n)+x(n-3)运算;控制器向加法器发送数据x(n-1)和x(n-2);
      时钟7:加法器进行x(n-1)+x(n-2)运算,输出x(n)+x(n-3)运算结果。控制器向乘法器发送系数h(0);

0
0
(请您对文章做出评价)
1】【2
加载中

对文章的评论

更多评论

剩余字数:  

相关在线研讨会

我要参加

简化FPGA测试及调试

时间:2008-01-10 10:00:00-12:15:00
简介:随着FPGA的设计速度尺寸和复杂度明显增长,使得整个设计流程中的验证和调试部分成为当前FPGA系统的关键部分。获得FPGA内部信号…

设计资源与分销

  • 博客推荐

  • 论坛推荐

  • 在线研讨会