前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于System Generator的数字滤波器设计所用资源优化

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

作者头像
狂人V
发布2020-06-29 11:25:14
4450
发布2020-06-29 11:25:14
举报
文章被收录于专栏:电子狂人电子狂人
看完昨天的数字滤波器,不知道你是否注意到在编译后的资源信息和设计的数字滤波器之间存在着一些联系,今天将使用一种过采样的方法对上次设计的数字滤波器进行优化以及使用离散资源重新创建一个新的设计,然后对比之前编译后的资源信息,看减少了多少的资源使用。

~Show Time~

首先将上次设计的滤波器文件copy一份进行备份,后面还会有用到的时候,或者之后再改回去都可以。

打开System Generator这个模块的Clocking,然后看到之前设置的是20MHz的时钟频率,其实在FPGA器件中,时钟频率是很容易就超过20MHz的,使用更高的时钟频率运行FPGA将允许System Generator使用相同的硬件资源来计算多个中间结果。

双击打开FDATool的属性编辑器,然后在菜单上面点击Filter Coefficients的按钮

从图上可以看到滤波器使用了11个对称系数,这至少需要6个乘法器的资源,这个在上次编译后产生的资源信息中使用了6个DSPs就可以看出,DSPs在FPGA中是被用来执行乘法的资源,上次的资源信息结果如下图所示,当前的设计是以20MHz的频率对输入进行采样,如果使用一个是当前频率的6倍频率进行采样,它将可以使用一个乘法器执行所有计算。

关闭FDATool的属性编辑器,然后在SystemGenerator的界面使用120MHz(6*20MHz)的频率更新当前的采样频率,FPGA clock Period就是8.33ns(1/120MHz), Simulink system period是1/120e6(sec),其他的信息保持不变,需要在编译后观察资源利用的信息。

然后点击Apply进行应用,再点Generate将设计的模型编译为硬件的描述,在编译时弹出的窗口点击OK继续,等待编译完成后,看出现的资源信息,DSPs已经变成了1即只使用了一个乘法器,和之前用20MHz进行设计的进行对比,资源使用几乎少了一半。

滤波效果与之前的一致

点击OK关闭所有信息窗口,接下来开始使用离散资源去实现更高效的硬件设计~

将之前的设计的滤波器文件做了一些更改,最主要的就是将Digital FIRFilter删除,换成了一些离散器件,如下所示,还有一些关键部分没做添加,下图用到的器件都可以在XilnxBlockset这个库下的相应菜单中找到,讲几个关键的离散部件的在库中的位置,其他部件的就不做多述了。

举例:

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选择UnsignedNumber of Bits为4,这样就能够使得二进制地址能够计数到11;Explicit period输入1/(11*20e6),这部分是确保采样周期是输入数据率的11倍,这样滤波器就能够为每个输入样本都执行11次计算,配置结果如下,然后点击OK保存并关闭。

2、打开SystemGenerator的设置,仿真周期也要与Counter相对应,否则时钟会产生不合理的周期从而报错。

3、双击ROM打开属性编辑器,Depth输入length(xlfda_numerator('FDATool')),这部分是为了确保ROM能够存下11个元素;Initialvalue vector输入xlfda_numerator('FDATool'),这部分是为了使用FDATool这个工具生成的滤波系数;其他默认,配置结果如下,点击OK保存并关闭。

4、双击DSP48 Macro3.0打开属性编辑器,将Instructions中原本的值改为A*B+P和A*B,这两个是为了使得如果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,查看使用SystemGenerator滤波后的频谱,和原始输入对比,输出和之前的数字滤波一致,结果如下:

然后转成FPGA的硬件设计,点击SystemGenerator中的Generate,跳出的窗口点OK即可,编译完成后查看使用的资源信息,如下图,发现使用的资源比之前几个版本的滤波器都要少,两种优化的设计于此记录完成,在FPGA上的仿真就不再多述,与之前的仿真流程一样运行即可。

本次对滤波器的优化介绍完成,介绍了两种方法,一个是过采样,一个是使用离散资源进行设计,两种方法的设计文件都打包到网盘了,需要参考的回复以下关键字获取。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 电子狂人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档