跳转到主要内容

不用写一行 HDL!AMD 官方教你用 MATLAB + Simulink 搭建 FPGA 软件无线电

judy 提交于

作者:OpenFPGA

使用 AMD Vitis™ 模型编辑器创建数字 AM 调制和解调方案

Image
使用 AMD Vitis™ 模型编辑器创建数字 AM 调制和解调方案

介绍

FPGA 的优势应用领域之一是无线通信和软件定义无线电 (SDR)。无线通信和 SDR 可能很复杂,但 AMD Versal™ RF 系列自适应 SoC 产品家族中的各种器件都能满足这些需求。

但是,我们可以在大多数 AMD 设备上创建简单的 SDR,因此在这个项目中,将创建一个简单的 SDR,它使用幅度调制来发送和接收数据。

为此,本项目演示一下如何使用 AMD Vitis™ 模型编辑器轻松开发这样的解决方案。

Vitis Model Composer是由 AMD 开发的基于模型的设计环境,支持使用 MathWorks MATLAB® 和 Simulink® 快速开发和验证 FPGA 加速系统。它允许设计人员在高抽象级别上创建、仿真和优化硬件架构,然后自动生成可综合的 RTL,而无需手动编写 HDL 代码。

调幅调制。

幅度调制 (Amplitude Modulation,AM) 或许是生成和解调最简单的调制方式,尽管它在功率和带宽方面效率较低。AM 仍然广泛应用于从无线电到航空通信等诸多领域。作为最简单的调制方式,它为理解更复杂的调制方案提供了一个很好的起点。

在这个项目中,将创建一个能够调制和解调单个音调或数字传输数据的解决方案。

AM发射机

AM发射机的原理非常简单。需要一个产生载波频率的本地振荡器。由于信息被调制到载波幅度上,需要将生成的载波与待发射的信息相乘。

还需要为调制信号提供直流偏移。所有这些功能都可以使用 Simulink 中 AMD 工具箱内的模块来实现。

为了生成载波,将使用配置为生成 20 MHz 载波的正弦波模块。

Image
20 MHz 载波的正弦波模块

待编码的数据首先会经过一个网关,网关会将 MATLAB 类型转换为 AMD Toolbox 所需的定点类型。

经过网关后,会使用一个恒定乘数,该乘数用于控制调制指数。该指数的取值范围为 0 到 1.0,在本应用中,将其设置为 1.0。

常数乘法器的输出随后与直流偏移量相加,该偏移量确保在输入数据为零时载波仍然存在。使用 AddSub 模块来实现这一点,该模块将输入数据和直流偏移量相加。

然后,通过将载波与 AddSub 运算的结果相乘来创建调制输出。

该设计旨在以 100 MHz 的时钟频率运行。

正弦波发生器的设置如下所示。

Image
正弦波发生器的设置

该模块是在子系统中创建的,需要在 FPGA 中实现我们希望实现的设计也是在子系统中实现的。

顶层设计

为了测试 AM 调制方案,需要在设计的顶层实现几个功能。

第一个是 Vitis 模型组合器中心,它可以用来选择目标设备或开发板,以及验证硬件和生成 RTL。

Image
第一个是 Vitis 模型组合器中心,它可以用来选择目标设备或开发板,以及验证硬件和生成 RTL
Image
第一个是 Vitis 模型组合器中心,它可以用来选择目标设备或开发板,以及验证硬件和生成 RTL

RTL 设置

在设计中加入 VMC Hub 之后,下一步是加入正弦波发生器和随机数发生器。它们将作为待调制数据的来源。

为了能够在不同的信号源之间切换,使用一个可以通过拨动开关控制的开关。

然后,在输入和输出端添加示波器,以观察时域信号,并使用 FFT 观察调制输出,结果在频谱中看起来是正确的。

Image
频谱

正弦波和随机数据均以 500 KHz 的频率生成,开关设置为使用正弦波作为数据源。

在以下输出频谱中,将看到正负频率。在此频谱中,可以看到 20 MHz 的载波,以及 +/- 500 kHz 的上边带和下边带。当使用单根探针时,这些边带是预期会出现的。

Image
正负频率

下面可以看到时域图,图中显示了经典的包络线。

Image
包络线

当切换开关设置为编码随机数据时,可以看到 20 MHz 的载波,由于随机数据包含多个频率,因此上边带和下边带不太明显,能量分散在整个频谱上。

Image
20 MHz 的载波

可以在时域中观察到 AM 编码信号。

Image
AM 编码信号

包络检波器

解调调幅调制信号有几种不同的方法。最简单的方法(也是我们将要实现的方法)是包络检波器。

为了将其生成为 HDL 模块,需要创建一个子系统,并将我们的设计添加到其中。将向子系统的输出端添加频谱分析仪和示波器。

Image
频谱分析仪和示波器

该方法很简单。首先,需要取输入射频波形的绝对值。下一步是进行两级滤波。第一级滤波还将输入采样率从 100 MHz 降低到 4 MHz。第二级滤波则采用一个通带为 500 kHz、阻带为 600 kHz 的窄带滤波器。

Image
窄带滤波器

为了设计滤波器,可以使用 FDA 工具,因为希望在工作区中存储几个不同的滤波器系数。

第一个滤波器以 100 MHz 的采样率进行采样,设计通带为 500 Khz,阻带起始频率为 2 MHz。

Image
第一个滤波器以 100 MHz 的采样率进行采样

第二个滤波器的工作频率为 4 MHz,截止频率更窄。

Image
第二个滤波器的工作频率为 4 MHz,截止频率更窄

使用 500 kHz 正弦波进行测试,可以很好地展示 500 kHz 正弦波的 FFT 波形。由于解调器没有进行直流消除,可以看到 0 MHz 处存在较大的直流分量。

Image
直流分量

下面还可以看到时域输出。

Image
时域输出

当随机数据通过解调器运行时,能够在时域中看到传输的信息。

在基带频域中,可以看到直流分量和信号在 500 khz范围内的分布。

Image
在基带频域中,可以看到直流分量和信号在 500 khz范围内的分布

时域响应。

Image
时域响应

生成硬件

在按预期演示了调制和解调功能之后,下一步是生成模块以进行硬件在环测试。

本项目选择使用 AMD Kintex™ 7 FPGA KC705 评估套件。

Image
AMD Kintex™ 7 FPGA KC705 评估套件

首先,打开了 VMC Hub 并选择 AM Mod 子系统,然后在导出类型中选择了协同仿真 (JTAG)。

Image
协同仿真

这将为目标板构建项目和比特流。

Image
构建项目和比特流

完成后,将在库中创建一个新组件。保存库,然后将新符号拖放到主图中。

Image
将新符号拖放到主图中

将其拖到主图中后,就可以连接输入和输出了。将输入连接到与模型相同的接口,并将输出连接到另一个频谱分析仪。

Image
频谱分析仪

这次运行模拟需要更长时间,但我们可以看到相同的 FFT 频谱。

Image
FFT 频谱

可以通过打开 AMD Vivado™ 设计套件项目来查看实现资源。对于调制器,可以看到它大约需要 699 个查找表 (LUT) 和 844 个触发器 (FF)。

Image
打开 AMD Vivado™ 设计套件项目来查看实现资源

解调器(以相同方式实现时)需要 623 个查找表、970 个触发器和 12 个数字信号处理器。

Image
解调器需要 623 个查找表、970 个触发器和 12 个数字信号处理器
Image
解调器需要 623 个查找表、970 个触发器和 12 个数字信号处理器

下面图表显示了随机数据和 500 kHz 正弦信号的解调结果。

Image
随机数据和 500 kHz 正弦信号的解调结果
Image
随机数据和 500 kHz 正弦信号的解调结果

包起来

该项目证明,利用 AMD Vitis 模型编辑器中的 AMD 工具箱,可以创建一个简单的 AM 调制/解调方案。

这也是了解调制方案以及如何创建简单的软件定义无线电的良好开端。

项目/参考地址

https://www.hackster.io/adam-taylor/am-modulation-with-amd-vitis-model-composer-0ebc1d