分享

FPGA通信的考试论文

 等缘708 2013-01-11

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

(2012-05-28 21:15:12)

CIC滤波器的设计与仿真验证

CIC滤波器是一种极、零点相消的FIR滤波器,只有加法和延时运算,没有一般FIR滤波器所需的大量乘法运算,所以通常工作在DDC(数字下变频)系统中运算量最大的第一级,可以节省资源,降低功耗。

1.CIC滤波器的基本原理

级联积分梳状滤波器(cascade integrator comb filter)是高分解率滤波器的一种非常有效的结构,具有结构简单。规整,需要的存储量小的优点。由于不需要乘法器,而且利用积分环节减少了中间过程的存储量,因此常常用在高速采样和插值比很大的场合。

CIC滤波器一般由Integrator(积分部分)和Comb(梳状部分)两个基本模块组成。

Integrator模块的差分方程为:

        y[n]=y[n-1]+x[n]

转换到Z域后,其传递函数为

        HI(Z)=1/(1-Z-1)

Comb模块的差分方程为

        y[n]=x[n]-x[n-RD]

转换到Z域后,其传递函数为

        HC(z)=1-z-RD

 

      CIC滤波器有2种形式,一种被称为抽取器,另外一种被称为内插器。抽取器是由NIntergrator模块级联(采样频率为fs),再级联NComb模块(采样频率为fs/RD,结构见图1(a)。而内插器的级联方式则与抽取器的级联方式相反,结构见图1(b)

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

1 多级CIC构框图

 




  抽取器Z域的传递函数为

 FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

   内插器的Z域的传递函数为

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

  CIC抽取器的传递函数可以看出,H(z)RDN个零点,N个极点。所有零点都处于2π/RD处,圆心起始于z=1可以看出,每个不同的零点都重复了N次,而H(z)的极点都处于z=1处。由此可以看出,CIC抽取器的极点抵消情况,CIC滤波器相当于N个矩形冲激响应滤波器的级联。

  CIC滤波器的传递函数和图1可以看出,在CIC滤波器中,没有乘法运算,因此CIC滤波器比FIRIIR滤波器更节省资源,电路也更简单。

  2.CIC滤波器的Simulink仿真实现

CIC滤波器分为CIC抽取器和CIC内插器2种类型,但其区别仅仅在于其integratorcomb的级联次序及采样频率的不同。本文将以CIC插值器为例介绍其simulink仿真实现。

 



按照图1(b)CIC内插器结构框图,我们应先设计comb部分,simulink的模型搭建如下图所示:
FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

Comb部分simulink模型


由于我们实现的是8倍插值,所以应当实现5级级联,simulink模型如下;
FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

 comb部分生成subsystem,完成comb部分的模型搭建。下面,我们继续搭建integrator部分的simulink模型。

 首先还是,最基本的integratorsimulink模型如下:

 

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真


其次5级级联的integrator如下图所示:

 

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真


Combintegrator的模块已经搭建完成,为了实现CIC插值滤波器,须以comb在前integrator在后的顺序,实现CIC插值滤波器的功能。其系统模型如下:

 

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

为了验证CIC插值滤波器的功能,我们有必要加入一些simulink自带的信号源与示波器,来验证与完善本系统模型。框图如下:

 

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真


我们设定信号源为离散的正弦信号,其一个周期仅有8个采样点。该正弦信号源的参数设置如下:

 

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真


设置完毕后,本系统即可以开始仿真了。下面点下仿真按键实现仿真,仿真结果如下:
FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

 由波形可以看出,输入信号为锯齿明显的正弦信号,通过傅立叶变换即发现其为基波是正弦波,含有众多高次谐波的信号。通过CIC插值滤波器后,高次谐波被滤除,剩下的即为基波正弦信号。仿真结果证明本系统完全实现了CIC滤波器的功能。

3.CIC插值滤波器通过Dspbuilder生成VHDL代码

Simulink的仿真结果证明了本系统的正确性,下面来通过dspbuilderSignal Compiler生成VHDL代码,具体步骤如下:

1.双击Signal Compiler,生成如下的对话框。

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

2.Family设置为Cyclone II

3.标签选择为Advanced,依次点击Create Project,Synthesis,Fitter。需要注意的是,必须等每一步运行完后,再点下一步。

生成文件为Quartus II的工程文件,在Matlab设计的CIC.mdl同一文件夹下,为cic_dspbuilder文件夹下。至此,dspbuilder转换完成。

4.CIC滤波器的FPGA实现与Modelsim仿真

双击cic.qpf,打开工程文件,将 cic2VHDL_GNIDDHHVE3.vhd文件生成symbol file文件,并新建CIC.bdf文件,搭建CIC滤波器系统,如下图所示:

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真


我们先运用下QuartusII自带的波形仿真软件验证一下CIC滤波器。新建vwf波形仿真文件,设置引脚后,即可仿真。仿真图如下:
FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

   从波形中可以看出,本系统对每一个输入信号实现了8倍插值。

下面进行Modelsim仿真。

Simulink中进行的仿真是属于系统验证性质的,是对.mdl文件的仿真,并没有对生成的VHDL代码进行过仿真。事实上,生成VHDL描述的是RTL级的,是针对具体的硬件结构的,而在MATLABsimulink中的模型仿真是算法级(系统级)的。二者之间有可能存在软件理解上的差异。转换后的VHDL代码实现可能与mdl模型描述的情况不完全相符,这就需要针对生成的RTLVHDL代码进行功能仿真。

   设置步骤如下:

1.Simulink的系统中添加dspbuilder库中的tesbench模块,如下图:

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

2.双击testBench,弹出对话框如下:

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

依次单击Generate HDL,Run Simulink.其他的不用单击。运行完后,会在同样的文件夹下生成tb_cic文件夹,该文件夹中包涵了Modelsim仿真所需的文件。

3.打开Modelsim。首先,需要设置Modelsim的工作目录。单击菜单栏file,单击Change Directory,在弹出的对话框中,选择tb_cic文件夹。单击确定。如下图所示:

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

然后单击菜单栏Tools—TCL---Execute Macro命令,在弹出的对话框中,选择tb_cic.tcl文件,等待几分钟,让Modelsim完成自动编译。

在弹出的wave波形窗口中,对着黑幕右击ZOOM FULL。下面依次将dataindataout设置为模拟量。鼠标右击datain,选择最下面的“Properties”,设置如下图:

 

FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真


dataout进行同样的设置,设置如下图:
FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

 这个时候,可以观测到具体的波形了:
FPGA通信的考试论文----基于dspbuilder的CIC滤波器设计与仿真

 可以看出,如simulink的仿真图如出一辙,同样验证了本系统的正确性。


图片已更新完毕。其实我想说的是,这篇CIC滤波器只是应付考试论文的东西,并没有对CIC滤波器的性能进行详细的分析。这篇论文没什么价值。不过,可以参考本文中simulink中的关于TestBench的联调Modelsim的应用,研究好久才出来,其实也蛮简单的。OVER。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多