当前位置:首页 > 二手市场 > 正文内容

DFX RTL RP非工程模式编写脚本的基本要求

云智网2026-11-10二手市场4332

本文作者:AMD 工程师Marc Bernhard

通过为 AMD VivadoDesign Suite 设计编写脚本,可以减少不必要的重复 GUI 操作,从而加快设计周期。对于 Dynamic Function eXchange (DFX) 流程也是如此;但是,与非 DFX 或扁平设计相比,DFX 需要额外的命令。本文将回顾为非工程模式 DFX 设计编写脚本的基本要求。如需了解更深入的信息,请参阅 DFX 指南 (UG909) 和教程指南 (UG947)。本文将介绍包含基于 RTL 的可重配置分区的 DFX 设计。本文面向 Vivado 2025.1。

《AMD Vivado Design Suite 用户指南:Dynamic Function eXchange》(UG909):

https://docs.amd.com/r/en-US/ug909-vivado-partial-reconfiguration/Introduction

《AMD Vivado Design Suite 教程:Dynamic Function eXchange》(UG947):

https://docs.amd.com/r/en-US/ug947-vivado-partial-reconfiguration-tutorial/Introduction

在此示例中,我们使用 DFX 教程“DFX RTL 工程流程”实验 3 中的设计文件。但是,这里不使用 UG947 教程中所示的 DFX 工程,而是使用非工程命令。要运行该示例:

1.解压 dfx_ex_non_prj_mode_scripted.zip。

2.使用“vivado -source ./run_non_project_mode.tcl”启动 Vivado

DFX RTL 工程流程:

https://docs.amd.com/r/2025.2-English/ug947-vivado-partial-reconfiguration-tutorial/DFX-RTL-Project-Flow

非工程模式

选择非工程模式 DFX 流程可以让您完全控制设计过程,而不是依赖自动化程度更高的托管式工程模式。这使您能够:

确定所需的报告

避免工程模式的文件结构

仅在您确定的步骤写出检查点,从而有可能节省磁盘空间。

避免工程模式对 DFX 设计造成任何限制

首先设置几个变量并创建一个输出目录,以便将检查点 (DCP) 和 bitfile 分开保存。

b468e246-d776-11f1-8a4b-92fbcf53809c.png

多次执行综合构建

下一步是运行综合。对于 DFX,必须将静态区域与每个可重配置模块 (RM) 分开综合。在非工程环境中这样做意味着要对静态区域和多个 RM 分别运行综合。下面显示了对一个 RM 进行综合并写出检查点 (DCP) 的命令。此处仅列出了一个 RM 综合部分,但在随附存档中的脚本里有多个此类部分。

对于 RM,必须使用“-mode out_of_context”实参对逻辑进行综合,以防止缓冲器插入。

“set_part”命令会设置设计部件,供 synth_design 稍后使用。

请注意,其中有一个被注释掉的部分,它会读入块设计并生成输出文件。虽然本教程不使用任何 .bd 文件,但可以在 RM 中添加 .bd 源文件。这与工程模式 DFX 不同,在工程模式 DFX 中,不支持在 RM 内使用 .bd 源文件。

接下来需要对静态逻辑进行综合。请注意,由于在全局静态综合期间,RM 区域是一个黑盒,因此需要一个存根文件“shift_stub.v”,但该存根文件有助于定义每个端口的位宽和方向。

b514d81c-d776-11f1-8a4b-92fbcf53809c.png

第一轮配置实现

现在该将静态网表和 RM 网表合并,以形成第一轮实现运行。这称为第一轮配置(父)实现,它会确定用于实现任何附加 RM 逻辑的已布局布线的静态逻辑。这里有几个关键细节。

该脚本使用 UG909 中的方法 1 来对综合后的网表进行合并。使用 open_checkpoint 加上 read_checkpoint -cell 也同样可行,但在整个脚本中使用这些命令时应保持一致。

这里使用了 link_design 的“-reconfig_partitions”实参来定义所有可重配置分区 (RP)。在这种情况下,有 2 个 RP。您可以移除此实参,但随后需要在 XDC 文件中添加以下属性:

set_property HD.RECONFIGURABLE 1 [get_cells [list inst_shift_high inst_shift_low]]

使用 SCOPED_TO_CELLS 命令可告知 Vivado 在静态设计中用哪个 RM 检查点填充哪个黑盒。

单个 write_bitstream 会同时生成完整 bitfile 和部分 bitfile,但这里使用带有 -no_partial_bitfile 和 -cell 的单独命令,以便更好地控制命名。

最后 5 条命令将每个 RP 划分为黑盒,以便后续实现可以填入新的 RM 逻辑。为了保持静态结果,有必要锁定已布线设计。

2 个 RP 与 1 个 RP 的对比

该设计使用 2 个可重配置分区 (RP),它们是 2 个物理区域,可由 RM 逻辑填充。单 RP 设计的命令会略作调整,以适应仅有 1 个 RP 这一事实。

1.例如,link_design 会指定 2 个 RP 单元。

b5cb4ee4-d776-11f1-8a4b-92fbcf53809c.png

单 RP 设计则会将其更改为:

b623b2e6-d776-11f1-8a4b-92fbcf53809c.jpg

2.对于双 RP 设计,SCOPED_TO_CELLS 属性同样会以 2 个单元为目标,而不是 1 个。

双 RP 设计通常使用 2 条 SCOPED_TO_CELLS 命令来指定这些 RP:

b6794ac6-d776-11f1-8a4b-92fbcf53809c.png

在第一轮配置(父)运行中,两个 RP 都限定到同一个 DCP,因为这两个 RP 使用的是同一个 RM:

b6d16c06-d776-11f1-8a4b-92fbcf53809c.png

单 RP 设计则会改为使用:

b72d2b0e-d776-11f1-8a4b-92fbcf53809c.png

3.此外,对于双 RP 设计,“update_design -black_box”命令需要执行 2 次,而对于单 RP 设计只需执行 1 次。

b781c7e0-d776-11f1-8a4b-92fbcf53809c.png

第二轮配置实现

第二轮配置的 DFX 实现使您能够创建额外的 RM bitfile,从而实现 DFX 的根本目标;即在持续运行的静态设计中能够动态交换逻辑区域。

此步骤使用上一步创建且已完全布线的黑盒 DCP“top_bb_routed.dcp”。

此版本为每个 RP 使用不同的 RM(shift_right_slow 和 shift_left)。第一轮配置两次使用了同一个 RM。

为了确保每个 RM bitfile 都与其加载到的静态区域兼容,需要运行 pr_verify 命令。这会检查第一轮配置与当前配置之间的静态区域是否一致。

b7e4a3e2-d776-11f1-8a4b-92fbcf53809c.png

使用灰盒

这里不会展示完整的第三轮配置,但我想指出在非工程流程中实现灰盒或未使用的 RP 的方式。update_design -buffer_ports 命令通过在黑盒中插入残桩连接(tieoff 和 LUT1)来实现这一点。

b8455ac0-d776-11f1-8a4b-92fbcf53809c.png