如何利用基于模型的设计方法,借助 AMD 的 Vitis Model Composer 工具来创建一个包含 1024 个点的快速傅里叶变换(FFT)
扫描二维码
随时随地手机看文章
在之前的文章中,我们已经了解到如何在 AMD Versal AIE-ML 架构上创建一个 FFT 应用程序,而无需进行任何 AIE-ML 内核编码,只需使用 AMD DSP 库即可实现。然后,我们还看到了如何利用 Vitis 功能仿真在 MATLAB 环境中模拟我们的 AIE-ML 图形。
AMD 还提供了一款名为“Vitis™ 模型编排器”(VMC)的工具,它将人工智能引擎的编码需求降低到了零(无需进行图形编码)。
AMD 的 Vitis 模型编译器是一款基于模型的设计工具,它能够在 Simulink® 环境中实现快速的设计探索,并通过自动代码生成加快在 AMD 设备上的产品开发进程。
所有用于人工智能引擎的数字信号处理库模块都包含在 Simulink 软件中的 AMD 工具箱中。
Vitis Model Composer 不仅能避免图形(以及在使用提供的模块时的内核)中的任何编码错误,而且还提供了一种快速配置 DSP 库的有效方法,使其能够以正确的配置进行设置。
VMC 可以通过 Vitis 统一安装程序进行安装。
Vitis Model Composer 需要从 AMD 购买附加许可证,同时还需要获得 MATLAB™ 和 Simulink® 的许可证。在进行数字信号处理设计时,我强烈建议您同时拥有 MATLAB™ 数字信号处理系统工具箱。
如果您只是想对这款工具进行评估,您可以从 AMD 产品授权网站上获取免费的评估许可证。
创建 Vitis 模型编译器设计
在安装了 Vitis 模型编译器(VMC)作为 Vitis 工具的一部分,并且已设置好 VMC、MATLAB™ 和 Simulink® 的许可证之后,要启动 VMC,我们只需设置好 Vitis 工具、MATLAB™,然后调用 model_composer 即可。
这将启动带有 Vitis Model Composer 插件的 MATLAB™ 系统。
由于 VMC 可以作为 Simulink 环境的一部分使用,所以第一步是启动 Simulink 系统。
我们可以从一个空白模型开始。
如果您打开“库浏览器”,您应该能看到“AMD 工具箱”这一选项,其中包含了针对 AI 引擎或可编程逻辑(硬件描述语言或硬件描述语言高级版)的模块。
我总是首先添加的第一个模块是“Vitis Model Composer Hub”模块。每个 Model Composer 模型都需要一个 Model Composer Hub 来配置编译、模拟以及生成输出。在这个模块中,例如,您可以定义您要针对的设备或板卡,因此在使用 AI 引擎时,它会确定您所使用的变体或架构(AIE、AIE-ML 或 AIE-MLv2)。您可以在 AMD 工具箱的“实用工具 > 代码生成”选项下找到“Vitis Model Composer Hub”模块。
我们可以将该模块拖拽至模型中,然后双击它来进行配置。我只选择了目标设备。我正在使用 xcve2302-sfva784-1LP-e-S 这个设备,它位于 Trenz TE0950 上,与我之前的教程中的设备相同。
然后我们可以开始进行设计了。我们想要实现的是一个简单的 1024 点快速傅里叶变换。正如在上一篇文章中所述,我们可以使用 AMD DSP 库来完成这项任务,因为它是集成在 VMC 中的,作为 AMD 工具箱的一部分。在“AI Engine”菜单下,我们可以找到“DSP”子菜单中的“缓冲输入/输出”部分,那里有用于 AI 引擎的 FFT 块。
我们可以将 FFT 块拖放到模型中,并双击它来进行配置。为了与之前的教程中的使用场景类似,我只配置了 FFT 的大小(并且将输入、输出和旋转因子的数据类型保持为 cint16),其余所有参数则保持默认值。
然后为了模拟我们的快速傅里叶变换模块,我们需要一个输入信号。为此,我使用了来自 MATLAB DSP 系统工具箱的正弦波,这样它就能生成离散的输入信号。我将两个这样的信号相加,以便得到与上一个项目中相同的双音信号。
对于第一个设置,我将振幅设为 6,输出频率设为 150MHz,输出设为复数形式,采样频率设为 600MHz,每帧的采样次数设为 1024。我还将计算方法设置为表格查找,因为当输出数据为定点数时(我将进行这样的设置)这是必需的。
在“数据类型”选项卡中,我将输出设置为 16 位定点数。
然后我将这个块复制并粘贴,以创建我们输入信号的另一个音调部分。我只是将振幅调整为 4,将频率调整为 50MHz。
然后,我只需添加一个“添加”模块,以添加音频并将其传送给 AI 引擎的 FFT 模块。
然后,为了验证快速傅里叶变换(FFT)的输出结果,我们需要绘制其输出图。为此,我使用了 MATLAB DSP 系统工具箱中的数组绘图块。我只想绘制绝对值,以便仅查看信号的频率成分,所以我还添加了一个“abs”块。由于 abs 块在处理复数数据时只接受双精度数据类型,所以我还添加了一个将 FFT 块的输出转换为双精度数据类型的块。
这就是我完整的设计方案的样子。
我们可以进行模拟。由于我们已将采样时间设置为 1/600e6,所以可能需要在经过几组包含 1024 个样本的数据窗口后停止模拟。我以 2 为例进行说明(2*1024/600e6)
我们可以看到,正如我们所预期的那样,我们的信号中有两个主要的频率成分。
将快速傅里叶变换(FFT)的结果与 MATLAB 实现进行对比
来自“AI 引擎”块的快速傅里叶变换似乎运行正常,但最好还是验证一下结果,将其与 MATLAB 中快速傅里叶变换的实现进行对比。为此,我只需复制该分支,并将“AI 引擎”的快速傅里叶变换替换为 MATLAB DSP 系统工具箱中的快速傅里叶变换。
我对快速傅里叶变换(FFT)模块所做的唯一修改是将输出数据类型更改为 16 位定点数。
运行该模拟程序后,我们发现 MATLAB 中的快速傅里叶变换(FFT)结果与在 AIE-ML 上实现的 FFT 结果非常相似,因此我们在 AIE-ML 中的实现似乎满足了我们的需求。
总结
在这个项目中,我们看到了如何利用 Vitis Model Composer(这是 MATLAB 内置的一个工具箱)采用基于模型的方法来创建 AIE-ML 设计。
本文编译自hackster.io





