作者: 付汉杰 hankf@xilinx.com hankf@amd.com
视频教程 https://www.xilinx.com/video/hardware/block-design-containers-for-dfx.html
Vivado Design Suite User Guide: Dynamic Function eXchange (UG909)
创建一个block design,包含基本设计,如静态区和DFX的基本设计。
在IP Integrator的右键菜单中,选择“Validate design”,验证block design。
选择DFX的基本设计的所有模块,在IP Integrator的右键菜单中,选择“Create Hierarchy”,创建一个层次化设计(hierarchy)。 选择上述层次化设计,在右键菜单中,选择“Validate design”,验证层次化设计。 这个层次化设计(hierarchy),就是DFX的层次化设计,后面会反复用到。
选择上面DFX的层次化设计,在右键菜单中,选择"create block design container"。 Vivado会创建block design container,并创建一个新的block design,可以在“Design Sources”中看到。block design container的图标,被添加到上面的层次化设计上。层次化设计里面的IP变成了只读;只能在“Design Sources”中打开对应的block design,才能编辑相关的IP。
双击上面DFX的层次化设计,在弹出的窗口中选择"Enable Dynamic Function eXchange on this container",还可以选择"Freeze the boundary of this container"。DFX的图标,也被添加到上面的层次化设计上。
有几个办法创建新的可重配模块(Reconfigurable Modules)。 第一个办法是可以选择上面的层次化设计,在右键菜单中,选择"Create Reconfigurable Modules"。Vivado会创建一个新的block design,包含相关的接口。工程师可以在此基础上继续添加IP,完成设计。 第二个办法是可以导出上面DFX的基本设计的block design的TCL,编辑TCL文件后,执行TCL文件,创建新的block design。TCL文件里的design名字,必须更改。这种办法,可以在之前设计的基础上,再添加IP,不用做重复工作。 还可以直接导入其它Vivado工程的block design。
双击上面DFX的层次化设计,在弹出的窗口的"Synthesis sources"下, 点击加号,添加可重配模块(Reconfigurable Modules),并选择active的可重配模块。
先为第一个block design,也就是静态区和DFX的基本设计的block design创建HDL wrapper。选择第一个block design,在右键菜单中,选择"Create HDL wrapper"。然后再选择它,在右键菜单中,选择"Generate output products"。 执行完毕后,在"Flow Navigator-->Project Manager"里,能看到新增加了菜单“Dynamic Function eXchange wizard”。
在"Flow Navigator-->Project Manager"里,点击菜单“Dynamic Function eXchange wizard”,在弹出的窗口中选择"Next",在“Reconfigurable Modules Sssociations with Patition Definition”页面,能看到之前添加的可重配模块(Reconfigurable Modules); 继续点击"Next",在“Configurations”页面,点击“Automatically create configurations”;继续点击"Next",在“Configuration runs”页面,点击“utomatically create configuration run”;最后点击“Finish”。
在“TCL Console”里,可以看到类似下面的命令。
create_run child_2_impl_1 -parent_run impl_1 -flow {Vivado Implementation 2021} -pr_config config_4
create_run child_3_impl_1 -parent_run impl_1 -flow {Vivado Implementation 2021} -pr_config config_5
在"Flow Navigator"里,点击“Run Synthesis”。介绍后,点击“Open Synthesized Design”,打开设计。 在Vivado的主菜单中,选择"Layout"-->"Floorplanning"。 在“Netlist”中展开设计,再选择DFX的层次化设计的模块,然后在右键菜单中选择"Floorplanning"-->"Draw Pblock"。注意,不是"New Pblock"。用鼠标在“Device”中画出一个矩形,包含所有需要的资源。按住鼠标左键,开始画矩形;这时会显示已经画出的矩形包含的资源,比如"Slice: xx, DSP48: yy, RAMB18: zz, RAMB36: nn";松开鼠标左键则完成矩形绘制。
在“TCL Console”里,可以看到类似下面的命令。
```
create_pblock pblock_hier_axi_rm
resize_pblock pblock_hier_axi_rm -add {SLICE_X66Y121:SLICE_X102Y239 CFGIO_SITE_X0Y0:CFGIO_SITE_X0Y0 DSP48E2_X7Y50:DSP48E2_X12Y95 RAMB18_X2Y50:RAMB18_X4Y95 RAMB36_X2Y25:RAMB36_X4Y47 SYSMONE4_X0Y0:SYSMONE4_X0Y0} -remove {SLICE_X66Y121:SLICE_X102Y239 CFGIO_SITE_X0Y0:CFGIO_SITE_X0Y0 DSP48E2_X7Y50:DSP48E2_X12Y95 RAMB18_X2Y50:RAMB18_X4Y95 RAMB36_X2Y25:RAMB36_X4Y47 SYSMONE4_X0Y0:SYSMONE4_X0Y0} -locs keep_all
add_cells_to_pblock pblock_hier_axi_rm [get_cells [list design_1_i/hier_axi_rm]] -clear_locs
```
点击“Generate Bitstream”, 运行布局布线,产生bit文件。执行完成后,在目录“runs”下,能看到各个可重配模块(Reconfigurable Modules)的partial.bit文件。
/proj/hankf/hankf/zcu106/v212/zcu106_dfx_test/zcu106_dfx_test.runs
hankf@XSZGS4:zcu106_dfx_test.runs$ find -name "*.bit"
./impl_1/design_1_wrapper.bit
./impl_1/design_1_i_hier_axi_rm_axi_rm0_1bram_1timer_inst_0_partial.bit
./child_3_impl_1/design_1_wrapper.bit
./child_3_impl_1/design_1_i_hier_axi_rm_axi_rm4_1bram_4timer_bd_inst_1_partial.bit
./child_2_impl_1/design_1_wrapper.bit
./child_2_impl_1/design_1_i_hier_axi_rm_axi_rm3_1bram_3timer_bd_inst_1_partial.bit
./child_0_impl_1/design_1_wrapper.bit
./child_0_impl_1/design_1_i_hier_axi_rm_axi_rm1_1bram_1timer_bd_inst_1_partial.bit
./child_1_impl_1/design_1_wrapper.bit
./child_1_impl_1/design_1_i_hier_axi_rm_axi_rm2_1bram_2timer_bd_inst_1_partial.bit