介绍了一种通用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 结束语
文中介绍了一种通用可配置滤波器的设计和实现。通过对该滤波器的配置可实现不同阶数和类型的滤波器,从而加大以数字滤波为基础的伺服控制系统应用的灵活性。
参考文献
1 唐长文,张 洁,闵 昊.一种新型的高速fir滤波器及其vlsi实现.电子学报,2002(2)
2 金 昕,黄 捷,刘 韬.一种用fpga实现的fir滤波器结构.微电子学,1999(2)
3 刘毓敏.cd、vcd机伺服技术的发展.电声技术,1998(7)
4 n sankarayya,kaushik roy,debashis bhattacharya.algorithms for low power and high speed fir filterrealization using differential coefficients.ieeetransactions on circuit and systems-ii:analog anddigitalprocessing,june 1996
5 ahmet teyfik erdogan,tughrul arslan.on the low-power implementation of fir filtering structures onsingle multiplier dsps.ieee transactions on circuitandsystems-ⅱ:analog and digital processing,march 2002
区块链私有链的优点介绍
小LCD屏幕应用日渐普及,安森美半导体推出两款新的图像信号处理器
【XR806开发板试用】基于FreeRTOS的SoftAp配网实现
360F5手机上架官网 配置曝光 开售时间计日可期
用555制作的声控延时电路
一种用于光盘伺服控制系统的通用滤波器的设计
安捷伦将高性能示波器带入低价位
亚马逊Cable类产品USB Type c单品店铺数据分析
MATLAB机械臂的两种路径规划
一文看懂电动机控制与变频调速原理
保证小米6的资料不外泄?小米6设计图却来了
高速PCB中偏移源的分析与解决方法
关于元器件名称、符号和封装的命名问题
云计算的安全解决方案
L4级自动驾驶出行公司文远知行完成 3.1亿美元B轮融资
微软新专利WP或采用免触控技术
2009年最新电池国家标准批准发布公告
四方维公司明星产品ECAD模型成为元器件的新标配
BIOS名词解释,什么是BIOS,BIOS详细介绍
红米Note7和魅族X8哪个好