软件定义无线电39

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所示。

精彩文章,请关注订阅号:威视锐科技

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

​自动化网络架构搜索(Neural Architecture Search,NAS)

NAS是一种旨在自动设计神经网络结构的技术。传统上,神经网络的架构设计依赖于专家的经验和大量的试错过程,而NAS通过算法自动搜索网络架构,以发现最适合特定任务的神经网络设计。 NAS的主要组成部分包括: 搜索空间:定…

Ubuntu 22.04 安装和运行 EDK2 超详细教程

Ubuntu 22.04 安装和运行 EDK2 超详细教程 适合新手小白,从零开始 🌟 1. 什么是 EDK2? EDK2(EFI Development Kit 2)是一个开源的 UEFI(统一可扩展固件接口)开发环境,主要用于编写和…

什么是STEP认证

**什么是STEP认证** STEP认证,全称为“可持续纺织生产认证”(Sustainable Textile Production),是一项由国际环保纺织协会Oeko-Tex提供的权威独立认证体系。这一认证体系犹如纺织和皮革行业的绿色灯塔,为追求可持续发…

odoo-045 ModuleNotFoundError: No module named ‘_sqlite3‘

文章目录 一、问题二、解决思路 一、问题 就是项目启动,本来好好地,忽然有一天报错,不知道什么原因。 背景: 我是在虚拟环境中使用的python3.7。 二、解决思路 虚拟环境和公共环境直接安装 sqlite3 都会报找不到这个库的问题…

[Linux系统编程]进程间通信—system V

进程间通信—system V 1. System V 共享内存(Shared Memory)1.1 共享内存的建立过程1.2 共享内存函数2. System V 消息队列(Message Queues)3. System V 信号量(Semaphores)4. 总结前言: 之前所提的管道通信是基于文件的,OS没有做过多的设计工作。 system V 进程间通信…

R语言——获取数据1

参考资料:学习R 数据的来源可以由很多。R内置有许多数据集,而在其他的附件包中能找到更多的数据。R能从各式各样的来源中读取,且支持大量的文件格式。 1、内置的数据集 R的基本分发包有一个datasets,里面全是示例数据集。很多其他…

HTTP 请求方法

HTTP 请求方法 引言 HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一。它定义了客户端与服务器之间通信的规则。HTTP请求方法,也称为HTTP动词,是客户端向服务器发送请求时使用的操作类型。本文将详细介绍HTTP请求方法的概念、分类、常用方法及其在实际应用中的…

python函数装饰器

python函数装饰器 声明:博主并没有系统学习过python语言,在实际项目中遇到关于python不懂的语法,这里仅作为个人学习积累笔记 1.1 python函数相关基础 深入了解python函数装饰器移步:Python 函数装饰器 下面的笔记来源于上述链接…

OpenCV 图形API(7)用于将笛卡尔坐标(x, y)转换为极坐标(magnitude, angle)函数cartToPolar()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算二维向量的大小和角度。 cartToPolar 函数计算每个二维向量 (x(I), y(I)) 的大小、角度,或同时计算两者: magnitude…

什么是向量搜索Vector Search?

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…

搜索工具Everything下载安装使用教程(附安装包)

文章目录 前言一、搜索工具Everything介绍二、搜索工具Everything使用步骤1.软件下载2.版本选取3.启动软件4.文件搜索 前言 本教程将详细为您介绍 Everything 的下载、安装与使用方法,助您快速上手,充分利用这款工具的强大功能,告别文件查找…

element-plus中,Upload上传组件的使用 + 后端处理

目录 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 2.后端实现 ①引入阿里云oss的依赖 ②编写AliOSSUtils工具类 ③编写controller层 ④编写service层 ⑤编写mapper层 3.效果展示 4.重点理解 结语 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 <…

HarmonyOS-ArkUI Rcp模块类关系梳理

前言 本文重点解决的是&#xff0c;按照官网学习路径学习Tcp模块内容时&#xff0c;越看越混乱的问题。仿照官网案例&#xff0c;书写代码时&#xff0c;产生的各种疑惑。比如&#xff0c;类与类之间的关系&#xff0c;各种配置信息究竟有多少&#xff0c;为什么越写越混乱。那…

【云计算物理网络】数据中心网络架构设计

云计算的物理基础&#xff1a;数据中心网络架构设计 一、技术背景&#xff1a;从“三层架构”到“云原生网络”二、技术特点&#xff1a;云数据中心网络的四大支柱三、技术细节&#xff1a;CLOS架构的实现挑战四、未来方向&#xff1a;从“连接设备”到“感知服务”结语&#x…

window11 通过cmd命令行安装 oh my zsh 的教程

步骤 1&#xff1a;安装 WSL 2 和 Ubuntu 1. 以管理员身份打开 CMD wsl --install -d Ubuntu此命令会自动安装 WSL 2 和 Ubuntu 发行版。 安装完成后重启系统。 初始化 Ubuntu 在开始菜单中打开 Ubuntu&#xff0c;设置用户名和密码。 步骤 2&#xff1a;在 WSL 的 Ubunt…

gdb 调试命令记录

启动调试 gdb ./待调试的程序 #不带参数 (gdb) run #带参数 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #图形化代码界面 (gdb) layout src基础调试命令 命令缩写作用run [args]r运行程序&#xff08;可带命令行参数&#xff09;break <locatio…

STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步

主题内容教学目的/扩展视频低功耗模式什么是低功耗&#xff0c;模式介绍&#xff0c;切换方法。为电池设备开发做准备。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、低功耗模式概述1.1 为什么需要低功耗模式&#xff1f;1.2 基本实现原理 二、低功耗模式的本…

JavaScript instanceof 运算符全解析

JavaScript instanceof 运算符全解析 核心语义: 判断一个对象(object)是否属于某个构造函数(constructor)或类的实例,基于原型链(prototype chain)实现类型检测。 一、JavaScript 中的基础用法 1. 语法结构 object instanceof constructor 返回值:布尔值(true/fal…

电脑基础之word基础操作

word是常用的办公软件之一&#xff0c;用于文档编辑&#xff0c;如合同/报告撰写、论文等‌。 一、简介 word文档最早由微软推出&#xff0c;通过Microsoft Office Word软件创建和编辑。由于涉及版权付费问题&#xff0c;大多数个人使用盗版软件。后来金山出了WPS office免费软…

深度解析Python代码中的广告信息提取与JSON处理

哈喽,大家好,我是木头左! 在当今数字化时代,广告无处不在,而从广告中提取关键信息并进行处理则成为了一项重要的技能。本文将深入剖析一段Python代码,该代码旨在从给定的JSON格式字符串中提取广告相关信息,并对其进行解析和处理。通过这段代码,将展示如何运用Python的j…