13.8 RFSoC上PYNQ的SDR设计流程
本节中详细介绍的设计过程可以分为六个独立的步骤,如图13.16所示,并在接下来的几页中进行讨论。
13.8.1 初始设计过程
。在这里,系统设计人员必须考虑许多因素,例如RFDC接收和/或发送的频率范围,以及这些信号的带宽。这一步也应该使用频率规划,以确定所需的配置是否会导致任何带内干扰。这些因素将决定在设计中使用所需的采样率和时钟率。例如,如果信号带宽远小于RFDC所需的采样率,则可以使用插值或抽取级来降低PL上的时钟速率。然而,如果需要大带宽,则可能需要使用SSR来满足PL时间限制。
另一个需要考虑的因素是FPGA上IP之间的通信,以及PL和PS之间的通信。Vivado中提供的许多IP都是兼容AXI的,因此对于任何自定义IP也采用兼容AXI的接口往往是有益的。如果要在PS和PL之间传递大量数据,则可能需要AXI流 DMA,而对于低带宽信号,AXI - Lite接口通常就足够了。
在这个阶段考虑如何构建PS软件以及如何与PL硬件交互是很重要的。AMD为其IP提供了许多可以从PS控制的驱动程序,例如AXI DMA。如果要开发自定义IP,那么可能还需要为它们开发自定义驱动程序。
此外,如果设计需要使用AXI - Lite控制信号,那么PL硬件必须符合AXI - Lite标准并适当地处理它们。
13.8.2 定制IP的开发
下一步是开发和测试在FPGA上运行的定制IP。作者在这个阶段的首选工具是模型编写器和HDL编码器,两者都在MATLAB/Simulink环境中运行。使用Simulink使系统设计人员能够在将IP功能集成到Vivado设计之前快速模拟和测试IP功能,例如,可以利用Simulink源块为仿真提供适当的刺激,并且可以使用Sink块来可视化时间和频域的结果。这两个工具都能够在它们生成的IP中合并符合AXI的端口。
如图13.17所示为HDL Coder设计示例,突出显示了构成IP核的HDL模型,以及输入刺激的生成和输出信号的检测。
Simulink中的时钟使用采样时间(换句话说,采样周期)的概念,这是采样率的倒数。因此,采样时间参数是指IP所需的时钟速率。
一般情况下,单个时钟驱动IP的所有接口,设置为匹配所需的采样率。如果在自定义IP中需要任何速率更改,那么必须注意IP必须由以最高采样率运行的时钟驱动,这一点很重要。然后,这些工具在IP内生成其他时钟,以驱动以较低采样率运行的块;所需的采样率(以及时钟速率)通常与整数因子相关。
在设计定制IP时,重要的是要考虑输入和输出,以及它们如何与更广泛的设计交互。如前所述,使用AXI标准是值得考虑的,它将允许这些IP与Vivado中其他兼容AXI的IP很好地协同工作。AXI流可用于通过处理链传递RF数据,而AXI- Lite可用于控制信号,例如启用和复位。
Simulink提供信号范围和频谱分析仪工具,允许系统设计人员在将模型转换为HDL IP之前测试和验证模型的功能。频谱分析仪对于确定信号数据是否被正确处理非常有用,而信号范围可用于识别轴流接口信号的问题。
13.8.3 自定义IP集成到Vivado,硬件系统设计
一旦开发和测试了自定义IP,就可以将它们导入到Vivado并集成到完整的PL设计中。这一步可能是最关键的,因为它要求系统设计人员对底层硬件及其功能有很好的理解。在Vivado中,系统设计人员将MATLAB/Simulink中设计的自定义IP与RF数据转换器等其他IP之间的接口连接起来;以及PL和PS之间的任何沟通。
此外,这是在设计中设置时钟速率和采样速率的地方。必须小心确保每个IP都由正确的时钟驱动,否则可能会出现意外行为,并且难以调试。本书中的大多数设计都是从三个独立的时钟源运行的:(i) PL时钟,用于驱动AXI- Lite接口;(ii) DAC时钟,驱动与传输路径相关的IP;(iii) ADC时钟,它驱动接收路径上的ip。在某些情况下,可能需要使用时钟转换器来生成ip所需的频率。
创建PL设计的最直接方法,也是作者所采用的方法,是使用Vivado的内置IP Integrator工具。IP集成商允许系统设计人员使用可视化的、基于块的方法将IP连接在一起。
硬件系统设计人员最终会遇到的一个问题是时序关闭,即确保设计能够支持所需的时钟速率。对于SDR设计,这可能涉及在接收器的信号处理链中较早地抽取信号,或者相反,在发射器的信号处理链中较晚地插值。另一个选择是更改Vivado中的实现策略,它定义了放置和路由的方法。Vivado定义了许多不同的策略,包括一些主要关注定时关闭的策略(通常具有延长的运行时间,但有可能获得更好的结果)。
13.8.4 PS软件的开发
在PL设计完成后,就可以开发PS的软件了。从本书中的各种设计中可以明显看出,PYNQ是作者在PS上开发软件的首选框架。使用PYNQ有许多好处,包括对标准IP的良好驱动程序支持,以及为自定义ip创建驱动程序的简单方法。使用Python还可以快速有效地编写代码,从而相对快速地识别PL和PS上的任何问题。此外,Python生态系统包含无数已建立的库,例如Plotly和SciPy,这使得直接在PS上开发用于可视化和分析信号的代码变得简单。
由于其易用性,PYNQ提供了一种快速的方法来确认PL设计是否按预期执行。AXI - Lite寄存器可以使用MMIO库进行读写,RFDC驱动程序可用于配置RF数据转换器,DMA驱动程序使通过共享内存在PS和PL之间传递数据变得简单。如果数据仅在PL和RFDC之间传递,则可能需要在PL上运行集成逻辑分析仪(ILAs)或外部设备(如频谱分析仪和/或信号发生器)来验证发送和接收路径的功能。
13.8.5 调试
正如调试过程中常见的那样,解决方案通常很简单,但是确定故障的位置可能非常耗时。帮助这个过程的一个有用工具是Python调试器PDB,它允许用户设置断点并有条不紊地逐步执行PS代码。一旦发现并修复了错误,就可以从项目中删除调试器代码。
如果确认PS软件按预期运行,则可能需要重新访问PL设计阶段以解决问题。根据PL设计的大小,生成一个新的比特流可能需要很长时间,因此,PL调试可能是一个耗时的过程,特别是如果需要多次重新生成比特流,以尝试不同的解决方案。出于这个原因,在进入软件开发阶段之前,广泛地模拟和测试PL硬件是有益的。
虽然在设计中可能存在许多不同的故障,但根据我们的经验,在为RFSoC开发系统时可能会出现两个常见问题。正如本节前面所讨论的,不正确的时钟频率可能导致不可预测的行为。RFDC通常由外部时钟基础设施驱动,因此确保时钟的正确编程以及它们提供预期的频率非常重要。
另一个常见问题来自于如何在自定义IP中生成和处理AXI流信号。除了tdata信号外,AXI流IP还可以包含各种其他接口信号,包括tvalid、tready和包结束信号tlast。如果这些信号没有与tdata信号正确同步,那么沿着信号路径进一步的IP可能无法正确操作。例如,在设置数据传输时,PYNQ DMA驱动程序要求数据包大小具有特定的长度。如果最后一个信号脉冲太早或太晚,指示数据包的结束,这将导致DMA挂起。如果处理不当,trready信号也会出现类似的问题。
13.8.6 项目完成
一旦PS和PL被验证工作如预期,软件就可以形式化。这可能包括为自定义IP制作驱动程序,或者(如果适合预期用例)创建刺激或可视化工具,例如本书中的许多设计。在这些设计中广泛使用的另一种可能性是,将大部分功能抽象为类和函数,然后将它们导入到Notebook中。这使得Jupyter Notebook中的代码更加精简,更容易理解。
G Notebook Set G——RFSoC无线电演示器
G.1 无线电系统
01_rfsoc_radio_system.ipynb探索了发射器和接收器的无线电通道,为用户提供了底层无线电体系结构的概述。这包括研究xrfdc Python包,它负责配置RFSoC的数据转换器。我们还将使用另一个重要的包xrfclk,它配置RFSoC的时钟网络。用户还将被介绍到无线电仪表板,这是一个图形用户界面,控制系统。无线电系统架构示意图如图G.1所示。
本手册介绍了发送端向接收端发送数据时使用的数据帧的结构,它作为一种简单的通信协议。图G.2显示了RFSoC无线电演示器使用的数据帧结构。注意,数据帧有三个主要部分:序言、报头和有效负载。通常发射机发送一个已知的比特序列(前导),接收器使用同步技术检测到它。在此之后,诸如帧号、数据标志和帧长度等附加信息将包含在报头中(稍后将提取这些信息并由接收方用于解释帧)。有效载荷是指帧所携带的数据。
G.2 观察无线电通道
在介绍RFSoC无线电设计之后,我们将开始观察系统运行时的发送和接收无线电管道。这包括通过从发射器和接收器管道的各个阶段进行“抽查”来对无线电系统进行实时内省,即在不影响其来源的处理管道的情况下提取内部信号的副本进行分析。然后使用这些信号生成波形以进行可视化(示例图如图G.3所示)。可以通过运行02_rfsoc_radio_observe.ipynb开始观察无线电通道。
我们还将研究两种数字调制方案的使用:二进制相移键控(BPSK)和正交相移键控(QPSK)。可以在系统运行期间在BPSK和QPSK之间切换,并绘制接收到的星座图,理想情况下应该类似于图G.4所示的星座图。
G.3 发送和接收:“Hello World!”
首先,打开并运行名为03_rfsoc_radio_helloworld.ipynb的Notebook。这个例子将使用RFSoC无线电系统发送一个“Hello World!”的信息在发射器和接收器之间传递。我们将使用三种不同的技术发送此消息。第一个方法使用一个简单的函数调用来发送“Hello World!”第二种方法使用Python小部件,允许您使用按钮和文本窗口轻松地输入和传输消息(此应用程序的示例如图G.5所示)。第三个方法允许您广播“Hello World!”消息反复使用Python线程库。
本Notebook Set的最后一部分允许您使用RFSoC无线电演示系统发送和接收图像。无线电系统重复传输图像,每次成功传输后将图像旋转90°。在本演示中,您可以选择BPSK和QPSK调制方案进行传输。图像发送和接收RFSoC演示系统的示例输出如图G.6所示。
精彩文章,请关注订阅号:威视锐科技