versal™ 是由多个高度耦合的可配置块组成的自适应计算加速平台 (acap)。这些块包括 noc、aie、pl 和 cips(cips 本身包含不同的域:lpd 和 fpd)等,启动这些块时,需使用 vivado 中的配置集进行配置。
本篇博文是 versal“从零开始”调试系列的首篇。
这么多互连块乍看之下似乎很复杂...但实际不尽然。在本篇博文中,我们将探讨这些启动文件及其使用方式。
这就切入正题...希望您不介意我用首字母缩写词。
以下我准备的一个基础设计,其中只有 cips 和 noc:
control, interfaces, and processing subsystem (cips) 是所有 versal 设计的通用 ip,包含所有 versal 器件通用的硬化 ip。
其中主要包含两个域:ldp 和 fdp。低功耗域 (lpd) 包含可配置启动器件和 i2c。全功耗域 (fpd) 则包含所有其它可配置 ip,如 gem 和 usb 等。此外还有 axi 和调试接口,连接到 pl、可配置 noc 接口、时钟、中断和处理器子系统,全都可在 vivado ip integrator 内根据您的设计需求进行配置。
片上网络 (noc) 经高度耦合,可连接到 pl ip 和/或 aie 以及 ddr 存储器控制器。
所有这些配置二进制文件 (cdo) 都封装到单一容器文件内,此文件称为 pdi 文件,pdi 表示可编程定义文件 (programmable definition file)。
pdi:
如上所述,pdi 包含所有可配置二进制文件。其中还包含用于执行这些二进制文件的可执行文件。
并且,如果 pl 包含带有存储器映射存储器控制器的 microblaze,那么 pdi 中还包含存储器映射接口 (mmi) 文件。
此 pdi 文件将在实现期间创建,并且可包含在 xsa 文件内交付至 vitis。来看看 impl_1 文件夹:
此处值得注意的两个文件是 pdi 文件和 bif 文件。
启动镜像格式:
启动镜像格式 (bif) 文件包含所有启动分区。
让我们来一探究竟:
new_bif:{ id_code = 0x04ca8093 extended_id_code = 0x01 id = 0x2 image { name = wdi_flat id = 0x1c000000 partition { id = 0x01 type = bootloader file = gen_files/executable.elf } partition { id = 0x09 type = pmcdata, load = 0xf2000000 file = gen_files/pmc_data.cdo } partition { id = 0x0c type = cdo file = gen_files/lpd_data.cdo } partition { id = 0x0b core = psm file = static_files/psm_fw.elf } partition { id = 0x03 type = cdo file = design_1_wrapper.rcdo } partition { id = 0x05 type = cdo file = design_1_wrapper.rnpi } partition { id = 0x08 type = cdo file = gen_files/fpd_data.cdo } partition { id = 0x0d type = cdo file = gen_files/subsystem.cdo } }}
下表提取自《versal 系统软件开发指南》,可用于描述其中每个分区:
pdi 组件 描述
plm elf
(executable.elf) platform loader and manager。
plm cdo
(pmc_data.cdo) 器件拓扑 - 固定配置
pmc 配置 - 寄存器写入/读取
lpd cdo
(lpd_data.cdo) ps lpd pm 初始化节点命令(sc、lbist、bisr 和 mbist)
lpd 配置 - 寄存器写入/读取
psm elf
(psm_fw.elf) psm elf
cfi 数据
(.rcdo) pm 初始化节点命令(清理 pl、hb sc 和 gt mbist)
寄存器写入 cfu
适用于 cfi 数据的 dma 锁眼传输命令
寄存器写入/读取 cfu
如无 npi:
全局信号 gmc_b、grestore 和 ghigh_b。- 寄存器写入/读取
全局信号 - gwe、eos、en_glob - 寄存器写入/读取
()
[此文件与以上 .rcdo 文件合并]
npi cdo
(.rnpi) pm 初始化节点命令(sc、bisr 和 mbist)
npi 数据加载 - dma 写入/寄存器写入
如果 cfi 存在:
全局信号 gmc_b、grestore 和 ghigh_b。- 寄存器写入/读取
npi 序列 - 寄存器写入/读取
如果 cfi 存在
全局信号 - gwe、eos、en_glob - 寄存器写入/读取
隔离和 pl 复位命令
cpm cdo
(cpm_data.cdo) pm 初始化节点命令(bisr 和 mbist)
适用于 cpm 和 cpm pcsr 的寄存器写入
aie npi cdo
(ai_engine_data.cdo) aie scan clear,bisr - pm 命令
aie pll 配置 - 寄存器写入/pm 命令
aie mem clear - pm 命令
fpd cdo
(fpd_data.cdo) fpd 配置 - pm 初始化节点命令(sc、bisr 和 mbist)
寄存器写入
子系统 cdo
(subsystem.cdo) 子系统 cdo
done 位由 plm 断言有效
转储 pdi:
用户可以在 vitis 中使用 bootgen 实用工具来转储和查看 pdi 中的内容:
bootgen -arch versal -dump .pdi
用户可以使用以下 bootgen 命令从 bif 创建 pdi:
bootgen -arch versal -image .bif -w -o .pdi
platform loader and manager:
plm 负责加载分区(如上所示)和执行平台管理。所有 cdo 都加载到 ram 中,然后执行。elf 文件直接加载到目标存储器中,然后执行。不支持就地执行。
要调试潜在的 plm 故障,可在此处的表 14 中找到错误代码。
在某些情况下,用户可能需要修改 vitis 生成的 pdi,下面提供了两个常见用例。
调试 plm:
用户可以覆盖 pdi 中的 plm,如 ug1283 中的第 129 页所述,也可以重新生成 pdi 并导出硬件以将修改后的 pdi 添加到 xsa 中。
bif 文件如下所示:
new_bif:{ image { { type = bootimage, file = base.pdi } { type = bootloader, file = plm_debug.elf } }}
随后,重新生成 pdi。请务必保留 pdi 文件名(与 vivado 生成的文件名相同):
bootgen -arch versal -image {filename.bif} -w -o {design_1_wrapper.pdi}
如果用户随后在 vivado 中导出硬件,那么,修改后的 pdi 将被添加到 xsa 中。
浏览 cdo/rnpi 文件:
用户可以使用 xsct 中的 cdoutil 将二进制文件转换为可读文本文件。以 rnpi 为例:
cdoutil -annotate -output-file dump.txt .rnpi
从上表中可以看到,rnpi 文件包含 pl 复位命令。
我们可以在转储后的文本文件中查看这些命令:
在《versal 寄存器参考资料》中可以交叉引用这些命令:
将定制 cdo 文件添加到 pdi:
用户还可以创建定制 cdo 文件,并将其添加到 pdi 中。
例如,我有一个 ip,它在 cips 上受 ps gpio 控制。
因此,我需要切换此 ps gpio:
首先创建一个 txt 文件,其中包含您希望在 pdi 内执行的寄存器写入操作:
version 2.0mask_write 0xff0b0018 0x1 0x1mask_write 0xff0b02c4 0x1 0x1mask_write 0xff0b02c8 0x1 0x1mask_write 0xff0b004c 0x1 0x1
随后,使用以下命令将此转换为 cdo 文件:
cdoutil -output-binary-be -output-file custom.cdo custom.txt
下一步,导航到 vivado 工程目录内的 .runs_0/impl_1 文件夹,打开 bif 文件,并追加以下内容(在最后一个 } 内):
image { name = custom_cdo id = 0x1234567 partition { id = 0x12 type = cdo file = custom.cdo } }
随后,重新生成 pdi 并导出至硬件,更新后的 pdi 将添加到 xsa:
bootgen -arch versal -image design_1_wrapper.bif -w -o design_1_wrapper.pdi
依次单击“file -> export hardware (include device image)”(文件 > 导出硬件(包含器件镜像))
运行 updatemem
如果 versal 设计包含 microblaze(含 lmb 存储器),并且您要使用可执行 elf 来更新 lmb bram,那么同样可以使用以上方法。例如:
浏览至 .runs/impl_0 文件夹,并运行 updatemem。例如,这里我创建了更新后的 rcdo。但您也可以保留名称不变。否则,您需要更新 bif 文件:
随后,重新生成 pdi 并导出至硬件,更新后的 pdi 将被添加到 xsa 中:
bootgen -arch versal -image design_1_wrapper.bif -w -o design_1_wrapper.pdi
依次单击“file -> export hardware (include device image)”(文件 > 导出硬件(包含器件镜像))
总结:
本篇博文并非 versal 启动文件的完整指南。
所有这些信息都能在 trm 和 ssdg 中找到。我希望本文能够向用户简要介绍 versal 启动文件,供用户以此作为起点,按需进一步深入调研。
后续内容
如何在 vitis 中调试 versal plm
在这篇博文中,我们将探讨如何在 vitis™ 中调试 platform loader manager (plm)。
广西发改委再次核准了省内风电项目建设,一次性核准6个风电项目
室内定位:UWB技术优势与行业应用
【启扬方案】畅享智能生活,快递末端配送解决方案
乐森星际特工机器人引领教育机器人新时代
CoinAll Star Project 精选上币 智能合约新秀Precium全球首发
Versal启动文件简述
基于 Sub-1 GHz 欧洲智能电网的 RF 通信
组合逻辑电路中的竞争冒险
商务笔记本电脑哪种好?看看轻薄性能好的笔记本灵越
ThreadLocal基本内容与用法
农药残留检测仪怎么用 农药残留检测仪使用方法
5G手机为何价格贵?高通专利或是根本原因
new和malloc函数详细分析底层逻辑
智慧工地管理系统解决方案
功率放大器在换能器超声发射场强测试中的应用
谷歌刚刚宣布对京东5.5亿美元投资,双方将结成广泛的战略合作伙伴关系
政策决定格局 需高度重视纯电动客车的新补贴标准
瑞萨电子收购IDT交易预计将于3月29日完成
晶体二极管crystal diode
Linux上可以使用微软Microsoft Teams了