13.3 PS设计
13.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板的部署示例。
- Linux系统
Linux系统一个自由开源的操作系统内核。内核是系统启动时加载的第一个程序之一,它提供了一个统一的、与体系结构无关的API来控制和通信系统硬件资源,如内存、进程、网络接口和设备存储。Linux在讨论的软件堆栈中提供了最高的抽象级别,因为大多数用户应用程序在Linux用户空间中运行,并通过系统调用接口与内核通信。这种用户空间和内核空间的分离确保了应用程序可以访问共享的资源以安全的方式使用更高级的接口。
默认情况下,Linux提供了一个完全公平调度程序(CFS),它根据可运行进程的总数和它们已经处于活动状态的时间,公平地为所有应用程序分配CPU时间。可以使用其他内置调度算法或切换到另一个实时优化的内核来实现类似实时的功能。尽管实时Linux对于许多应用程序来说是一个很好的选择,但由于运行操作系统本身需要大量的资源开销,它无法与专用裸机或RTOS实现的确定性和硬实时调度性能相匹配。
13.3.2 同步多处理(SMP)和异步多处理(AMP)
复杂的异构处理系统,如RFSoC设备的PS,支持前面提到的软件堆栈的高级部署架构。RFSoC的PS可以在两种主要模式下配置和使用:同步多处理(SMP)和异步多处理(AMP)[86]。
这两种模式可以概括如下。
- 同步多处理
在SMP模式中,多个处理器由操作系统的单个实例管理。操作系统处理分配和管理系统资源的大部分复杂性,如处理核心、缓存、负载平衡和外围中断。SMP模式仅支持RFSoC PS的Arm Cortex-A53 apu。
- 异步多处理
AMP系统具有多个运行独立程序的相同或不同架构的CPU。每个内核都有自己的地址空间,可能运行操作系统,也可能不运行操作系统。根据设计的不同,系统可以在核心之间合并通信设施,或者它们可以彼此完全独立运行。AMP允许设计人员在同一处理系统上运行裸机、RTOS和Linux操作系统的混合,每个PS内核运行一个独立的软件堆栈。例如,设计可以使用Arm Cortex-R运行裸机或RTOS堆栈来运行关键任务软件,而系统中的其他核心(Arm Cortex-A应用程序核心)可以运行面向用户的软件。
13.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)配置、操作系统、引导文件和软件驱动程序。这个流程最适合于硬件设计已经完成,只剩下设计的软件应用部分的项目。
可扩展的基于平台的流程,如图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设计的快速创建,而无需重新发明基本组件。图13.9提供了一个GNU Radio Companion接口的示例:模块被配置并连接在一起,形成一个流程图,对无线电的功能进行建模。
13.4 PS硬件软件合作设计
13.4.1 作为软硬件协同设计的Vivado工作流
通过重新检查先前考虑的Vivado工作流,可以突出强调协同设计方法。图13.10说明了Vivado和Vitis生态系统中的这种集成设计方法,它包括分区但高度依赖的PL和PS设计、实现和硬件验证。
然后使用Vivado IDE进行合成、实现和比特流生成,从而对设备进行编程。动态函数交换(DFX)元素也可以在这里合并。设计的硬件和软件元素通常一起进行测试,例如,只有在硬件设计成功编程的情况下,才能对基于PS的驱动程序进行全面测试。同样,硬件中的功能通常通过由PS控制的AXI4-Lite接口进行配置、启用和操作。因此,调试和解决错误的过程是硬件软件协同设计方法的一部分——硬件设计中的错误修复需要在PS中进行测试,而PS中的更改需要使用硬件设计进行测试。
13.4.2 可选择的协同设计工具
一些第三方工具提供了硬件软件协同设计的替代方法,这些方法通常允许在单个开发环境中进行PL和PS设计,并有一个链接到“幕后”使用的Vivado版本来执行合成、实现和比特流生成。通常,同一个应用程序提供了一种方法来编程目标硬件设备并控制PS,从而允许完整的硬件软件协同设计。
1.MathWorks SoC Builder
如前面13.2.4节所讨论的,MathWorks HDL Coder工具可以用作抽象HDL和IP核生成的方法。通过额外集成SoC Blockset,可以创建一个完全代表Vivado IP集成商设计的模型设计,包括rfdc、PS控制和通过dma进行的内存管理。
利用额外的MathWorks工具,设计方法可以进一步扩展:如果链接了Vivado版本,则可以使用SoC Builder工具创建支持hdl的设计,生成比特流,然后下载并在目标SoC上执行。该工具提供了一个循序渐进的向导,指导用户通过Vivado工作流,而不离开Simulink IDE。相关的Vivado版本在此过程的后台运行,因此,在完成SoC Builder过程后,可以在Vivado中打开IP Integrator块设计。
假设目标评估板配置正确,并连接到运行SoC Builder的主机PC,则可以通过以太网从向导进行连接。生成的比特流可以加载到设备上,应用程序可以直接从IDE运行。
2.RFNoC for GNU Radio
射频片上网络(RFNoC)项目是SDR制造商Ettus ResearchTM的开源第三方软件工具,旨在简化将IP核集成到其通用软件无线电外设(USRP) SDR单元的信号处理链中。RFNoC可以用作GNU Radio软件的附加包,GNU Radio软件主要是用于系统设计的PS元素的开发环境。
RFNoC包支持硬件设计和GNU Radio一起进行软硬件协同设计。该软件包提供了选定的“RFNoC块”,其中添加了DSP功能,如FIR滤波器和FFT。这些模块可以与Vivado IP目录IP核以及使用AXI4接口的任何自定义IP核一起添加到GNU Radio设计中。与SoC Builder工具一样,RFNoC需要了解已安装的Vivado版本,该版本在后台用于执行合成、实现和比特流生成。
独特的是,RFNoC设计中的所有IP核都通过AXI4 Crossbar连接,这意味着可以在运行时改变处理链中的块顺序,而不会改变比特流。这为设计增加了很大的灵活性。缺点是延迟增加,因为样本必须在每个处理块之间通过这个AXI4 Crossbar,这意味着时间要求变得更大。
阅读更多精彩文章,请关注订阅号:威视锐科技