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

前言

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

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

第二步:创建异步通道

第三步:指定时钟域

 

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

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

创建时钟域层次结构

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

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

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

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

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

Gateway In配置如下:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

配置完成后,连接如下:

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

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

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

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

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

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

最终连接好的图:

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

其中System Generator的配置:

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

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

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

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

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

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

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

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

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

  • 增益控制的SCALE输入可以从CPU配置,因此运行的是和CPU相同的时钟频率;
  • 输出级的实际增益控制逻辑应该和FIR的输出数据以相同的频率运行,这样可以使得后端的模块更有效的连接到该系统中。
  • 不太明显的地方就是滤波器那一部分,在最开始数字滤波器设计的部分,使用了一个由System Generator提供的复杂IP,例如FIR Compiler会自动使用超频的方式提供更高效的硬件,简单再描述下,就是使用100MHz的时钟频率让FIR Compiler进行工作会消耗40个乘法器资源,若使用500MHz的时钟频率则仅消耗8个乘法器资源(8=40*100/500),整个滤波器的链路因此可以使用一个单独的时钟域,第一个FIR Compiler的实例在一个很大的时钟频率下执行,随后的实例将自动利用过采样的优势进行。

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

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

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

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

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

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

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

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

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

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



使用到的文件获取链接:

链接

提取码:vq4e