FPGA_动态功能切换_UltraScale 基本 DFX 流程
UltraScale 基本 DFX 流程。目前动态可重构(Partial Reconfiguration) 已经更名为DFX(Dynamic Function eXchange, 动态功能切换),方便软件工程师也能更容易理解这个Feature.
本流程介绍 UltraScale™ 和 UltraScale+™ 器件的基本动态函数交换 (DFX) 流程。首先,您将使用脚本单独综合静态模块和每个可重新配置的设计模块变体。然后在 IDE 中,您将使用 Pblock 约束可重配置模块 (RM) 的位置并实现设计的初始配置。接下来,您将通过锁定设计的静态部分、使用变体更新可重新配置模块以及重新运行实现来实现替代配置。最后,您将验证每个实现的 RM 是否与设计的静态部分兼容,如果兼容,则生成比特流。
一、解压例程
根据ug947文档提示在赛灵思官网下载例程压缩包,定位到 \led_shift_count_us 文件夹为UltraScale系列例程,在2020.1版本中仅支持vcu118,在2022.1版本中新增了支持。需要注意的是例程是为KCU105, VCU108, KCU116, and VCU118这四块板子定做的。因为反正都没有,不上板的情况下使用2022版本例程文件学习。
二、检查脚本
首先查看设计档案中提供的脚本。文件 run_dfx.tcl 和 advanced_settings.tcl 位于根级别。 run_dfx.tcl 脚本包含运行 Dynamic Function eXchange 所需的最低设置。 advanced_settings.tcl 包含默认流设置,只能由有经验的用户修改。
1. 主脚本:
在 \led_shift_count_us 中,在文本编辑器中打开 run_dfx.tcl。这是您定义设计参数、设计源和设计结构的主脚本。这是编译完整的 Dynamic Function eXchange 设计时必须修改的唯一文件。在位于 Tcl_HD 子目录的 README.txt 中查找有关 run_dfx.tcl、advanced_settings.tcl 和底层脚本的更多详细信息。文件具体如下:
run_dfx.tcl
###############################################################
### Minimum settings required to run DFX flow:
### 1. Specify flow steps
### 2. Define target board
### 3. Identify source directories
### 4. Define static module
### 5. Define RPs, and their RM variants
###############################################################
####flow control (1 = run step , 0 = skip step)
set run.topSynth 1 ;#synthesize static
set run.rmSynth 1 ;#synthesize RM variants
set run.dfxImpl 0 ;#implement each static + RM configuration
set run.prVerify 0 ;#verify RMs are compatible with static
set run.writeBitstream 0 ;#generate full and partial bitstreams
###############################################################
### Define target demo board
### Valid values are kcu105, vcu108, kcu116 and vcu118
### Select one only
###############################################################
set xboard "kcu105"
###############################################################
### Run Settings
###############################################################
####Input Directories
set srcDir "./Sources"
set rtlDir "$srcDir/hdl"
set prjDir "$srcDir/prj"
set xdcDir "$srcDir/xdc"
set coreDir "$srcDir/cores"
set netlistDir "$srcDir/netlist"
####Output Directories
set synthDir "./Synth"
set implDir "./Implement"
set dcpDir "./Checkpoint"
set bitDir "./Bitstreams"
###############################################################
### Static Module Definition
###############################################################
set top "top"
###############################################################
### RP & RM Definitions (Repeat for each RP)
### 1. Define Reconfigurable Partition (RP) name
### 2. Associate Reconfigurable Modules (RMs) to the RP
###############################################################
set rp1 "shift"
set rm_variants($rp1) "shift_right shift_left"
set rp2 "count"
set rm_variants($rp2) "count_up count_down"
########################################################################
### RM Configurations (Valid combinations of RM variants)
### 1. Define initial configuration: rm_config(initial)
### 2. Define additional configurations: rm_config(xyz)
########################################################################
set module1_variant1 "shift_right"
set module2_variant1 "count_up"
set rm_config(initial) "$rp1 $module1_variant1 $rp2 $module2_variant1"
set module1_variant2 "shift_left"
set module2_variant2 "count_down"
set rm_config(reconfig1) "$rp1 $module1_variant2 $rp2 $module2_variant2"
########################################################################
### Task / flow portion
########################################################################
# Build the designs
source ./advanced_settings.tcl
source $tclDir/run.tcl
#exit ;#uncomment if running in batch mode
请注意此run_dfx.tcl 中的以下详细信息:
- 在Define target demo board 下,您可以选择此设计支持的众多演示板之一。
- 在flow control下,您可以控制运行综合和实现的哪些阶段。在本教程中,脚本只运行合成;实现、验证和比特流生成以交互方式运行。要通过脚本运行这些附加步骤,请将流变量(例如,run.prImpl)设置为 1。
- Output Directories and Input Directories设置设计源和结果文件的预期文件结构。您必须在此处反映对文件结构的任何更改。
- Top Definition和RP Module Definitions部分让您可以参考设计每个部分的所有源文件。顶层定义涵盖了静态设计所需的所有资源,包括约束和 IP。 RP Module Definitions 部分对 Reconfigurable Partitions (RP) 执行相同的操作。识别每个 RP 并列出每个 RP 的所有可重构模块 (RM) 变体。
- 此设计有两个 Reconfigurable Partitions(inst_shift 和 inst_count),每个 RP 有两个模块变体。
- Configuration Definition部分定义构成配置的静态和可重新配置模块集。
- 此设计在主脚本中定义了两种配置:config_shift_right_count_up_implement 和 config_shift_left_count_down_import。
- 您可以通过添加 RM 或组合现有 RM 来创建更多配置。
2. 子脚本:
在 Tcl_HD 子目录下,存在几个辅助的 Tcl 脚本。这些脚本由 run_dfx.tcl 调用,它们管理 Dynamic Function eXchange 流的特定细节。下面提供了一些关于一些关键 DFX 脚本的详细信息。(官方文档中提示禁止修改这些脚本,只能修改主脚本参数)
- step.tcl:通过监控检查点来管理设计的当前状态。
- synthesize.tcl:管理关于综合阶段的所有细节。
- implement.tcl:管理有关模块实现阶段的所有细节。
- dfx_utils.tcl:管理有关DFX 设计顶层实现的所有细节。
- run.tcl:启动综合和实现的实际运行。
- log_utils.tcl:处理流程中关键点的报告文件创建。
- 其余脚本在这些脚本中提供详细信息(例如其他 *_utils.tcl 脚本)或管理其他分层设计流程(例如 hd_utils.tcl)。
三、综合设计
run_dfx.tcl 脚本自动完成本教程的综合阶段。调用了五次综合迭代,一次用于静态顶层设计,一次用于四个可重配置模块中的每一个。
-
打开 Vivado Tcl shell:
- 在 Windows 上,选择 Xilinx Vivado 桌面图标或开始 → 所有程序 → Xilinx 设计工具 → Vivado 2022.1 → Vivado 2022.1 Tcl Shell。
- 在Linux 上,只需键入vivado -mode tcl。
-
在 shell 中,导航到 \led_shift_count_us。
-
如果您使用的目标演示板不是 KCU105,请修改 run_dfx.tcl 中的 xboard 变量。有效的替代品是 VCU108、KCU116 和 VCU118 板。
-
输入以下命令运行 run_dfx.tcl 脚本:
source run_dfx.tcl -notrace
完成所有五次 Vivado 综合后,Vivado Tcl shell 保持打开状态。您可以在 Synth 子目录中的每个命名文件夹下找到每个模块的日志和报告文件,以及最终检查点。
提示:在 \led_shift_count_us 中,创建了多个日志文件:
• run.log 显示发布在 Tcl shell 窗口中的摘要
• command.log 回显脚本运行的所有单独步骤
• critical.log 报告在运行期间产生的所有严重警告运行
打开tcl控制台,切换到目标目录,注意路径采用 / 分隔而不是资源管理器直接复制来的 \ 。执行source run_dfx.tcl -notrace命令,可以看到vivado在进行5次综合。
一段时间后综合完成:
四、组装和实现设计
现在每个模块的综合检查点以及顶部都可用,您可以组装设计。
您将从 Tcl 控制台运行所有流程步骤,但您可以使用 IDE 中的功能(例如布局规划工具)进行交互式事件。
-
打开 Vivado IDE。您可以通过键入 start_gui 或使用命令 vivado -mode gui 启动 Vivado 从打开的 Tcl shell 打开 IDE。
-
导航到
\led_shift_count_7s(很明显官方文档书写错误,U+系列的应该还是\led_shift_count_us,估计写文档的在复制粘贴 -.- )。如果您还没有。 pwd 命令可以确认这一点。 -
设置有助于将本文档中的命令复制到 Tcl 控制台的变量。选择您针对此教程的器件和电路板,然后在 Vivado 中应用它们:
set part "xcku040-ffva1156-2-e" set board "kcu105" set part "xcvu095-ffva2104-2-e" set board "vcu108" set part "xcku5p-ffvb676-2-e" set board "kcu116" set part "xcvu9p-flga2104-2l-e" set board "vcu118"
-
通过在 Tcl 控制台中发出以下命令创建内存中设计: create_project -in_memory -part $part
-
通过发出以下命令加载静态设计: add_files ./Synth/Static/top_synth.dcp
-
加载通过发出以下命令设置顶层设计约束:
add_files ./Sources/xdc/top_io_$board.xdc set_property USED_IN {implementation} [get_files ./Sources/xdc/top_io_ $board.xdc]
选择 top_io_$board 版本的可用的 xdc 文件加载管脚位置和时钟约束,但不包括布局规划信息。 top_$board 版本包括引脚位置、时钟和布局规划约束。
-
通过发出以下命令为 shift 和 count 函数加载前两个综合检查点:
add_files ./Synth/shift_right/shift_synth.dcp set_property SCOPED_TO_CELLS {inst_shift} [get_files ./Synth/shift_right/shift_synth.dcp] add_files ./Synth /count_up/count_synth.dcp set_property SCOPED_TO_CELLS {inst_count} [get_files ./Synth/count_up/count_synth.dcp]
SCOPED_TO_CELLS 属性确保对目标单元进行正确分配。如需了解更多信息,请参阅 Vivado Design Suite 用户指南:使用约束 (UG903) 中的此链接。
-
使用 link_design 命令将整个设计链接在一起:
link_design -mode default -reconfig_partitions {inst_shift inst_count} -part $part -top top
此时加载了完整的配置,包括静态和可重新配置的逻辑。请注意,当您在非项目模式下工作时,Flow Navigator 窗格不存在。
提示:通过选择布局 → 布局规划将 IDE 置于布局规划模式。确保“设备”窗口可见。
-
保存此初始配置的组装设计状态:
write_checkpoint ./Checkpoint/top_link_right_up.dcp
配置完成后界面如下:
五、建立设计平面图
接下来,创建一个平面图来定义 Dynamic Function eXchange 的区域。
-
在 Netlist 窗口中选择 inst_count 实例。右键选择Floorplanning→Draw Pblock,在设备左上角左侧画一个高的窄框。此时,确切的大小和形状并不重要,但请将框保持在时钟区域内。
在继续之前,请确保在 Device 窗口中选择了 Pblock。
尽管此 Reconfigurable Module 仅需要 CLB 资源,但如果框包含这些类型,还包括 RAMB18、RAMB36 或 DSP48 资源。这允许这些块类型的路由资源包含在可重新配置区域中。如果需要,可以使用 Pblock Properties 窗口的 General 视图添加这些。 Statistics 视图显示当前加载的 Reconfigurable Module 的资源需求。
-
对 inst_shift 实例重复上一步,这次针对第一个下方的时钟区域。此 Reconfigurable Module 包含 Block RAM 实例,因此必须包含资源类型。如果省略,统计视图中的 RAMB 详细信息将显示为红色。
-
通过选择 Reports → Report DRC 运行 Dynamic Function eXchange 设计规则检查。您可以取消选中所有规则,然后选中 Dynamic Function eXchange 以使此报告严格关注 DFX DRC。
只要 inst_shift Pblock 包含 RAMB18 和 RAMB36 资源,就不应报告 DRC 错误。可能仍会报告建议消息,尤其是当 Pblock 位于设备边缘附近时。请注意,对于两个 Pblock,SNAPPING_MODE 都设置为 ON,如 Pblock Properties 窗口的 Properties 视图中所述。鉴于此架构中可编程单元的精细粒度,所有 UltraScale 和 UltraScale+ 设备始终启用此功能。
-
保存这些 Pblock 和相关属性:
write_xdc ./Sources/xdc/top_all.xdc
这会导出设计中的所有当前约束,包括之前从 top_io_$board.xdc 导入的约束。这些约束可以在它们自己的 XDC 文件中管理或在运行脚本中管理(通常使用 HD.RECONFIGURABLE 完成)。
或者,可以单独提取和管理 Pblock 约束本身。 Tcl proc 可用于帮助执行此任务。a. 首先获取在 Tcl 实用程序文件之一中找到的 proc:
source ./Tcl_HD/hd_utils.tcl
b. 然后使用 export_pblocks proc 写出此约束信息:
export_pblocks -file ./Sources/xdc/pblocks.xdc
这将为设计中的两个 Pblock 写入 Pblock 约束信息。如果需要,使用 pblocks 选项仅选择一个。
六、实现第一个配置
在此步骤中,您对设计进行布局和布线,并准备设计的静态部分,以便与新的可重配置模块一起重复使用。
设计实现
- 通过发出以下命令来优化、布局和布线设计:
opt_design
place_design
route_design
在 place_design 和 route_design 之后,在 Device 视图中检查设计的状态(参见下图)。在 place_design 之后需要注意的一件事是引入了分区引脚。这些是静态和可重新配置逻辑之间的物理接口点。它们是互连块中的锚点,可重配置模块的每个 I/O 都必须通过这些锚点进行路由。它们在放置的设计视图中显示为白框。对于 pblock_shift,它们出现在该 Pblock 的顶部,因为到静态的连接就在设备该区域的 Pblock 之外。对于 Pblock_count,它们出现在用户定义的区域之外,因为 SNAPPING_MODE 垂直收集了更多要添加到 Reconfigurable Partition 的帧。
- 要在 GUI 中轻松找到这些分区引脚:
a. 在 Netlist 窗格中选择 Reconfigurable Module(例如,inst_shift)
b. 在Cell Properties窗格中选择Cell Pins选项卡。 - 选择任何引脚以突出显示它,或使用 Ctrl+A 全选。后者的 Tcl 等效项是:
select_objects [get_pins inst_shift/*]

- 使用 Routing Resources 工具栏按钮在抽象和实际路由信息之间切换,并更改路由资源本身的可见性。此时设计中的所有网络都已完全布线。
保存结果
-
通过发出以下命令保存完整的设计检查点并创建报告文件:
write_checkpoint -force Implement/Config_shift_right_count_up_implement/top_route_design.dcp report_utilization -file Implement/Config_shift_right_count_up_implement/top_utilization.rpt report_timing_summary -file Implement/Config_shift_right_count_up_implement/top_timing_summary.rpt
-
[可选] 通过发出以下两个命令为每个可重新配置模块保存检查点:
write_checkpoint -force -cell inst_shift Checkpoint/shift_right_route_design.dcp write_checkpoint -force -cell inst_count Checkpoint/count_up_route_design.dcp
提示:运行 run_dfx.tcl 以批处理模式处理整个设计时,会在流程的每个步骤中创建设计检查点、日志文件和报告文件。
至此,您已经创建了一个完全实现的 Dynamic Function eXchange 设计,您可以从中生成全部和部分比特流。此配置的静态部分用于所有后续配置。要隔离静态设计,请移除当前的 Reconfigurable Modules。确保启用路由资源,并放大到带有分区引脚的互连块。
-
通过发出以下命令清除 Reconfigurable Module 逻辑:
update_design -cell inst_shift -black_box update_design -cell inst_count -black_box
发出这些命令会导致许多设计更改,如下图所示:
• 全布线网络(绿色)的数量减少。
• inst_shift 和inst_count 现在在网表视图中显示为空。
关闭项目
-
发出以下命令以锁定所有布局和布线:
lock_design -level routing
因为在 lock_design 命令中没有识别出单元,所以内存中的整个设计(当前包括带有黑盒的静态设计)都会受到影响。所有布线网络现在都显示为锁定,如图 第7节图 中的虚线所示。所有放置的组件都从蓝色变为橙色,表明它们也被锁定。
-
发出以下命令以写出(write out)剩余的仅静态检查点:
write_checkpoint -force Checkpoint/static_route_design.dcp
此仅静态检查点用于将来的配置。
-
在继续下一个配置之前关闭此设计:
close_project
七、实施第二个配置
现在静态设计结果已建立并锁定,您可以将其用作实现更多可重构模块的上下文。
设计实现
-
通过在 Tcl 控制台中发出以下命令来创建新的内存设计:
create_project -in_memory -part $part
-
通过发出以下命令加载静态设计:
add_files ./Checkpoint/static_route_design.dcp
-
通过发出以下命令为移位和计数函数加载后两个综合检查点:
add_file ./Synth/shift_left/shift_synth.dcp set_property SCOPED_TO_CELLS {inst_shift} [get_files ./Synth/shift_left/shift_synth.dcp] add_file ./Synth/count_down/count_synth.dcp set_property SCOPED_TO_CELLS {inst_count} [get_files ./Synth/count_down/count_synth.dcp]
-
使用 link_design 命令将整个设计链接在一起:
link_design -mode default -reconfig_partitions {inst_shift inst_count} -part $part -top top
此时,已加载完整配置。然而,这一次,静态设计被路由和锁定,可重构逻辑仍然只是一个网表。此处的布局和布线仅适用于 RM 逻辑。
-
通过发出以下命令,在静态上下文中优化、放置和路由新的 RM:
opt_design place_design route_design
该设计再次完全实现,现在使用新的可重构模块变体。布线是虚线(锁定)和实线(新)布线段的混合,如下所示。
保存结果
-
通过发出以下命令保存完整的设计检查点和报告文件:
write_checkpoint -force Implement/Config_shift_left_count_down_import/top_route_design.dcp report_utilization -file Implement/Config_shift_left_count_down_import/top_utilization.rpt report_timing_summary -file Implement/Config_shift_left_count_down_import/top_timing_summary.rpt
-
[可选] 通过发出以下两个命令为每个可重新配置模块保存检查点:
write_checkpoint -force -cell inst_shift Checkpoint/shift_left_route_design.dcp write_checkpoint -force -cell inst_count Checkpoint/count_down_route_design.dcp
至此,您已经实现了静态设计和所有 Reconfigurable Module 变体。对于每个可重构分区具有两个以上可重构模块的设计,将重复此过程。
八、使用高亮显示脚本检查结果
在 IDE 中打开路由配置后,运行一些可视化脚本以突出显示拼贴和网络。这些脚本标识为 Dynamic Function eXchange 分配的资源并自动生成。
-
在 Tcl 控制台中,从 \led_shift_count_us 目录发出以下命令:
source hd_visual/pblock_inst_shift_Routing_AllTiles.tcl highlight_objects -color green [get_selected_objects]
-
单击设备视图中的某处以取消选择框架(或输入 unselect_objects),然后发出以下命令:
source hd_visual/pblock_inst_shift_Placement_AllTiles.tcl source hd_visual/pblock_inst_count_Placement_AllTiles.tcl highlight_objects -color blue [get_selected_objects]
分区帧在设备视图中高亮显示,如下图所示。
这些突出显示的图块代表用于每个 RM 的布局(蓝色)和布线(绿色)的配置框架。绿色瓦片被发送到比特流生成以创建部分比特流(用于 inst_shift)。 SNAPPING_MODE 功能调整了 pblock_shift 的四个边缘中的三个,以说明与可编程单元边界的对齐。这种捕捉行为解释了为什么静态逻辑似乎已放置在可重新配置的分区内,如前面的步骤所示。实际上,有效边界是比用户定义的 Pblock 边界指示的 CLB 行高 1 行,因此这个静态逻辑放置正确。这个有效边界也可以在创建过程中 Pblock 的阴影中看到,如步骤 5:构建设计平面图所示。注意:包括与 Pblock 宽度匹配的 RCLK 行。这些可重配置分区中的全局时钟驱动逻辑连接到贯穿这些行的主干,并在动态功能交换期间启用或禁用。
其他“平铺”脚本是这些脚本的变体。如果您没有创建与时钟区域边界垂直对齐的 Pblock,FrameTiles 脚本将突出显示显式 Pblock 块,而 AllTiles 脚本将这些块扩展到完全可重新配置的帧高度。请注意,这些会在未选择的帧类型(例如全局时钟)存在的地方留下间隙。
GlitchTiles 脚本是框架站点的子集,避免了专用的硅资源;其他脚本比这个提供更多信息。 -
关闭当前设计:
close_project
九、生成比特流
确认配置
建议:在生成比特流之前,验证所有配置以确保每个配置的静态部分完全匹配,因此生成的比特流可以安全地在硅片中使用。 PR 验证功能检查完整的静态设计,包括分区引脚,确认它们是相同的。未检查可重配置模块内的布局和布线,因为此处预计会有不同的模块结果。
- 从 Tcl 控制台运行 pr_verify 命令:
如果成功,此命令将返回以下消息。pr_verify Implement/Config_shift_right_count_up_implement/top_route_design.dcp Implement/Config_shift_left_count_down_import/top_route_design.dcp
INFO: [Vivado 12-3253] PR_VERIFY: check points Implement/Config_shift_right_count_up/top_route_design.dcp and Implement/Config_shift_left_count_down/top_route_design.dcp are compatible
默认情况下,仅报告第一个不匹配(如果有)。要查看所有不匹配,请使用 full_check 选项。 - 关闭当前设计:
close_project
生成比特流
现在配置已经过验证,您可以生成比特流并使用它们来定位您选择的演示板。
注意:第一个配置实现 shift_right 和 count_up。第二个配置实现 shift_left 和 count_down。
- 将第一个配置读入内存:
open_checkpoint Implement/Config_shift_right_count_up_implement/top_route_design.dcp
- 为该设计生成全部和部分比特流。确保将位文件保存在与创建它们的完整设计检查点相关的唯一目录中。
请注意,已创建五个(或三个,如果您使用的是 UltraScale+™ 设备)比特流:write_bitstream -force -file Bitstreams/Config_RightUp.bit close_project
- Config_RightUp.bit 这是上电的完整设计比特流。右侧的四个移位 LED 将向右移动,左侧的四个计数 LED 将向上计数。
- Config_RightUp_pblock_inst_shift_partial.bit 这是 shift_right 模块的部分位文件,它导致移位 LED 右移。
- Config_RightUp_pblock_inst_count_partial.bit 这是导致count LED 向上计数的count_up 模块的部分位文件。
- Config_RightUp_pblock_inst_shift_partial_clear.bit 这是仅用于 UltraScale 器件的 shift_right 模块的清除位文件。它安全地清除右移以允许重新配置移位模块。
- Config_RightUp_pblock_inst_count_partial_clear.bit 这是仅用于 UltraScale 器件的 count_up 模块的清除位文件。它安全地清除向上计数以允许重新配置计数模块。
重要的!当通过一次调用 write_bitstream 生成时,位文件的名称当前不反映 Reconfigurable Module 变体的名称,以阐明加载了哪个图像。当前解决方案使用 -file 选项给出的基本名称并附加可重构单元的 Pblock 名称。在基本名称中提供足够的描述以便能够清楚地识别可重新配置的位文件是至关重要的。所有部分位文件都有 _partial 后缀,所有清除位文件都有 _partial_clear 后缀。
使用 run_dfx.tcl 通过比特流生成来处理整个设计,使用不同的技术来生成比特流。打开路由设计检查点会发出对 write_bitstream 的多次调用,这使您可以更好地控制命名比特流,并允许将不同的选项(如比特流压缩)应用于完整比特流和部分比特流。例如,run_dfx.tcl 脚本中配置的名称为:
- Config_shift_right_count_up_implement_full.bit 这是上电的完整设计比特流。
- pblock_shift_shift_right_partial.bit 这是 shift_right 模块的部分位文件。
- pblock_count_count_up_partial.bit 这是count_up 模块的部分位文件。
- pblock_shift_shift_right_partial_clear.bit 这是仅用于 UltraScale 器件的 shift_right 模块的清除位文件。
- pblock_count_count_up_partial_clear.bit 这是仅用于 UltraScale 器件的 count_up 模块的清除位文件。
-
为第二个配置生成完整和部分比特流,再次将生成的比特文件保存在适当的文件夹中。
open_checkpoint Implement/Config_shift_left_count_down_import/top_route_design.dcp write_bitstream -force -file Bitstreams/second/Config_LeftDown.bit close_project
类似地,创建了五个(或三个)比特流,这一次具有不同的基本名称。
-
生成带有灰色框的完整比特流,以及可重构模块的消隐比特流。消隐比特流可用于“擦除”现有配置以降低功耗。
注意:灰盒消隐比特流与清除比特流不同。需要清除比特流来为下一个部分比特流准备全局信号掩码,确保 GSR 事件正确发生。
open_checkpoint Checkpoint/static_route_design.dcp update_design -cell inst_count -buffer_ports update_design -cell inst_shift -buffer_ports place_design route_design write_checkpoint -force Checkpoint/config_grey_box.dcp write_bitstream -force -file Bitstreams/config_grey_box.bit close_project
基本配置比特流没有任何可重新配置分区的逻辑。此处的 update_design 命令为可重配置分区的所有输出插入恒定驱动器(接地),因此这些输出不会浮动。术语灰色框表示插入这些 LUT 的模块并非完全为空,与黑色框相反,黑框在该区域内外都有悬空网络。 place_design 和 route_design 命令确保它们被完全实现。作为有效的可重配置模块,请注意,这些实例还具有仅用于 UltraScale 设备的清除比特流。
十、部分重新配置 FPGA
没有测试板子,暂时不过这一节
参考:ug947-2022.1