软件无线电从概念到部署

利用安富利 PicoZed SDR 的自动工作流程缩短开发时间并实现差异化设计。

作者:Robin Getz
Analog Devices 公司全球联盟部门工程设计总监
Robin.Getz@analog.com
Luc Langlois
安富利电子产品市场营销部全球解决方案小组总监
Luc.Langlois@avnet.com

无线通信将在多种新兴技术中扮演重要角色,例如自动驾驶汽车车队,以及连接数百万工业传感器的异构网络。此类应用环境需要用到即时调整调制方案、频带和系统协议的可重配置软件无线电 (SDR)。通过在全面验证的系统级模块 (SOM) 中紧密集成关键 RF 信号路径和高速可编程逻辑,安富利的 PicoZed SDR 能够在一副扑克牌大小的设备中提供灵活的软件无线电技术,实现 70MHz-6.0GHz 频率范围内的捷变频、宽频带 2x2 接收和发送路径,以满足不同固定和移动 SDR 应用的需求。

PicoZed SDR 将 Analog Devices AD9361 集成式 RF Agile TransceiverTM 与赛灵思 Z-7035 Zynq®-7000 All Programmable SoC 相结合。[1]这种架构理想适用于复杂应用的软硬件混合实施方案,例如数字接收器,其中的数字前端(物理层)在可编程逻辑中实现,而上面的协议层则运行于双 ARM® CortexTM-A9 处理器的软件中。让我们看一看整个开发过程中 PicoZedSDR 的软件相关特性。

利用PICOZED SDR 环内无线
快速进行概念验证

要想充分发挥 PicoZed SDR 的潜力,需要采用稳健可靠的多域仿真环境来对从 RF 模拟电子到基带数字算法的整个信号链进行建模。这是 MathWorks 公司基于模型的设计方法所固有的价值,系统模型居于开发流程的中间环节,整个过程涵盖设计的需求定义、代码生成、实现和测试等。安富利携手 Analog Devices 和 MathWorks 合作,从最初的原型设计阶段开始,在设计过程从各个方面为 PicoZed SDR 开发支持架构。[2]

面对缩短开发周期的持续压力,工程师需要探寻合适的解决方案以便在可靠的硬件上进行快速、精确的概念验证,从而演示产品在“真实世界”条件下的可行性。MathWorks 使用名为 System objectsTM的 MATLAB® 软件架构为基于赛灵思 Zynq 的无线电创建程序支持包,该支持包能够将作为 RF 前端的 PicoZed SDR 用来构建开箱即用的 SDR 设计原型。System objects 软件架构专门针对用于处理大数据流的迭代计算而优化,能够在环内无线配置中自动实现 PicoZed SDR 与 MATLAB 和 Simulink® 环境之间的流数据(图 1)。类似于以对象为中心的编程概念,System objects 也是通过构造函数调用类名称的方式来创建,可采用 MATLAB 代码或者用作Simulink 模块。System object 实例化后,可调用各种方法在仿真过程中通过 System object发送流数据。MathWorks 提供的针对赛灵思Zynq 无线电的 Communications System ToolboxTM支持包,含有针对 PicoZed SDR 接收器和发送器预定义的类别,每个类别包含针对 AD9361 的可调节配置属性,例如 RF 中心频率和采样速率。图 2 中的代码实例可用来创建一个 PicoZed SDR 接收器System object,以接收单通道上的数据,AD9361 本地振荡器频率设定为 2.5GHz,基带采样速率为 100Msps。使用日志保存获取的数据。

图 1 - 利用 System object 实现的 PicoZed SDR 流数据

图 1 - 利用 System object 实现的 PicoZed SDR 流数据

图 2 - PicoZed SDR 接收器 MATLAB System object

图 2 - PicoZed SDR 接收器 MATLAB System object

LIBIIO 库
Analog Devices 开发了 Libiio 库 [3, 4],可简化用于连接 Linux Industrial I/O (IIO) 器件(例如 PicoZed SDR SOM 上的 AD9361)的软件的开发工作。开源(GNU Lesser General Public License V2.1) 库抽象出硬件的低层细节,并提供一个可用于高级项目的简单但完整的编程接口。

该库由一个高级应用编程接口和一套后端组成,如图 3 所示。

图 3 - Libiio API 和后端

图 3 - Libiio API 和后端

您可以使用 Libiio 在项目原型设计阶段与 PicoZED SDR进行接口连接,以便向或从 MATLAB、Simulink 或GNURadio 等工具的模型发送或接收样本流。

  • 本地后端与 Linux 内核通过内核的 sysfs 虚拟文件系统进行接口连接。这个后端具有 C、C++ 和 Python 绑定,用以支持运行于 PicoZED SDR 上的远程部署应用程序。
  • 网络后端通过网络链路与 IIO Daemon (iiod) 服务器进行接口连接。网络后端支持多种操作系统(Linux、OS X、Windows)以在运行 MATLAB 和 Simulink [5]、GNURadio [6] 或 IIO Oscilloscope [7]等应用程序的更强大主机平台上进行基于 GUI 的远程调试。
  • 用户需要使用 Libiio 在项目的原型设计阶段与 PicoZED SDR 进行接口连接,以向/从 MATLAB、Simulink 或 GNURadio 等工具的模型发送或接收样本流,这些工具可以建模物理层((QPSK、QAM、OFDM 等)或整个媒体访问控制器 (MAC)。Libiio 支持中等数据速率(约 8Msps)下的流传输(不丢失样本),以及最大数据速率(61.44 Msps)下的突发模式(获得样本突发传输流(高达 1M 左右的样本),会在突发流之间丢失数据)。 通常,当进行 PHY 开发时应使用速率较低的数据流,然后,利用突发模式在生成 HDL/C 代码之前快速验证设计。

    利用针对 PICOZED SDR 的软硬件协同设计进行系统集成
    在使用 PicoZed SDR 环内无线完全验证了算法模型之后,接下来是生成 HDL/C 代码并将 IP 核打包,以集成到更大的系统。例如,在 MATLAB 和Simulink 中建模的无线接收器子系统可能被指定用于点对点无线电链路,以从安装在 PicoZed SDR 载卡上的安富利摄像机模块传输实时视频。

    MathWorks HDL CoderTM 中的软硬件协同设计流程使用户可以探索针对 Zynq SoC 的软件与硬件之间的最佳设计分区(图 4)。针对可编程逻辑的部分可自动封装为 IP 核,包括硬件接口组件,例如 ARM AMBA® AXI4 或 AXI4-Lite 接口访问寄存器,AXI4 或 AXI4-Lite 接口,AXI4-Stream 视频接口,以及外部端口。MathWorks HDL Workflow AdvisorIP 核生成流程使用户可以将生成的 IP 核插入赛灵思 Vivado® 集成设计环境中的预定义嵌入式系统项目。[8] HDL Workflow Advisor 包含 Vivado IDE 将用户设计部署到 SoC 平台所需的所有元素,除了用户生成的自定义 IP 核和嵌入式软件。

    图 4– MathWorks 软硬件协同设计流程

    图 4– MathWorks 软硬件协同设计流程

    如果用户有 MathWorks Embedded Coder® 许可证,就可以自动生成软件接口模型,从中生成嵌入式 C/C++ 代码,并在 Zynq SoC 中 ARM 处理器上的 Linux 内核上构建和运行可执行文件。所生成的嵌入式软件包含 AXI 驱动程序代码。该代码由AXI 驱动程序模块生成的,用以控制 HDL IP 核。或者,用户也可以编写嵌入式软件,手动为 ARM 内核构建。

    IIO 示波器
    ADI IIO 示波器 (osc) 是一个示例应用,用以演示如何对 Linux 系统中的不同 Linux IIO 设备进行接口连接。该应用允许用户以四种模式(时域、频域、星座图和互关联)绘制捕获的数据,并查看和修改多个 IIO 设备设置。

    osc 应用支持 Linux、Windows 和 OS X。由于支持 HDMI 视频显示,以及图形环境,因此它可运行于远程连接的主机 PC 或 PicoZed SDR FMC 载卡上。提供有关如何在Linux 上构建 osc 应用的使用说明,以及预先创建的 Windows 二进制文件。图 5给出了 PicoZED SDR 的两个通道 (I/Q) 的快速傅里叶变换 (FFT),建立了标记以查看单音信号

    图 5 - ADI IIO 示波器

    图 5 - ADI IIO 示波器

    和测量谐波
    直接在 PicoZED SDR 上构建 osc 应用只需要(1)下载源代码:
    > git clone https://github.com/analogdevic- esinc/iio-oscilloscope.git
    > cd iio-oscilloscope
    > git checkout origin/master

    (2)构建并安装:
    rgetz@pinky:~/iio-oscilloscope$ make
    rgetz@pinky:~/iio-oscilloscope$ sudo make install

    凭借强大的处理系统(双 ARM Cortex-A9 处理器,运行频率为 1GHz,外加 1GB DDR3 SDRAM),在 Zynq SDR SOM 上进行本机编译过程非常快速。

    采用 PICOZED SDR 的实时视频捕获系统
    高性能视频已成为自动汽车、军用视觉系统、监控系统和无人机等无线应用领域中智能系统的重要组成部分。这些应用产品将高像素率视频捕获与实时分析相结合,可打破纯软件方案的性能限制。凭借 Zynq SoC 和赛灵思的 SDSoCTM 开发环境,嵌入式视觉系统设计人员能兼具两者的优势,利用原有软件图像处理算法的丰富功能以及硬件加速,以高帧率实时处理高清晰视频。安富利 ON PYTHON-1300 摄像机模块采用安森美 (ON Semiconductor) 的 PYTHON-1300 彩色图像传感器,能够达到 210 fps 下的 SXGA 分辨率(1,280 x 1,024 像素)。[9]。安富利的多个基于 Zynq SoC 的开发平台——包括 PicoZed SDR——都支持该模块(以实现视频分析的无线传输)。系统设计人员可以使用符合 Video4Linux2 API 规范(V4L2;图 6)的安富利软件驱动程序将摄像机模块集成到完整的 Linux 系统中。V4L2 框架可以实现被称为流水线的完整视频数据路径。典型的视频捕获流水线从摄像机接收器获取视频,选择性地处理视频,然后使用视频 DMA 引擎将内容发送至外部帧缓冲器。安富利提供与 Vivado IP Integrator 兼容的“摄像机接收器”IP 核 HDL 源代码(不收取费用和版权费),以及以 Linux 补丁形式提供的 V4L2 子设备 Linux 驱动程序。

    图 6 - 采用安富利 ON PYTHON-1300 摄像机模块的 V4L2 视频捕获流水线

    图 6 - 采用安富利 ON PYTHON-1300 摄像机模块的 V4L2 视频捕获流水线

    本文中我们已经介绍过,通过安富利的 PicoZed SDR 中提供的自动工作流程,用户可大大缩短从概念带部署的开发时间,同时专注于实现 SDR 产品的差异化特性。

    参考资料
    1. PicoZed SDR 开发套件
    2. 用 MATLAB 进行无线通信设计
    3. 什么是 libiio?
    4. analogdevicesinc/libiio GitHub
    5. IIO System Object
    6. GNU 无线电
    7. IIO 示波器
    8. ADI 参考设计 HDL 用户指南
    9. 安富利 ON PYTHON-1300-C 摄像机模块