前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >System Generator系列之多速率系统的使用(上)

System Generator系列之多速率系统的使用(上)

作者头像
狂人V
发布2020-06-29 11:39:55
5620
发布2020-06-29 11:39:55
举报
文章被收录于专栏:电子狂人
前言

玩FPGA的都知道,跨时钟域进行处理设计是很常见的事,而常见的有使用FIFO或者双口RAM实现跨时钟域的数据传输,再进而处理,本次将讲一下在System Generator中使用多速率系统,分成以下三个步骤进行:

第一步:创建时钟域层次结构

第二步:创建异步通道

第三步:指定时钟域

~Show Time~

在开始之前,需要运行一个.m的文件,用于之后对模块进行配置时所需要的变量赋值,该文件可在文末回复关键字获得,运行后三个主要窗口的结果如下:

创建时钟域层次结构

在新建的模型文件中放置两个信号源,分别为1MHz和20MHz,幅度也设置为不同,叠加后进行使用,配置分别如下:

使用Add将信号叠加,然后接入Gateway In,改个名字,模拟成ADC的输入:ADC In,结果如下:

Gateway In配置如下:

也许你已经猜到了,接着就是使用滤波器进行滤波了,不过这次是直接使用FIR的模块进行,不需要再分部件进行设计,FIR滤波器模块所在的位置如下:

把该模块添加三次,将使用一种半带滤波器进行滤波,半带滤波器是一种特殊的FIR滤波器,阶数只能为偶数,长度是奇数,滤波系数除了中间值为0.5外,其余的偶数系数都为0,系数集可以为:【coe,0,coe,...,0.5,....,coe,0】

FIR的模块添加好后,再添加一个FDATool进行该种滤波器的系数生成,FDATool的配置如下:

然后看下此时的滤波系数:

对前两个FIR进行同样的参数配置:

再加一个FDATool对第三个FIR进行设计

第三个FIR滤波器充当一个通道的作用

配置完成后,连接如下:

再将加上控制位数的模块,以及Gateway Out和观察的仪器,添加完成后,并连接如下

其中Mult是用于缩放信号幅度的,因此还需要添加一个幅度控制的常量与信号相乘,并且将连接Mult的Gateway In的配置做下更改

最终连接好的图:

其中System Generator的配置:

点击OK保存并关闭,将运行时间改为:30000/491.52e6,然后RUN,在频谱分析仪中观察结果:

如果观察这个你觉得有点看不懂频率的信息,可以点击右上方的Peak Finder,再将Value全部勾起,就可观察到以下的结果,也可以看出滤波器是想把20MHz滤除。

此时System Generator的环境通过该设计自动传播不同的数据速率,但是在硬件实现,也就是在FPGA中实现的时候,最优的实现是使用和数据频率相同的时钟,但是,在这个环境中,时钟是被抽象化了的,所以以下将演示如何以最有效的方式来创建一个理想的实现方式。

为使用System Generator高效的实现多数据率(或多时钟)的设计,应该捕获各自的层次结构中以相同的数据率(或时钟频率)运行的每个部分,单独的层次则使用FIFO进行链接。

先分析下刚刚的设计,会发现有两个明显的时钟域和一个不太明显的时钟域:

1、增益控制的SCALE输入可以从CPU配置,因此运行的是和CPU相同的时钟频率;

2、输出级的实际增益控制逻辑应该和FIR的输出数据以相同的频率运行,这样可以使得后端的模块更有效的连接到该系统中。

3、不太明显的地方就是滤波器那一部分,在最开始数字滤波器设计的部分,使用了一个由System Generator提供的复杂IP,例如FIR Compiler会自动使用超频的方式提供更高效的硬件,简单再描述下,就是使用100MHz的时钟频率让FIR Compiler进行工作会消耗40个乘法器资源,若使用500MHz的时钟频率则仅消耗8个乘法器资源(8=40*100/500),整个滤波器的链路因此可以使用一个单独的时钟域,第一个FIR Compiler的实例在一个很大的时钟频率下执行,随后的实例将自动利用过采样的优势进行。

根据上述的三种时钟域开始划分不同的时钟层次

选中所有的滤波器部分,包括FDATool,如下所示:

鼠标移到右下角那个省略号,若没显示了,就重新圈一下滤波器部分,会再次出现,移到对应位置后会出现一排选项,点Create Subsystem创建子系统,然后改名为DDC:

将图进行美化了一下摆放的位置(纯属强迫症~)

然后依次将滤波器后端的增益控制部分以及幅度控制的SCALE也创建成子系统,分别命名:Gain Control和Ctrl,弄好后,如下:

完成以上的操作后,每个子系统的逻辑将以不同的时钟频率执行,时钟域因为彼此不同步,所以在子系统之间会采集到错误数据。所以下一步将在不同的时钟域之间创建异步通道,以确保在设计的时候,数据可以在不同的时钟域中准确的传输。

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

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

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

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

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