YunSDR通信小课堂(第34讲)

11. RFSoC SDR的设计工具和工作流程

11.3 PS设计

11.3.1 软件栈

    在设计RFSoC PS时,必须选择合适的软件堆栈来满足设计要求。软件栈是一组基本软件,开发人员可以在这些软件的基础上添加他们自己的定制软件,以适应预期的应用程序。根据所定义的软件系统是否具有两个或多个并发功能,是否需要执行实时操作,或者是否具有丰富的用户界面需求,精心选择的堆栈可以减少开发时间并提高用户满意度。

    不同的软件栈也提供不同的抽象层。在较低的抽象层中,开发人员需要管理更多的系统资源,如内存、I/O和外围设备。更高的抽象层提供统一的应用程序编程接口(API)来处理系统资源,但会引入内存和延迟成本。

    1.裸机

    裸机是指直接在硬件上执行的程序指令,没有操作系统介入。它是最低层次的抽象,所有的系统资源都需要由程序员来管理。该软件在单个线程中执行,可选的中断处理高优先级和紧急进程。

    AMD通过Vitis统一软件开发环境支持其包含APU、RPU和MicroBlaze处理器的SoC的裸机应用程序开发。PS和PL外设的关键库、标准C库以及用于文件系统的额外中间件库,加密和网络在独立板支持包(BSP)中提供。BSP为您的应用程序提供了一个简单的单线程环境。

裸机最适合要求简单的设计:例如,一个只涉及单个动作循环的软件任务;或者一个可以由中断驱动的例程。对于具有更大复杂性、更多并发任务或不需要低级手工优化的应用程序,首选其他软件堆栈。

    2. 实时操作系统(RTOS)

    实时操作系统(RTOS)是裸机之上的一个步骤。它是一个相对简单的、类似操作系统的层,它定义了一种统一的方式来创建、调度和管理任务以及系统资源。RTOS提供了确定性的进程调度,并保证指定的关键系统任务将在预定义的时间框架内响应事件和中断而执行。

    与成熟的操作系统不同,RTOS库与应用程序代码相关联,在主板启动时产生单个可执行文件。大多数RTOSs不支持动态加载或卸载代码,也就是说,代码不能在运行时更改。

  AMD为在AMD SoC上实现的APU、RPU和MicroBlaze处理器提供了FreeRTOS的官方开源端口。此外,一些第三方RTOS,如Microsoft Azure RTOS或The Zephyr Project有针对选定的AMD SoC板的部署示例。

    3. Linux系统

    Linux系统一个自由开源的操作系统内核。内核是系统启动时加载的第一个程序之一,它提供了一个统一的、与体系结构无关的API来控制和通信系统硬件资源,如内存、进程、网络接口和设备存储。Linux在讨论的软件堆栈中提供了最高的抽象级别,因为大多数用户应用程序在Linux用户空间中运行,并通过系统调用接口与内核通信。这种用户空间和内核空间的分离确保了应用程序可以访问共享的资源以安全的方式使用更高级的接口。

    默认情况下,Linux提供了一个完全公平调度程序(CFS),它根据可运行进程的总数和它们已经处于活动状态的时间,公平地为所有应用程序分配CPU时间。可以使用其他内置调度算法或切换到另一个实时优化的内核来实现类似实时的功能。尽管实时Linux对于许多应用程序来说是一个很好的选择,但由于运行操作系统本身需要大量的资源开销,它无法与专用裸机或RTOS实现的确定性和硬实时调度性能相匹配。

    11.3.2 同步多处理和异步多处理

    复杂的异构处理系统,如RFSoC设备的PS,支持前面提到的软件堆栈的高级部署架构。RFSoC的PS可以在两种主要模式下配置和使用:同步多处理(SMP)和异步多处理(AMP)[86]。这两种模式可以概括如下。

    1. 同步多处理

    在SMP模式中,多个处理器由操作系统的单个实例管理。操作系统处理分配和管理系统资源的大部分复杂性,如处理核心、缓存、负载平衡和外围中断。SMP模式仅支持RFSoC PS的Arm Cortex-A53 apu。

    2. 异步多处理

    AMP系统具有多个运行独立程序的相同或不同架构的CPU。每个内核都有自己的地址空间,可能运行操作系统,也可能不运行操作系统。根据设计的不同,系统可以在核心之间合并通信设施,或者它们可以彼此完全独立运行。AMP允许设计人员在同一处理系统上运行裸机、RTOS和Linux操作系统的混合,每个PS内核运行一个独立的软件堆栈。例如,设计可以使用Arm Cortex-R运行裸机或RTOS堆栈来运行关键任务软件,而系统中的其他核心(Arm Cortex-A应用程序核心)可以运行面向用户的软件。

    11.3.3 工具

    1.PetaLinux

    PetaLinux Tools是一个免费使用的嵌入式Linux软件开发工具包(SDK),用于AMD SoC和MicroBlaze软处理器。它基于开源的Yocto Project,但提供了一个更高的抽象层,专注于AMD硅器件的开发。

    PetaLinux本身并不是一个Linux发行版,但是它提供了所有必要的工具来定制、构建和部署适合您的应用程序的嵌入式Linux映像。这包括创建和更新Board Support Packages (BSPs),以及构建Linux系统的各种组件,例如内核、引导加载程序、根文件系统等等。使用PetaLinux构建的嵌入式Linux映像可以通过网络或JTAG接口部署到主板上。当硬件不可用时,也可以使用捆绑的QEMU全系统模拟器进行仿真。

    PetaLinux还与其他AMD工具集成。例如,使用Vivado开发的硬件平台可用于配置PetaLinux项目。Vitis可以使用PetaLinux项目作为开发软件应用程序的基础。

    2. Vitis软件开发工作流

    Vitis统一软件平台是一种新的AMD工具,它将所有SoC开发方面结合到一个统一的环境中.它包括现已弃用的Xilinx SDK、SDSoC和SDAccel工具以及前面提到的Vitis HLS的功能,并通过下一代应用程序加速开发流程对它们进行了扩展。

    Vitis嵌入式软件开发流程是专注于嵌入式软件开发的Vitis统一软件平台的一部分,提供以下功能:为不同的SMP和AMP配置划分SoC的PS资源的工作流;针对APU、RPU和MicroBlaze内核的裸机、RTOS和Linux应用程序的软件开发堆栈和交叉编译器;分析应用程序性能的程序分析器;Xilinx Runtime (XRT)——用于连接目标硬件平台的API和底层驱动程序;Vitis加速库——开源,性能优化的硬件加速库,用于常见的数学,DSP和统计功能,以及特定领域的工作流,如机器学习(ML),图像处理等。

     Vitis支持两种不同的嵌入式设计流程,总结如下:

    传统的嵌入式软件或固定平台设计流程依赖于使用基于块的Vivado IP集成商或HDL系统描述构建的完整硬件设计,导出为固定平台。除了比特流,固定平台文件还包括处理器域(AMP/SMP)配置、操作系统、引导文件和软件驱动程序。这个流程最适合于硬件设计已经完成,只剩下设计的软件应用部分的项目。

    传统的嵌入式软件或固定平台设计流程依赖于使用基于块的Vivado IP集成商或HDL系统描述构建的完整硬件设计,导出为固定平台。除了比特流,固定平台文件还包括处理器域(AMP/SMP)配置、操作系统、引导文件和软件驱动程序。这个流程最适合于硬件设计已经完成,只剩下设计的软件应用部分的项目。

Vitis.png

 可扩展的基于平台的流程,如图13.8所示。在这个流程中,嵌入式处理器平台包含可扩展的硬件设计以及项目的软件组件。可扩展平台的创建始于硬件平台(硬件规范文件),该硬件平台可以由AMD提供作为基础平台,也可以使用传统的Vivado IP Integrator或HDL设计方法创建Vivado硬件设计。硬件平台可以是预合成形式,它不包含比特流,但可以更快地构建,或者是实现后形式,它包含已实现的设计和最终的比特流。无论采用哪一种硬件规格,硬件平台都将被导入Vitis,并作为硬件设计的基础,为Vitis连接器添加软件组件配置(即处理器域、DeviceTree、OS),从而创建自定义的可扩展嵌入式处理器平台。

    3.PYNQ

    PYNQ是一个来自AMD的开源项目,它为AMD平台提供了一个功能丰富的开发环境,包括ZYNQ、MPSoC、RFSoC和Alveo。PYNQ主要作为基于ubuntu的操作系统映像发布,它附带了一个预配置的、基于web的JupyterLab IDE,以及允许方便地与PL交互的Python库。

    PYNQ允许开发人员使用高级Python编程语言及其库进行数据分析、科学计算、数据可视化、图像处理、机器学习和其他应用程序。特别是,它支持设计人员创建和评估他们自己的定制硬件加速设计。

    PYNQ的核心是Overlay类,它将PL设计和单个IP寄存器公开为可访问的Python对象。PYNQ为一些最流行的硬件ip提供了开箱即用的驱动程序,如AXI DMA、AXI GPIO、AXI IIIC、AXI中断控制器等。此外,还支持MicroBlaze软处理器,并且可以直接从Python环境中编程。所提供的库可以作为大多数设计的起点,并且可以通过为PL设计中包含的其他ip编写自己的自定义库来进一步扩展。

     4. Math Works工具

    MathWorks通过其HDL编码器工具箱为AMD fpga和SoC提供IP生成功能。MathWorks还开发了附加扩展,以针对RFSoC和其他AMD SoC平台的基于ARM的PS。

    嵌入式编码器工具箱是MATLAB编码器和Simulink编码器的扩展,它允许开发人员从MATLAB和Simulink项目中生成符合行业标准的C/ c++代码。

嵌入式编码器可以使用硬件支持包进一步扩展,以实现更大的优化和额外的功能。Xilinx Zynq支持包(也支持MPSoC和RFSoC)可以与HDL编码器工具箱一起使用,为使用MathWorks工具开发的IP核自动生成软件接口。

    ARM Cortex A对嵌入式编码器的支持进一步扩展了嵌入式编码器工具箱,为选择的信号处理MATLAB系统对象和Simulink块提供了ARM Neon单指令多数据(SIMD)加速器支持。这允许计算密集型算法,如FFT/IFFT,多速率FIR抽取/插值,以及其他过滤器在优化和独立的执行硬件上运行,能够同时进行多个操作。

    5. GNU Radio

    GNU Radio是一个用于SDR设计开发的免费开源工具包。它被设计为在基于CPU的处理系统上运行,但可以使用自定义Out Of Tree (OOT)模块进行扩展,以利用GPU、DSP或FPGA加速。GNU Radio Companion为GNU Radio提供了一个基于块的图形用户界面(GUI),旨在实现SDR设计的快速创建,而无需重新发明基本组件。图11.9提供了一个GNU Radio Companion接口的示例:模块被配置并连接在一起,形成一个流程图,对无线电的功能进行建模。

屏幕截图.png

文章来源:威视锐科技

最新文章

最新文章