1.引言
1.1软件无线电时代的到来
软件无线电(Software Defined Radio,SDR)起源于20世纪80年代,其基本思想是通过软件来实现无线电的部分功能。
如今的Wi-Fi,蓝牙,4G,5G等标准中的精密且复杂的系统都离不开软件的控制。在很多情况下,核心处理功能也在软件中实现。如今6G的设计与开发也在进行中,这将是第一代和第一套在射频前端几乎都是软件无线电的标准。因此,现代通信工程师需要的是能增强SDR能力的平台,为当今无线电标准部署更好的解决方案并开发新的无线电系统。
1.2 SDR与Zynq UltraScale+ RFSoC
本书的重点是使用Zynq UltraScale+ RFSoC(以下简称“RFSoC“)实现SDR系统。该设备专门针对射频(Radio Frequency,RF)引用的片上系统(System on Chip,SoC)。RFSoC是AMD开发的第三款主要Zynq SoC。第一款和第二款分别是Zynq-7000 SoC和Zynq UltraScale+ Multi-Processor SoC(MPSoC)。这三种SoC都由用于运行软件系统组件的处理系统(Processing System,PS),与等效于现场可编程门阵列(Field Programmable Gate Array,FPGA)的可编程逻辑(Programmable Logic)以及两部分之间的高速互联组成。
RFSoC设备的架构如图1.1所示。图中所标注的功能在设备上的专用部分实现,而不是通过可编程逻辑实现。这使得在性能上获得提升的同时仍可提供可编程性。
这些功能可概括如下:
1.射频数据转换(RF Data Converter,RFDC)模块
该模块集成了模数转换器(Analogue to Digital Converter,ADC)和数模转换器(Digital to Analogue Converter,DAC),可以以每秒多个千兆的采样率工作。同时该模块还包括可编程数字上变频器(Digital Upconverter,DUC)和数字下变频器(Digital Downconverter,DDC)以实现基带与调制频率之间的相互转换。
2.软决策前纠错(Soft Decision Forward Error Correction,SD-FEC)模块
无线通信方案中的前向纠错编码(Forward Error Correction,FEC)可以减轻无线电信道中引入的错误。RFSoC采用了SD-FEC模块,用于在所选的移动蜂窝标准中实现编码和解码。
3.千兆收发器(Gigabit Transceivers ,GTY Transceivers)
在许多情况下,RFSoC需要以有线形式与无线电系统中的其他设备连接。例如在无线蜂窝基础设施中,RFSoC可用于实现无线电线段,但是需要连接核心网络的高速链路,这些往往以有线或光学形式实现。RFSoC上的GTY收发器模块可实现多种不同标准的高速串行接口。
除此以外,PL还提供可编程硬件资源用于实现自定义无线电架构,可从软件更改硬件设计的参数,甚至动态重新编程PL设计的部分。
PS架构包括一个四核应用程序处理单元,一个双核实时处理单元以及平台管理和安全的功能。还有本地存储器、互连和外围接口。这些特征可以组合使用以实现SDR的软件部分,如操作系统、硬件元件的控制与协调以及基于软件的算法。
1.3 设计方法
SDR可以使用各种硬件技术和软件方法来实现。RFSoC平台为SDR提供了强大的硬件平台,其PS是实现软件功能的主要部分。此书中介绍的SDR“软件“部分的基础是PYNQ框架,它通过将SoC硬件设计、Linux和Python元素与Jupyter应用程序开发环境相结合,以实现AMD自适应计算平台上的软硬件集成与生产力。
RFSoC PYNQ是PYNQ的扩展,它包括对RFDC等强化功能的设计支持,能够轻松控制硬件块的参数和操作。本书提供了一些实用设计资源的简短摘要,这些资源的用户界面是通过Jupyter Notebook实现的。
A Notebook Set A——Jupyter Notebook和PYNQ简介
本书中的RFSoC实践练习使用Jupyter进行。 Jupyter Notebook是交互式文档,包括可执行代码、文档和可视化结果。本书的Notebook Set包括两种类型的Jupyter Notebook。第一种类型可以在计算机或RFSoC平台上执行;第二种类型使用了RFSoC的硬件功能,必须在RFSoC平台上执行。
本节首先介绍Jupyter项目和Jupyter Notebook的关键组件,然后展示关键的绘图和科学计算库,方便Jupyter进行可视化和分析。
A.1 Jupyter 入门
Jupyter有两个交互式图形环境。分别是经典的Jupyter Notebook,和最近的JupyterLab——一个基于浏览器的集成开发环境(Integrated Development Environment,IDE)。JupyterLab在一个环境中组合了多个工具,包括文本编辑器、命令终端等、工作区查看器。设置JupyterLab后,可以看到如图1.2所示的窗口。
图1.2所示窗口展示了JupyterLab界面的三个主要区域——菜单栏、侧边栏和主工作区。菜单栏显示了与文件控制和操作相关的设置与命令;侧边栏提供了包括文件浏览器、工作区管理器、Notebook导航工具和Jupyter扩展管理器等工具;主工作区包含交互式Notebook、启动器窗口。
A.2 可视化和分析
JupyterLab可以利用几个Python库来绘制、评估和操作数据。以下是对这些库的介绍:
- Numpy库用于高级数学函数和多维矩阵运算。
- Pandas库提供数据结构和数值表,用于数据操作和分析。
- SciPy库由科学和工程学科中常见的科学计算任务模块组成,包括积分、插值、抽取、空间处理、优化、傅立叶分析等。
- MatplotLib库用于生成绘图。
- Plotly库用于创建图形和绘图,默认情况下生成的绘图是交互式的。
- Ipywidgets库用于创建图形界面。
A.3 PYNQ 框架和 RFSoC-PYNQ
Python Productivity on Zynq,即为PYNQ,是AMD的一个开源项目,该项目提供一个简化AMD SoC平台上硬件和软件开发的框架。PYNQ框架如图1.3所示。
A.4 覆盖层与硬件接口
覆盖层是在PL上实现的可编程硬件配置。该设计包含产生正弦波的数字控制振荡器(Numerically Controlled Oscillator,NCO)。正弦波发送到数据搬移IP核,以便数据可以从FPGA逻辑结构传输到RFSoC的PS。用户可从Jupyter控制NCO,允许修改正弦波频率和振幅,该系统的功能框图如图1.4所示。