基于System Generator的数字滤波器设计所用资源优化

首先将上次设计的滤波器文件copy一份进行备份,后面还会有用到的时候,或者之后再改回去都可以。
基于System Generator的数字滤波器(Simulink验证+Block设计+FPGA的仿真验证)
打开System Generator这个模块的Clocking,然后看到之前设置的是20MHz的时钟频率,其实在FPGA器件中,时钟频率是很容易就超过20MHz的,使用更高的时钟频率运行FPGA将允许System Generator使用相同的硬件资源来计算多个中间结果。
在这里插入图片描述
双击打开FDATool的属性编辑器,然后再菜单上面点击Filter Coefficients的按钮
在这里插入图片描述
从图上可以看到滤波器使用了11个对称系数,这至少需要6个乘法器的资源,这个在上次编译后产生的资源信息中使用了6个DSPs就可以看出,DSPs在FPGA中是被用来执行乘法的资源,上次的资源信息结果如下图所示,当前的设计是以20MHz的频率对输入进行采样,如果使用一个是当前频率的6倍频率进行采样,它将可以使用一个乘法器执行所有计算。
在这里插入图片描述
关闭FDATool的属性编辑器,然后在System Generator的界面使用120MHz(6*20MHz)的频率更新当前的采样频率,FPGA clock Period就是8.33ns(1/120MHz), Simulink system period是1/120e6(sec),其他的信息保持不变,需要在编译后观察资源利用的信息。
在这里插入图片描述
然后点击Apply进行应用,再点Generate将设计的模型编译为硬件的描述,在编译时弹出的窗口点击OK继续,等待编译完成后,看出现的资源信息,DSPs已经变成了1即只使用了一个乘法器,和之前用20MHz进行设计的进行对比,资源使用几乎少了一半。
在这里插入图片描述
滤波效果与之前的一致
在这里插入图片描述
点击OK关闭所有信息窗口,接下来开始使用离散资源去实现更高效的硬件设计~
将之前的设计的滤波器文件做了一些更改,最主要的就是将Digital FIR Filter删除,换成了一些离散器件,如下所示,还有一些关键部分没做添加,下图用到的器件都可以在Xilnx Blockset这个库下的相应菜单中找到,讲几个关键的离散部件的在库中的位置,其他部件的就不做多述了。


举例:
Basic Elements -> Addressable Shift Register
Control Logic -> Counter
Memory -> ROM
DSP -> DSP48 Macro 3.0


在这里插入图片描述
离散滤波器的运行方式如下:
1、将通过In端口输入的信号样本延迟后送到移位寄存器中进行存储;
2、需要一个ROM将滤波器系数存起来;
3、需要一个计数器选择数据样本和系数样本进行计算;
4、需要一个乘法器的累加单元进行运算;
5、最终的下采样单元每n个周期就要选择一个输出。


1、双击Counter打开属性编辑器,Counter type选择Count limited,value为:length(xlfda_numerator(‘FDATool’))-1,这部分是使得计数器可以从0计数到10,然后就能有11个系数和数据的地址;Output type选择Unsigned,Number of Bits为4,这样就能够使得二进制地址能够计数到11;Explicit period 输入1/(11*20e6),这部分是确保采样周期是输入数据率的11倍,这样滤波器就能够为每个输入样本都执行11次计算,配置结果如下,然后点击OK保存并关闭。

在这里插入图片描述
2、打开System Generator的设置,仿真周期也要与Counter相对应,否则时钟会产生不合理的周期从而报错。
在这里插入图片描述
3、双击ROM打开属性编辑器,Depth输入length(xlfda_numerator(‘FDATool’)),这部分是为了确保ROM能够存下11个元素;Initial value vector输入xlfda_numerator(‘FDATool’),这部分是为了使用FDATool这个工具生成的滤波系数;其他默认,配置结果如下,点击OK保存并关闭。
在这里插入图片描述
4、双击DSP48 Macro 3.0打开属性编辑器,将Instructions中原本的值改为AB+P和AB,这两个是为了使得如果sel的输入为false,DSP就会进行相乘并累加,如果sel的输入为true,DSP48则只做相乘,配置如下:
在这里插入图片描述
Pipeline Options 下By_Tier,并勾上Tier 3 和Tier 5这部分是为了确保A和B的输入以及乘法运算和累加运输之间使用寄存器,然后点击OK保存并关闭。
在这里插入图片描述
5、其他部件的配置就比较简单了,就不具体表述,直接看对应的图,没说的就是采用默认状态。
Addressable Shift Register
在这里插入图片描述
Constant
在这里插入图片描述
Convert
在这里插入图片描述
Capture Register
在这里插入图片描述
Delay1
在这里插入图片描述
Down Sample
在这里插入图片描述


整个设计的图如下所示,除了使用离散资源的部分有做更改外,就是将部分示波器删除了,使界面显得稍微简洁些,信号源的参数配置和之前的一样。
在这里插入图片描述
配置完成后,点击Run,查看使用System Generator滤波后的频谱,和原始输入对比,输出和之前的数字滤波一致,结果如下:
在这里插入图片描述
然后转成FPGA的硬件设计,点击System Generator中的Generate,跳出的窗口点OK即可,编译完成后查看使用的资源信息,如下图,发现使用的资源比之前几个版本的滤波器都要少,两种优化的设计于此记录完成,在FPGA上的仿真就不再多述,与之前的仿真流程一样运行即可。
在这里插入图片描述


以上设计的文件传网盘了,失效在下方回复。



网盘链接

提取码:rf8n



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值