0

我对 SDR/FPGA 游戏比较陌生,因此如果我弄错了术语,我深表歉意。我知道这会有很多相当具体的细节,但我希望有人可能做过类似的事情。我正在尝试使用带有 RFNoC 的 UHD v3.14 在 Ettus USRP E312 上运行简单的 Redhawk 2.2.1 波形。Redhawk 域在 USRP 上运行,我正在从 Centos7 虚拟盒附加 Redhawk IDE。我正在使用的代码是使用 https://github.com/Geontech/redhawk-rfnoc-build构建 的。FPGA 的位文件是按照 Ettus 知识库中的说明使用 Vivado 制作的。波形本身由具有 cpp-rfnoc 实现的单个 psd 组件组成,该组件依赖于 RFNoC_RH 共享库。有一个 RFNOC_Programmable 设备和两个由设备管理器控制的 RFNoC 角色。

我遇到的问题是 Redhawk 无法为波形创建应用程序。我尝试过更改配置、添加更多日志记录以及对 Redhawk 代码进行一些小修改,但由于无法解决组件或软包依赖关系,整个过程通常会失败。我尝试在 USRP 上运行 GPP,但似乎没有考虑它,因为一旦将 psd 组件分配给角色,它似乎就被过滤了。然后它将尝试将软件包依赖项分配给已选择的设备,但没有匹配项。

我有两个问题

  • 这个设置工作的最小红鹰模块集是什么(到目前为止,我有一个带有一个 psd 组件的波形,设备管理器运行一个可编程设备和两个角色)
  • 模块之间应该是什么关系?

特别是我想知道/了解 psd 组件应该在哪里分配/运行?我需要 GPP 设备吗?Psd 组件通过 RFNoC 接口从 fpga 中的块接收/发送数据,同时通过 redhawk 的 bulkio 与其他组件接口,这让我认为它确实需要一个 GPP 设备才能运行。还是我错过了其他东西?

4

1 回答 1

0

我必须承认,我对这个项目有点生疏了,而且已经过期了。Ettus 为 RFNoC 和 E3xx 构建的版本现在不再使用此构建指向的层堆栈版本。今年年初,我开始在我们的meta-redhawk-sdr thud-next分支上进行这方面的研究,但在 2.2.6 REDHAWK 更新中遇到了一些我没有预料到的错误。这最终使两个版本都更新到了 Ettus 的最新源代码树(即普通 E3xx 映像和 RFNoC 变体)。

也就是说,在查看 XML 时,rh.psd组件的 RFNoC 实现 ( cpp_rfnoc) 表明目标可执行设备的处理器属性必须是RF-NoC-Default. RFNoC_DefaultPersona 设备正在满足该要求(正确,基于您的日志)。

该实现rh.psd还依赖于 RFNoC 共享库(SoftPkg 依赖,RFNoC_RH),其实现需要armv7l根据其 SPD 的处理器。与可用可执行设备的比较失败。

我在默认构建配置中看不到任何东西,在设备管理器中提供具有该处理器名称的设备(例如,GPP)。这可能是一个疏忽。您能否尝试在您的系统中添加和运行 GPP?

更新:在复制设置和一些调查之后,似乎出现了一些热补丁,并且在 2019 年升级到 2.2 通过引入一些东西打破了设计。

首先,共享库 SPD 可能需要第二个processor声明,RF-NoC-Default以便 Executable Persona 可以满足依赖关系(热补丁......)。

其次,应用程序工厂创建了一个 ComponentHost 来处理正在运行的任何SharedLibrary组件实现 (2.2),这会导致问题,因为 Persona 期望通过 Load API 传入的dlopen 所有内容,这就是为什么简单地添加回 ComponentHost (有processor自己的补丁)不能解决问题。

修复第一个是 SPD XML 补丁。修复第二个问题是一个 REDHAWK 核心框架补丁,它可能应该被上传,因为很可能任何Executable Persona 设备都希望将组件部署到父可编程设备设置的进程空间中(出于 ComponentHost 现在存在的所有性能原因)。

于 2020-11-05T15:38:05.497 回答