一种通用FIR/IIR滤波器的设计与实现
eeskill 2022-09-28

介绍了一种通用FIR/IIR滤波器的设计与实现。该滤波器主要用于光盘伺服系统中,以数字化方式完成传统的PID闭环控制。文中通过对其原理和实际应用的分析,给出其最终实现方案。并用Verilog硬件描述语言完成整个滤波器的设计工作。经波形仿真和FPGA验证表明,设计成功。

关键词:FIR/IIR,Verilog,FPGA验证

1引言

通常,DVD/CD盘片在高速旋转时,由于表面翘曲、不圆度或者外界干扰等因素的存在,使读数光束焦深范围(简称读数光点)对目标信迹的跟踪扫描出现误差。对此,CD、DVD机中设置了伺服控制系统,以实现读数光点对目标信迹的动态跟踪。该系统以PID(比例微积分)闭环控制理论为基础,采用数字滤波的方式实现。该伺服控制系统的实现原理如图1所示。

图1中,Gc(z)为控制滤波器,G(s)为光盘读写系统的传递函数,R(s)为预期输出响应,C(s)为实际输出响应。整个闭环控制系统实现的核心是滤波器,它通过改善误差(FE)信号的幅相频特性来实现控制方案。这里,由于滤波器类型和阶数与G(s)密切相关,为了保证伺服控制系统的通用性,必然要设计一种通用可配置的滤波器,这正是本文所要讨论的重点。

2系统设计

2.1设计原理

数字滤波器可以用式(1)的差分方程来表示:

其中,x(n)为输入序列,y(n)为输出序列,ak、bk为各自的系数。其对应的系统函数为:

当ak不都为0时,就是递归结构的IIR滤波器;当ak都为0时,就是非递归结构的FIR滤波器。

2.2设计方法

由于传统的滤波器设计都与滤波器的类型密切相关,不同的类型采用不同的乘加网络结构实现,因此,无法满足通用的要求。但从滤波器的原始差分表达式(如式(1)所示)可知,FIR和IIR的区别仅在于ak是否为零,两者都进行累加乘积计算,这一特点决定了可以采用编程来配置滤波器的类型和阶数,再用状态机控制累计乘积的方式实现滤波器,从而达到阶数、类型都可配置的目的。

由上述分析可知,所有的x(k)、y(k)、ak、bk均要由存储器送向运算单元进行计算。若采用以运算单元为中心的冯诺依曼结构,依次从存储器中取数据的做法,则必然会使速度受到很大影响。因此,我们借用Harvard结构将指令和数据分开编址、存取的做法,将x(k)、y(k)和ak、bk分别存放在不同的存储器中,单独编址,加快数据处理速度。同时,考虑到x(k)、y(k)可能同时对存储器读写,将读、写数据总线分开,进一步提高性能。图2就是采用类Harvard结构设计的滤波器的结构图。

图2中共包含一条指令流,三条数据流。指令流用于配置滤波器的和实现滤波器的读写控制;数据流的D—BUS1用于Y(n)的写回,D—BUS2用于X(n)、Y(n)的读出,Coef—BUS用于滤波器系数的写回和读出。因为系数存储单元和X(k)、Y(k)存储单元都采用双端口SRAM,所以,可同时进行读、写操作。

运算单元采用算术累加器(MAC)实现。MAC由乘法器和加法器组成,其中,乘法器因为速度的限制,通常采用基于查找表(LUT)的并行分布算法(DA)实现,但该算法占用硬件资源较多,对实现的滤波器的阶数有一定限制,在本电路中不宜采用。在综合考虑面积和速度两方面因素后,最终选用Booth乘法器实现。整个电路的硬件结构图如图3所示。

其控制逻辑中的配置寄存器(32bits)设计如表1所示。

需要特别说明的是,在对MEM1和MEM2存放数据时,滤波器系数和X(k)、Y(k)必须是一一对应的,从而使每次读数据时的读地址相同,简化寻址单元的设计。滤波器的运作是由状态机(逻辑单元)控制的,流程如下:

(1)初始化系数存储单元,根据SP算出X(k)、Y(k)在MEM2中的分界地址SP+N和SP+M+N;

(2)从MEM1、MEM2的(SP+j)单元读出数据送MAC计算,MEM2读出的数据写回(SP+j-1)单元,j为0时的数据无效,不写回;当j为M+N时,转步骤(4);

(3)j加1,重复步骤(2);

(4)一次Y(k)计算完成。将当前ADC的输入写回到MEM2的(SP+M+N)单元;

(5)将本次计算所得的Y(k)送SP+M,j复位为0,重复步骤(2)。

3实现与仿真

按照上述设计思想,用Verilog对系统进行RTL描述,代码层次结构如图4所示,其中,F—TOP为顶层wrapper模块,连接MAC、STATEM、SRAM三个子模块。MAC实现图3中虚线所示的Booth乘加器,得到的乘积为32 bits数,然后经过舍入调整(rounding)将其转化为16 bits数;STATEM模块实现上文提到的控制流程;SRAM模块由系数SRAM和数据SRAM(存放X(k)、Y(k))组成,分别对应图3的MEM1、MEM2,为了方便后面的验证,直接调用Xilinx的SRAM单元RAMB4—S8—S8。

代码使用synopsys VCS进行仿真,通过debussy的PLI接口生成fsdb波形文件。在debussy中对波形(图5所示是波形仿真图)进行分析。当前的配置寄存器的值为0x0000018f,为三阶IIR滤波器。READ—EN为读使能信号,低电平有效。STATE—WE—LOC为写使能信号,低电平有效。RADDR—LOC和WADDR—LOC是存储单元的地址,地址范围从0到5,与三阶IIR滤波器对应;当WADDR—LOC为5时,写入的是X(k),下一时钟周期变为2,写入Y(k)(标尺线所对的值0x000a,已经过rounding处理)。XIN—LOC和YIN—LOC是MAC的输入数据。STATE—LOC和YIN—LOC是MAC的输入数据。CUR—STATE为状态机的状态变化,可以看出,与前面的状态含义和状态机实现策略一致。这里,读写地址在整个运算过程中都占用两个时钟周期是为了保证MAC运算的正确完成,当X(k)和计算所得的Y(k)写回时,不涉及MAC运算,因此,只分配一个时钟周期。

为了确保滤波器以及整个控制系统设计的正确性,我们选用Xilinx Spartan2的XC2S50系列做FPGA验证。首先,在synplify中生成网表文件(edf),然后,通过Xilinx ISE生成带延时信息的单元网表文件(v)和线延时文件(sdf),用于在VCS中进行后仿真,最后生成FPGA下载文件(bit)。XC2S50硬件占用情况如表2所示。表2所示是FPGA资源分配表。

该滤波器在光盘伺服控制电路中的应用表明,激 光头的恢复时间、稳态误差等计数参数均满足实际要求。该单元可直接用于伺服芯片的聚焦寻迹模块。

4结束语

文中介绍了一种通用可配置滤波器的设计和实现。通过对该滤波器的配置可实现不同阶数和类型的滤波器,从而加大以数字滤波为基础的伺服控制系统应用的灵活性。

声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • FPGA
  • 可编程
  • PLC
  • verilog
  • μC/OS-III中的高效时钟节拍管理机制

    引言在嵌入式实时操作系统(RTOS)中,任务可通过调用延时函数(比如μC/OS中的OSTimeDly()函数)将自己延时挂起一段时间。任务在延时的过程中会释放C

    11-21
  • VXI总线任意数字信号发生器的设计与实现

       VXI总线是VMEbus eXtensions for Instrumentation 的缩写。VXI主机箱有13个插槽,其中,零槽控制器为系统的管理者。VXI模块根据其本身的性质、特点和所支持的通信规程可以分为寄存器基、消息基、存储器和扩展模块四种类型。每个模块的地址空间有A16、A16/A24和A16/A32三种类型。  VXI总线测试平台是仪器测量领域的前沿技术,可以灵活地组建自动测试...

    11-15
  • 嵌入式软PLC 系统的结构及通信接口

      一.引言  嵌入式系统是一个嵌入到对象体系中的专用的计算机系统,主要应用与各种类型的信号处理与控制.当前在国防.国民经济以及社会生活的各领域都得到了广泛的应

    11-11
  • 高速FPGA PCB的一些基本概念

      如果高速PCB设计能够像连接原理图节点那样简单,以及像在计算机显示器上所看到的那样优美的话,那将是一件多么美好的事情。然而,除非设计师初入PCB设计,或者是

    11-10
  • FPGA设计的三大黄金法则

      引言:不管你是一名逻辑设计师、硬件工程师或系统工程师,甚或拥有所有这些头衔,只要你在任何一种高速和多协议的复杂系统中使用了FPGA,你就很可能需要努力解决好

    11-10
  • FPGA车载网络电气架构

      过去十年来,车载网络架构变得越来越复杂。虽然车载网络协议的数量有所减少,但实际部署的网络数量却有显着增加。这就提出了网络架构的可缩放性问题,并且要求为满足各

    11-10
  • 简化可编程器件上的软硬件协同设计

      采用嵌入式CPU内核的可编程器件为应对各种设计挑战提供了有效途径,而这些挑战仅仅通过软件或硬件的方法可谓举步维艰,或者说解决成本非常高昂。这些器件结合了能再

    11-09
  • 用逻辑设计法设计PLC应用程序的一般步骤

      工业电气控制线路中,有不少都是通过继电器等电气元件来实现,而继电器,交流接触器的触点都只有两种状态即吸合和断开,因此,用“0”和“1”两种取值的逻辑代数设计

    11-09
  • FPGA设计中常用的复位设计方法

      对FPGA设计中常用的复位设计方法进行了分类、分析和比较。针对FPGA在复位过程中存在不可靠复位的现象,提出了提高复位设计可靠性的4种方法,包括清除复位信号

    11-09
  • 牛人的FPGA设计经验分享

      这里我谈谈我的一些经验和大家分享,希望能对IC设计的新手有一定的帮助,能使得他们能少走一些弯路!  在IC工业中有许多不同的领域,IC设计者的特征也会有些不

    11-08
  • 反熔丝FPGA的结构和原理

      1引言  随着计算机和通信的发展,信息传输过程中信息安全的重要性越来越受到人们的重视。在信息传输过程中,人们普遍采用将待传输的信息加密进行传输,然后在收端进

    11-08
  • FPGA电源设计采用并行工程方法合理吗?

      如果设计师可以在开发过程早期就满足基于FPGA的设计,提出的功耗要求和约束条件,那么在系统的最终实现阶段就能形成极具竞争力的优势。然而,根据整个技术文献中这

    11-02
下载排行榜
更多
广告