基于FPGA的CIC滤波器设计.docx
- 文档编号:11894218
- 上传时间:2023-04-08
- 格式:DOCX
- 页数:24
- 大小:1.25MB
基于FPGA的CIC滤波器设计.docx
《基于FPGA的CIC滤波器设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的CIC滤波器设计.docx(24页珍藏版)》请在冰豆网上搜索。
基于FPGA的CIC滤波器设计
摘要
在数字下变频(DDC)中,CIC(级联积分梳状)滤波器骑着重要的作用。
它主要用于采样速率的抽取,同时具有低通滤波的作用。
CIC滤波器的主要特点是,仅利用加法器、减法器和寄存器(无需乘法器),因此占用资源少、实现简单且速度高。
本文在分析CIC滤波器原理的基础上,用Altera公司的系统级(或算法级)设计工具DSPbuilder对CIC滤波器进行了建模、Simulink仿真,并通过Modelsim软件进行RTL级仿真,对CIC滤波器的功能进行了验证。
关键词:
CIC滤波器;FPGA;DSPbuilder;Modelsim
目录
引言3
1CIC抽取器和内插器介绍4
2CIC滤波器理论4
2.1单级CIC滤波器4
2.2多级CIC滤波器5
3Simulink简介6
3.1什么是Simulink6
3.2功能6
4DSPbuilder简介7
5Simulink仿真验证9
5.1系统框图9
5.2参数配置9
5.3各模块设置10
5.4仿真结果:
11
6Dspbuilder模型设计12
6.1系统框图12
6.2DSPbuilder仿真结果16
7ModelSim仿真(Modelsim版本为6.3j)18
7.1操作步骤18
7.2总结21
谢辞21
参考文献22
引言
高分解速率滤波器的一种非常有效的结构就是由Hogenauer引入的“级联积分器梳状”(cascadeintegratorcomb,CIC)滤波器。
CIC滤波器被证明是在告诉抽取或插值系统中非常有效的单元,一种应用就是无线通信,其中以射频或者中频为采样速率的信号需要降低到基带为主。
另一个领域就是数据转换。
为了快速准确地设计CIC滤波器,通常首先是进行算法仿真,然后利用VerilogHDL进行硬件描述。
在算法仿真中,Matlab中所提供的数据类型与实际数字系统所采用的数制存在着很大的差异,因此为了达到完全仿真的目的,本文首先设计出CIC滤波器的原理框图,利用DSPbuilder建模,生成VHDL原代码并用Modelsim进行数据流测试,并将所得结果与Simulink仿真结果进行分析比较,可以快速正确地得到相应滤波器的最终FPGA实现形式。
1CIC抽取器和内插器介绍
多抽样数字信号处理的异种巧妙应用是设计过抽样A/D转换器。
正如其名,在此类转换器中,模拟信号以远高于奈奎斯特率的抽样率进行抽样,得到空间上非常靠近的样本。
因此,两个连续样本的振幅之间差别非常小,允许数字形式中以非常少的位数(通常为1位)来表示它。
接下来将数字信号通过一个因子为M的抽取器将抽样率从MFT降低到FT来减少抽样率。
通过将用来降低其贷款到
的一个抗混叠低通M带数字滤波器与一个因子为M的下抽样器进行级联来设计抽取器。
下抽样器输出的字长决定了过抽样A/D的分辨率,并且由于数字滤波的影响,它比高抽样率数字信号的字长大很多。
过抽样方法越来越多地用于许多实际系统的高分辨率A/D转换器的设计中。
可用于设计抽取器的最简单的低通FIR滤波器一个滑动平均滤波器,传输函数如下
它也被称为递归动求和滤波器或矩形窗滤波器。
基于上式的抽取滤波器为
2CIC滤波器理论
2.1单级CIC滤波器
CIC滤波器是由两个基本的环节组成,如图1所示,分别为基本的递归式的积分器(I)和一个梳状微分器(c)组成。
其中输入数据x(n)的尾款为W1,输出数据y(n)的位宽为W3,计算中间过程数据t1(n)和t2(n)的数据位宽为W2.
从图1中可以看出,两部分的传递函数分别为:
图1CIC滤波器基本结构
则整个系统的总的传递函数为:
(3)
传递函数
具有递归的IIR滤波器的形式,而实际上由于D不等于1,所以可以将
化为:
从上式可以看出,尽管传递函数具有递归形式,但H(z)所表达为FIR滤波器,需要相同位移的数字FIR滤波器,需要D-1个加法器,而是用CIC滤波器实现相同的功能只需要1个加法器和1个减法器。
若I和c之间加采样器,使前级和后级采样比例为R,只要改变R的数制,则可以使系统工作在变采样率的系统中,而不必重新设计该系统,基于这样的特点,CIC滤波器被广泛应用于如语音和数字信号共同传输的变采样率的综合业务中。
为了保证CIC滤波器能够正确的工作在变采样率的系统中,内存存储器数据位宽
和输入数据位宽
不是任意的,而是要满足如式(5)所表示的关系
(5)
2.2多级CIC滤波器
为保证实际的滤波效果,通常使用多级CIC滤波器。
现在以4阶滤波器威力,对多级滤波器的Matlab算法仿真和FPGA的设计实现过程加以研究。
其滤波器的结构形式如图2所示。
此时N=4,取D=2,R=32;输入位宽W1=8,输出数据位宽W3=8;则有式(5)可得内部寄存器W2=8+Nlog2(RD)=8+4log264=32
由于千亿级和后以及的采样率的拨通,故可将数据处理分成两部分:
一部分为数据x(n)通过级联积分器得到相应数据t1(n),其传递函数为:
其时域内对应的表达式为:
t1(n)=x(n)+4t1(n-1)-6t1(n-2)+4t1(n-3)-t1(n-4)(6)
另一部分为通过采样后,t2(n)通过梳状滤波器得到最终的输出数据y(n),该部分传递函数
H2(z)=(1-z-2)4
其时域内对应的表达式为:
y(n)=t2(n)-4t2(n-2)+6t2(n-4)-4t2(n-6)+t2(n-8)(7)
而t1(n)和t2(n)变采样数据抽取满足如下关系
t2(i)=t1[i0+(i-1)R](8)
其中i0为采样的基准时间点;i为采样标号;R为采样率。
3Simulink简介
3.1什么是Simulink
Simulink是MATLAB最重要的组件之一,它提供一个动态系统建模、仿真和综合分析的集成环境。
在该环境中,无需大量书写程序,而只需要通过简单直观的鼠标操作,就可构造出复杂的系统。
Simulink具有适应面广、结构和流程清晰及仿真精细、贴近实际、效率高、灵活等优点,并基于以上优点Simulink已被广泛应用于控制理论和数字信号处理的复杂仿真和设计。
同时有大量的第三方软件和硬件可应用于或被要求应用于Simulink。
3.2功能
Simulink是MATLAB中的一种可视化仿真工具,是一种基于MATLAB的框图设计环境,是实现动态系统建模、仿真和分析的一个软件包,被广泛应用于线性系统、非线性系统、数字控制及数字信号处理的建模和仿真中。
Simulink可以用连续采样时间、离散采样时间或两种混合的采样时间进行建模,它也支持多速率系统,也就是系统中的不同部分具有不同的采样速率。
为了创建动态系统模型,Simulink提供了一个建立模型方块图的图形用户接口(GUI),这个创建过程只需单击和拖动鼠标操作就能完成,它提供了一种更快捷、直接明了的方式,而且用户可以立即看到系统的仿真结果。
Simulink是用于动态系统和嵌入式系统的多领域仿真和基于模型的设计工具。
对各种时变系统,包括通讯、控制、信号处理、视频处理和图像处理系统,Simulink提供了交互式图形化环境和可定制模块库来对其进行设计、仿真、执行和测试。
.
构架在Simulink基础之上的其他产品扩展了Simulink多领域建模功能,也提供了用于设计、执行、验证和确认任务的相应工具。
Simulink与MATLAB紧密集成,可以直接访问MATLAB大量的工具来进行算法研发、仿真的分析和可视化、批处理脚本的创建、建模环境的定制以及信号参数和测试数据的定义。
4DSPbuilder简介
利用EDA技术完成硬件设计的途径有多种,利用QuartusII来完成的,最为典型的设计流程,包括设计项目编辑(如用VHDL)、综合、仿真、适配、编程。
但是对于一些特定的设计项目,这个流程就会显得很不方便,甚至无能为力。
例如涉及算法类(如DSP模块)及模拟信号处理与产生方面的系统设计。
Altera自2002年推出的DSPBuilder则很好地解决了这些问题。
DSPBuilder可以帮助设计者完成基于FPGA的不同类型的应用系统设计。
除了图形化的系统建模外,DSPBuilder还可以自动完成大部分的设计过程和仿真,直至把设计文件下载至FPGA开发板上。
利用Matlab与DSPBuilder进行模块设计也是SOPC技术的一个组成部分。
DSPBuilder是一个系统级(或算法级)设计工具,它架构在多个软件工具之上,并把系统级(算法仿真建模)和RTL级(硬件实现)两个设计领域的设计工具连接起来,都放在了Matlab/Simlink图形设计平台上,而将QuartusII作为底层设计工具置于后台,最大程度地发挥了对种工具的优势。
DSPBuilder依赖于MathWorks公司的数学分析工具Matlab/Simlink,以Simulink的Blockset出现。
可以在Simulink中进行图形化设计和仿真,同时又通过SignalCompiler把Matlab/Simulink的模型设计文件(.mdl)转成相应的硬件描述语言VHDL设计文件(.vhd),以及用于控制综合与编译的tcl脚本。
对于综合以及此后的处理都由QuartusII来完成。
由于在FPGA上设计一个算法模型的复杂性,设计的性能(包括面积、速度、可靠性、设计周期)对于不同的应用目标将有不同的要求,涉及的软件工具也不仅仅是Simulink和QuartusII,DSPBuilder针对不同情况提供了两套设计流程,即自动流程和手动流程。
图9-1是基于Matlab、DSPBuilder、QuartusII等工具完成设计的流程框图。
如图9-1所示,设计流程的第一步是在Matlab/Simulink中进行设计输入。
即在Matlab的Simulink环境中建立一个mdl模型文件,用图形方式调用DSPBuilder和其他Simulink库中的图形模块,构成系统级或算法级设计框图,或称Simulink设计模型。
在第二步,是利用Simulink的图形化仿真、分析功能,分析此设计模型的正确性,完成模型仿真。
在这两步中,与一般的MatlabSimulink建模过程几乎没有什么区别,所不同的是,设计模型库采用DSPBuilder的Simulink库而已,同样也涉及到其他EDA软件。
第三步是DSPBuilder设计实现的关键一步。
由于EDA工具软件(诸如QuartusII、ModelSim)不能直接处理Matlab的.mdl文件,这就需要一个转换过程。
通过SignalCompiler把Simulink的模型文件(后缀为.mdl)转化成通用的硬件描述语言,VHDL文件。
转换获得的HDL文件是基于RTL级的,即可综合的VHDL描述。
此后的步骤是对以上顶层设计产生的VHDL的RTL代码和仿真文件进行综合、编译适配以及仿真。
为了针对不同用户的设计目的和设计要求,DSPBuilder提供了两种不同的设计流程,主要可以分为自动流程和手动流程。
如果采用自动流程,几乎可以忽略硬件的具体实现过程,选择让DSPBuilder自动调用QuartusII等EDA软件,完成综合(Synthesis)、网表(ATOMNetlist)生成和QuartusII适配,直至在Matlab中完成FPGA的配置下载过程。
但是,如果希望使用其它第3方的VHDL综合器和仿真器(除Synplify、LeonardoSpectrum和QuartusII综合器及ModelSim外),或是希望完成特定的适配设置,如逻辑锁定、时序驱动编译、ESB特定功能应用等,可以选用手动流程设计。
在此流程中,设计者可以灵活地指定综合、适配条件;手动地调用VHDL综合器进行综合,调用QuartusII进行适配,调用ModelSim或者QuartusII进行仿真,最后用QuartusII产生相应的编程文件用于FPGA的配置。
5Simulink仿真验证
5.1系统框图
本设计为5阶8倍率CIC内插滤波器,通过Simulink建模并设置参数进行系统仿真。
图4.1-1系统框图
5.2参数配置
Configuration设置
图4.1-1仿真设置
5.3各模块设置
SineWave模块(产生幅度为1、频率为0.125hz、每周期样本数为10的正弦信号):
Amplitude
1
Bias
0
Samplesperperiod
10
Numberofoffsetsamples
0
Sampletime
8
Interpretvectorparametersas1-D
On
Fcn1模块(放大输入信号并取整):
Expression:
floor(2^15*u)
Sampletime:
-1
UnitDelay模块:
Delayunits
Samples
Delay(samples)
1
Specifydifferentinitialconditionsforeachchannel
off
Specifydifferentinitialconditionswithinachannel
off
Initialconditions
0
Resetport
None
Sum(梳状滤波器中的):
Listofsign:
-+
Sampletime:
-1
Sum(积分器中的):
Listofsign:
++
Sampletime:
-1
Upsample模块:
Upsamplefactor:
8(此处设置极为重要,决定了滤波器实现8倍率采样率转换)
Sampleoffset:
0
Initialcondition:
0
Frame-basedmode:
Maintaininputframerate.
5.4仿真结果:
Scope显示结果:
观察仿真结果,达到了设计要求,仿真成功。
6Dspbuilder模型设计
6.1系统框图
其中,
Combsection(梳状滤波器)子模块模型为:
Comb子系统:
IntergratorSection(积分器)子系统内容为:
Int子系统:
各模块参数设置:
(此处只列出部分模块参数,其余同Simulink仿真设置。
)
SineWave模块(产生幅度为1、频率为12.5hz、每周期样本数为10的正弦信号):
Amplitude
1
Bias
0
Samplesperperiod
10
Numberofoffsetsamples
0
Sampletime
8e-6
Interpretvectorparametersas1-D
On
Fcn1模块(放大输入信号并取整):
Expression:
floor(2^15*u)
Sampletime:
-1
Clock模块(设置1Mhz系统时钟频率):
Real-WorldClockPeriod:
1
PeriodUint:
us
SimulinkSampleTime:
1e-6
Resetname:
aclr
UnitDelay模块:
Delayunits
Samples
Delay(samples)
8e-6
Specifydifferentinitialconditionsforeachchannel
off
Specifydifferentinitialconditionswithinachannel
off
Initialconditions
0
Resetport
None
Datain模块:
BusType:
SignedInteger
[numberofbits].[]:
16
Dataout模块:
BusType:
SignedInteger
numberofbits].[]:
28
Upsample模块:
UpSamplingRate:
8(上采样率为8)
Comb子系统中:
ParallelAdderSubtractor模块:
Numberofinput:
2
Add(+)Sub(-):
-
EnablePipeline:
On
Delay模块:
NumberofPipelineStages:
1
ClockPhaseSelection:
10000000(每八个周期一次相位输出)
UseEnablePort:
On
UseSynchronousClearPort:
On
IntergratorSection子系统中:
AltBus模块
BusType:
SignedInteger
[numberofbits].[]:
28
ParallelAdderSubtractor模块:
Numberofinput:
2
Add(+)Sub(-):
+
EnablePipeline:
On
Delay模块:
NumberofPipelineStages:
1
ClockPhaseSelection:
1(每1个周期一次相位输出)
UseEnablePort:
On
UseSynchronousClearPort:
On
Configuration设置
6.2DSPbuilder仿真结果
(上面的是输出波形,下面的是输入波形)
输入信号频谱:
输出信号频谱:
观察仿真结果,达到了设计要求,仿真成功。
7ModelSim仿真(Modelsim版本为6.3j)
7.1操作步骤
1)在DSPbuilder设计框图中添加Testbench模块,双击打开,弹出TestbenchGenerator窗口;
2)选中Advanced选项卡;
3)点击GernerateHDL,系统会自动建立以tb_CIC命名的Quartus工程并生成VHDL代码;
4)打开Modelsim,指定目录到tb_CIC文件夹,在Modelsim窗口中,点击tool->TCL->Exeute->Macro,选中tb_CIC文件夹下的tb_CIC.tcl文件,Modelsim会自动执行仿真,随后就自动打开WAVE窗口,显示仿真结果:
5)此时图中显示的仿真波形与Simulink中的仿真结果完全没有可比性。
单击wave窗口工具栏上的
显示全部波形,在此可以把wave窗口中的/tb-cic/dut/datain信号改成类似模拟信号的显示格式。
右击/tb-cic/dut/datain信号,在菜单中选择Properties打开WaveProerties对话框,。
在View选项卡中,修改一下几项Format选择Analog;Height为100;AnalogDisplay中Max为50000,Min为-50000。
同样的,将tb-cic/dut/dataout的WaveProerties对话框中的参数设置为:
Format选择Analog;Height为100;AnalogDisplay中Max为1.5e+008,Min为-1.5e+008。
设置好后,显示波形如下图:
6)仿真波形符合要求,VHDL模块实现了8倍内插采样率变换。
7.2总结
本次课设基本实现了使用Simulink、DSPbuilder、modelsim仿真CIC内插滤波器的功能,但仍有许多瑕疵,部分原因是由于知识面窄,通信理论基础不扎实,模型设计过于简单,导致所设计的CIC滤波器的实用价值不高;另一部分原因也是因为课程内容过于浅显,无法对通信系统作深入研究。
虽然功能不那么尽人意,但是在本次课设中学习到了许多CIC和FPGA设计的相关知识和原理,对EDA工具的使用进一步熟悉了,通过设计建模也发现了自己许多习惯上的错误并改正了,总的来说还是受益匪浅。
谢辞
在论文即将完成之际,我首先衷心感谢我的导师刘争红老师。
刘老师以其严谨的治学态度、广博的知识、扎实的学术功底和敏锐的学术洞察力深深地影响着我。
他深厚的理论功底和丰富的实践经验对我课题的完成起到了至关重要的作用,同时对我今后从事技术开发工作来说,这也是一笔难得的财富。
在此,特向刘老师致以深深的敬意和由衷的感谢。
永远感谢父母在我二十年的寒窗生涯中孜孜不倦的教诲和鼓励,使我有了不断进取并完成学业的精神动力。
无论什么时候,他们都是我最坚强的后盾。
向所有关心和支持我的人表示衷心地感谢!
参考文献
[1]丁亦农.Simulink与信号处理.北京:
北京航空航天大学出版社,2010.8
[2]潘松,黄继业.EDA技术与VHDL.北京:
清华大学出版社,2007.1
[3]邵玉斌.Matlab/Simulink通信系统建模与仿真实习分析.北京:
清华大学出版社,2008.6
[4]U.Meyer-Baese.数字信号处理的FPGA实现(刘凌译).北京:
清华大学出版社,2011.3
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA CIC 滤波器 设计