概述
GitHub 上的 ORAN 硬件工程旨在演示 ZCU102 或 ZCU111 评估板上的不同用例。本篇博文会为您演示如何生成设计,以及在评估板启动后如何使用 API 来配置 CC 设置。
1. 硬件设计架构
2. 设计生成
3. PTP 测试设置
a. 板到板 PTP 测试
b. 第三方 O-DU 到板 PTP 测试
4. 在 ZCU102 评估板上使用 Keysight Studio 配置 CC 的方法演示
设计架构
该演示设计的顶层包含一个处理器,用于通过 AXI4-Lite 接口配置数据路径中所用的各个 IP。

DIP 开关用于切换评估板的运行模式(PTP 主模式或从模式)。
“Datapath”(数据路径)模块用于在无线电数据和接收到的 GT 串行数据之间进行转换。它包括 O-RAN Radio IF 和 10G/25G High Speed Ethernet Subsystem。此块中包含 Arm 处理器到 10G/25G High Speed Ethernet Subsystem 控制的所有支持性 IP 核,以及 PTP 支持和简单的无线电仿真块。
如需了解有关“Datapath”模块中的子模块的更多详细信息,请参阅 PG370 第 4 章中的“数据路径”部分

设计生成
ORAN 演示可从 GitHub 仓库中获取:https://github.com/Xilinx/wireless-xorif
1. 在生成设计之前,我们需要安装适用于 ORAN 的最新 v2020.2 补丁,此补丁可从(答复记录 76049)下载。如果使用 2021.1 及更高版本,则可以跳过此步骤
2. 随后,我们需要克隆 GitHub 仓库:
git clone https://github.com/Xilinx/wireless-xorif.git
3. 检出版本对应的标签。
cd wireless-xorif
git checkout tags/2020.2
4. Scripts 文件夹包含用于生成 Vivado 工程以及运行 PetaLinux 流程的脚本。在运行 Tcl 命令之前,需要先使用 cd 切换至 scripts 目录:
cd /wireless-xorif/scripts
5.在本篇博文中,我们要为带有 25G 链路的 ZCU111 评估板生成演示设计。可按如下方式运行脚本:
vivado -mode tcl -source ./xil_vivado_build.tcl -tclargs zcu111 -tclargs om5_25 -tclargs implNodateExit
该命令会生成 Vivado 示例设计,完成综合与实现,然后生成用于 PetaLinux 工程的 XSA。
注释:示例设计分为 3 种
可通过在 Vivado 的“Sources”(源文件)视图中右键单击 ORAN IP 并选择“Open IP example”(打开 IP 示例设计)来生成示例设计:此示例提供一个简单的示例设计,其中仅包含 ORAN IP 及关联的测试激励文件。
块自动化设置流程会生成一个完整的系统级仿真示例,其中包含 10G/25G Ethernet IP、DMA 基础架构以及支持 IEEE 1588 PTP 实现的块。如需了解更多详细信息,请参阅 PG370 第 4 章中的“在 IP integrator 中使用示例系统”。
GitHub 示例:这即是本篇博文中所用的示例。它与块自动化设置功能生成的示例非常相似。除了块自动化设置功能生成的示例系统外,xil_vivado_build.tcl 还会插入必要的调试信号(在以下截屏中高亮显示)。

6.将 XSA 文件从 wireless-xorif/output/zcu111_om5_exs_2020_2_AR76049/vivado/zcu111_om5_exs_2020_2_AR76049.sdk 复制到 wireless-xorif/xsa/zcu111_om5_exs 文件夹中,然后将其重命名为 system.xsa。
7.按照 PetaLinux 构建指示信息,运行以下 Makefile 命令:
make zcu111_om5_exs
该命令会在 wireless-xorif/output/zcu111_om5_exs_2020_2 下创建一个 PetaLinux 工程。根据 wireless-xorif/xsa/zcu111_om5_exs 下的 system.xsa,运行 PetaLinux 构建流程
8.make 命令完成后,会在 wireless-xorif/output/zcu111_om5_exs_2020_2/petalinux/images/linux 中生成启动镜像。将 boot.scr、BOOT.BIN 和 image.ub 复制到 SD 卡中。现在,我们可以启动 ZCU111 评估板。
PTP 测试设置
生成设计后,您可以运行板到板 PTP 测试或第三方 O-DU 到板 PTP 测试。
板到板 PTP
如 PG370 中所述,使用 2 个 O-RAN Radio IF 子系统时,其中一个充当 1588 主时钟,另一个则充当 1588 从时钟,这样即可演示时序同步。

我们来看一下如何用两块 ZCU111 评估板来实现这个演示。
1. 首先,我们需要使用 DIP 开关将其中一块评估板配置为主时钟,将另一块评估板配置为从时钟。
生成 Vivado 设计后,您可以在 oran_radio_if_basic.xdc 中找到 ZCU102/ZCU111 的 DIP 开关设置

以下截屏显示了 ZCU111 评估板上的具体设置:

2.将启动镜像文件(来自设计生成第 7 步)复制到两块 ZCU111 评估板的 SD 卡中,并确保 SW6 处于 SD 卡模式 (OFF, OFF, OFF, ON = 1110)
3.两块评估板均启动后,首先输入“ifconfig”。默认情况下,两块评估板的 MAC 地址是相同的

现在,使用以下命令更改其中一块评估板的 MAC 地址,然后再次输入“ifconfig”,以确保两块评估板的 HWaddr 不同
ifconfig eth0 hw ether 00:0A:35:00:22:02

4.现在,我们可以使用以下命令启动 PTP 测试。
// Master
ptp4l -m -A -i eth0

// Slave
ptp4l -m -A -i eth0 -f /usr/bin/xroe-ptp4lsyncE.cfg -s

注释: xroe-ptp4lsyncE.cfg 将 clock_servo 设置为 nullf
clock_servo 用于同步本地时钟。有效值包括
-“pi”,代表 PI 控制器,
-“linreg”,代表使用线性回归的自适应控制器,
-“ntpshm”,代表 NTP SHM 参考时钟,允许其他进程同步本地时钟(SHM 段号设置为域号)
-“nullf”,代表始终将频率偏移调整为零的伺服器(适用于 SyncE 节点)。默认值为“pi”。
您可能会在终端上看到一些“Synchronization Fault”同步故障消息,但这并不影响 1pps 同步。
例如:

当主时钟偏移为 +/- 1 时,存在一个周期的差异(如下图所示,在 390.625 MHz 下为 2560 ps)。

如果您反复重启从时钟,应该会在 1PPS 上反复观察到这种锁定行为。
如果使用串行控制台停止远程/从时钟上的 ptp4l,您同样会观察到 1PPS 保持相位锁定状态,这表明定时器时钟已同步。
Keysight Studio 到 ZCU102 PTP 测试
在本示例中,我们将 Keysight Studio 用作 PTP 主时钟,并通过一块 ZCU102 评估板执行 PTP 测试。
1.我们需要在 Keysight Studio 中设置时间同步模式。该选项位于“Setup > Instrument Configuration”(设置 > 仪器配置)下

2.然后,将其“Mode”(模式)设置为“Master”(主),并将“Domain”(域)值设置为 24:

3.创建包含以下内容的 ksightSyncE_min.cfg 文件,然后将该文件与其他启动文件一起复制到 ZCU102 评估板中。
[global]
domainNumber 24
clock_servo nullf
注释:“nullf”代表始终将频率偏移调整为零的伺服器(适用于 SyncE 节点)
“domainNumber”需与 PTP 主时钟内定义的域号保持一致。
4.在 ZCU102 评估板上运行以下命令以启动 PTP 测试。
ptp4l -m -A -i eth0 -f /media/sd-mmcblk0p1/xdc_keysight/ptp/ksightSyncE_min.cfg -s -2

ZCU102 上的 Keysight 配置演示
在这一部分中,我们将 Keysight Studio 用作 O-DU,生成 C 层/U 层数据包,并通过一根 10G 以太网电缆将其传输至 ZCU102 评估板。在这一演示中,我们需要弄清楚 ZCU102 评估板启动后需要执行哪些命令,以及如何查看前传接口的状态。
1.首先,我们需要使用 Keysight Signal Studio Pro for 5G NR 来配置所需的“Carrier”(载波)设置。
我们来确定需要添加哪种类型的载波:“Downlink”(下行链路)、“Uplink”(上行链路)还是 PRACH。

2.在本篇博文中,我们对 DL CC1 的配置如下:40 个 RB、“Numerology”(子载波间隔参数集)为 1、单时隙、每时隙 14 个符号。起始符号 ID 为 0。

3.将设置文件另存为 .scp 格式,然后关闭 Signal Studio。

4.接下来,启动 Keysight Open RAN Studio,然后打开上一步中保存的 .scp 文件。

5.设置“C/U Plane Builder Configuration”(C/U 层构建器配置)

6. eAXC ID 字段位宽设置为 4、1、3、8,eAXC ID 设置为 0000

注释:对于一个 eAxC 通道,ID 应从 0000 开始。ORAN IP 不接受 0001。
7.现在,为 Signal Studio Pro 中配置的所有载波分配 eAxC ID。如果不执行此操作,后续步骤将出现错误:

8.导出激励文件。此步骤会生成 pcap 文件,即在 O-DU (Keysight) 和 O-RU(ZCU102 评估板)之间传输的以太网数据包

9.单击“Load Stimulus”(加载激励文件),然后单击“Play”(运行)。

10.Keysight 设置至此已完成,现在我们需要启动 ZCU102 评估板。
启动评估板后,我们可以参考 xorif-apps 示例,以了解如何配置 ORAN IP。
注释:“xorif-app -help”可显示 xorif-app 的帮助菜单

a. 首先,我们需要连接套接字 eth0:
xorif-app -v -s -i -e eth0 &

b. xorif-app 服务器需要先进行初始化,然后才能正确接受大部分命令。
xorif-app -v -c init

c. 现在,我们来运行命令以配置载波设置
## set eAxC_id <DU bits> <BS bits> <CC bits> <RU bits>
xorif-app -c "set eAXC_id 4 1 3 8"
eAXC_id 应与第 6 步中的 GUI 设置保持一致。
## set ru_ports <RU bits> <ss bits> <mask> <user value> <PRACH value> <SSB value>
xorif-app -c "set ru_ports 8 5 192 0 128 64"
注释:这用于设置 RU 端口 ID。
例如,如果使用 xorif_set_ru_ports (8, 5, 0xC0, 0, 0x80, 0x40),则需要对值 0xC0 与其他掩码位执行与运算。
PRACH 掩码为 0x80,因此 ID 为 0xC0 AND 0x80 = 1000 0000(二进制),[7:6] 为 10(二进制)=2 (十进制),这是最终的 RU_Port_ID。
如果将 PRACH 掩码设置为 0xC0,与运算所得出的值为 1100 0000,[7:6] 为 11(二进制)=3(十进制),那么最终的 RU_Port_ID 为 3。
在本篇博文中,用户值为 0。对已定义的位进行掩码处理后,RU 端口 ID 为 0000。这就是非 PRACH 数据的值,与第 6 步中设置的值一致。
## CC 0 配置
xorif-app -c “set numerology 0 1 0”
xorif-app -c “set num_rbs 0 40”
xorif-app -c “set ul_iq_compression 0 0 0”
xorif-app -c “set dl_iq_compression 0 0 0”
xorif-app -c “set time_advance 0 160 125 125”
xorif-app -c “set dl_sections_per_sym 0 10”

xorif-app -c “configure 0”
xorif-app -c “enable 0”

在执行每条命令后,status=0 表示您已成功设置 CC 配置。
如果要查看前传接口的状态,可以使用以下命令:
xorif-app -c “get fhi_stats”

如您所见,所有 DL Rx 数据包均已准时到达,这意味着收到的所有 C 层和 U 层数据包都在接收窗口内到达。
ORAN_Tx_* 值均为 0,因为我仅从 Keysight Studio 生成了 DL 通道。
本篇博文完整演示了从设计生成到评估板启动后完成 API 配置的全过程。
可从 GitHub 仓库 \oran-radio-if\doc\html 下的 index.html 中获取完整的 xorif-app API 文档

打开该文档后,转到“Modules”(模块)部分。
您会看到所有模块的列表及相关描述。

现在,轮到您来尝试不同的命令了。
祝您操作愉快!