【xilinx】Versal启动文件简述 pdi bif

2023-09-22 15:46:42

Versal启动文件简述
FPGA开发圈2022-12-22 16:09400浏览0评论0点赞
作者:MacMahon Stephen,AMD赛灵思开发者

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.0
mask_write 0xff0b0018 0x1 0x1
mask_write 0xff0b02c4 0x1 0x1
mask_write 0xff0b02c8 0x1 0x1
mask_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 启动文件,供用户以此作为起点,按需进一步深入调研。

参考资料:
https://china.xilinx.com/support/documentation/architecture-manuals/am011-versal-acap-trm.pdf
https://www.xilinx.com/support/documentation/sw_manuals/xilinx2020_1/ug1304-versal-acap-ssdg.pdf

后续内容
如何在 Vitis 中调试 Versal PLM
在这篇博文中,我们将探讨如何在 Vitis™ 中调试 Platform Loader Manager (PLM)。

更多推荐

按文件大小批量分类保存,高效管理你的文件!

作为一名文件管理者,你是否经常为如何高效地管理大量文件而烦恼?现在,我们为你提供了一种简单、快速、准确的方法,帮助你轻松解决这个问题!首先。进入文件批量改名高手主页面,并在板块栏里选择“文件智能管理箱”板块。第二步,进入板块之后,我们要点击上方的“文件批量管理任务”。再点击“添加文件”在弹出的文件框里将文件夹里不同类型

[正确重装docker] Win10 重装 Docker 提示 Exising installation is up to date 的正确姿势

Win10重装Docker报错Exisinginstallationisuptodate的一种情况是原来的docker没有卸载干净,或者说,没有正确卸载。巧了,我就是直接删除了,因为一些原因重装了好几次,血泪史留给各位嘲笑。一条正确的卸载命令就能够干净地卸载docker。如果你安装docker一直安装不上,请检查自己的

【Git】万字git与gitHub

🎄欢迎来到@边境矢梦°的csdn博文🎄🎄本文主要梳理在git和GitHub时的笔记与感言🎄🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆Ps:月亮越亮说明知识点越重要(重要性或者难度越大)🌑🌒🌓🌔🌕目录🌸git是分布式版本控制软

Gof23设计模式之状态模式

1.概述【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。publicinterfaceILift{//电梯的4个状态//开门状态pu

微信小程序——常用组件的属性介绍

常用的组件内容标签text文本组件类似于HTML中的span标签,是一个行内元素rich-text富文本标签支持把HTML字符串渲染为WXML结构text标签的基本使用通过text组件的selectable属性,实现长按选中文本内容的效果。只有text标签支持长按选中效果,其他的组件是不支持的结构内容代码:<viewc

基于TensorFlow+CNN+协同过滤算法的智能电影推荐系统——深度学习算法应用(含微信小程序、ipynb工程源码)+MovieLens数据集(二)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.模型训练1)数据集分析2)数据预处理相关其它博客工程源代码下载其它资料下载前言本项目专注于MovieLens数据集,并采用TensorFlow中的2D文本卷积网络模型。它结合了协同过滤算法来计算电影之间的余弦相似度,并通过用户的交互方式,以单击电影的方式,提供

npm发布vue3自定义组件库--方法一

npm发布vue3自定义组件库创建项目vuecreatetest-ui自定义组件创建自定义组件,组件名称根据你的需求来,最好一个组件一个文件夹,下图是我的示例。src/components组件和你写页面一样,所谓组件就是方便实用,不用重复搬动页面到不同的项目,可以直接install到你本地的项目,下图是一个示例。编写完

CRC校验原理与FPGA实现(含推导过程)

CRC校验原理与FPGA实现(含推导过程)写在前面一、CRC校验原理1.1CRC校验基本概念1.2CRC校验计算1.2.1发送端CRC校验码计算1.2.1.1CRC校验码计算方法1.2.1.2CRC校验码计算例子1.2.2接收端CRC校验1.2.2.1校验通过1.2.2.2数据段出错1.2.2.3CRC校验码段出错二、

有没有免费的云渲染平台?哪家云渲染平台收费更合理?

如今,越来越多的设计师开始使用云渲染平台来加快渲染速度并降低成本。许多人都想知道是否有免费的云渲染平台,或者说哪家云渲染平台收费更合理。在本文中,小编将详细介绍这些问题,帮助您更好地了解和选择适合您需求的云渲染平台。一、有免费的云渲染平台吗?首先,目前市面上没有完全免费的云渲染平台。这是因为云渲染平台建设和维护都需要资

Learn Prompt-ChatGPT 精选案例:广告文案

ChatGPT可以帮助我们生成广告文案和宣传图片,这对营销品牌建设很有帮助。通常,一个产品会有一个主要的广告词,传达设计理念或宣传产品的好处。我们可以尝试直接生成文案,看看ChatGPT有没有好的创意。假设我们的产品是一款登山鞋,我们要怎么得到令人满意的文案和宣传图片呢?背景查询​ChatGPT能帮助你快速熟悉一个领域

分享一个基于微信小程序的社区生活小助手源码调试和lw,有java+python双版本

💕💕作者:计算机源码社💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流!💕💕学习资料、程序开发、技术解答、文档报告💕💕如需要源码,可以扫取文章下方二维码联系咨询💕💕JavaWeb项目💕💕微信小程序项目💕💕

热文推荐