第一个配置的静态实现必须被保存成一个checkpoint。必须被锁定。 如果要锁定导入的checkpoint(静态或者可重配置),使用
lock_design -level routing [cell_name]其中cell_name可以忽略。 如果要锁定导入RM的结果,全部层次的名字必须被指定。例如: lock_design -level routing u0_RM_instance 对于部分重配置,唯一保存的水平是布线。
部分重配置的约束和性质
定义一个模块为可重配(必须)
为可重配区域创建一个floorplan(必须) 配置后使用复位(可选) 打开可视化脚本(可选)
1定义一个模块为可重配(必须)
set_property HD.RECONFIGURABLE TRUE [get_cells inst_count] HD.RECONFIGURABLE属性表明默认下列约束:
为指定cell和接口网络设置DONT_TOUCH,就可以避免模块边界优化
为Pblock设置EXCLUDE_PLACEMENT,可以避免静态逻辑布线到可重配置分区中 为Pblock设置CONTAIN_ROUTING,可以限制可重配置逻辑布线在指定的约束区域内 使能DRC,时钟路由的特殊代码
2为可重配区域创建一个floorplan(必须) Pblock不能重叠
多个PBLOCK区间的缝隙允许非可重构资源,但是为了布线成功,最好是连续的Pblock。 如果7系列的器件使用了RESET_AFTER_RECONFIG属性,Pblock的高度一定要和时钟区域对齐。
7系列的Pblock一定不能将interconnect columns分开。
例子
#define a new pblock create_pblock pblock_count
#add a hierarchical module to the pblock
add_cells_to_pblock [get_pblocks pblock_count] [get_cells [list inst_count]] #define the size and components within the pblock
resize_pblock [get_pblocks pblock_count] -add {SLICE_X136Y50:SLICE_X145Y99} resize_pblock [get_pblocks pblock_count] -add {RAMB18_X6Y20:RAMB18_X6Y39} resize_pblock [get_pblocks pblock_count] -add {RAMB36_X6Y10:RAMB36_X6Y19}
Floorplan in the Vivado IDE
尽管还不支持Project模式,但是IDE环境可以用于planning and visualization任务。最好的例子就是create and modify Pblock约束。
open_checkpoint synth/Static/top_synth.dcp
read_checkpoint -cell [get_cells inst_count] synth/count_up/count_synth.dcp read_checkpoint -cell [get_cells inst_shift] synth/shift_right/shift_synth.dcp set_property HD.RECONFIGURABLE true [get_cells inst_count] set_property HD.RECONFIGURABLE true [get_cells inst_shift]
圈之前需要打开综合后的结果。
在Vivado环境中可以圈出一个矩形来选择一个RM分区。如果是L形,可以在Device视图中右击Pblock然后选择增加Pblock矩形。(与Planahead中圈矩形相似)。 要进行DRC检查。
write_xdc top_fplan.xdc执行此条命令将floorplan约束保存起来。
注意:千万不要通过Vivado IDE File> Save Checkpoint保存整个设计。如果保存了,就会覆盖掉之前保存的dcp。
时序约束:分别做时序分析。
Partion pins
是在Pblock边界自动创建的接口点。是在interconnect tiles里的虚拟I/O。不需要任何物理资源,也不需要有任何附加的延迟。
布线器根据源、驱动和时序要求为其选择位置,但是它们的位置也可以通过用户约束确定。如:
set_property HD.PARTPIN_LOCS INT_R_X4Y153 [get_ports
interconnect tile的实例名可以在Device View视图中看到。 3配置后复位
使用这个特性,reconfig region可以在局部重构过程中保持稳定状态。静态逻辑不受影响,可以继续正常工作。带有这个特性的Partial Reconfig就像FPGA的初始化配置一样,同步元素处于一种已知的初始化状态。
注意:全局信号GSR和GWE的释放不一定保证是同步的。如果RM模块的功能依赖于同步的startup,那个模块的时钟驱动逻辑或者时钟使能信号可以在局部重构过程中禁用,然后局部重构完成后再启用。static logic不允许,但是static routing(在实际的布线中显示出来是虚线/实线?)是允许的。
set_property RESET_AFTER_RECONFIG true [get_pblocks
Pblock模块必须与时钟区域垂直。
Pblock_shift是帧对齐的,因为顶和底与时钟区域X1Y3对齐。Pblock_count是不能用RESET_AFTER_RECONFIG的,因为顶部不对齐。Ultrascale器件两个Pblock都可以使用RESET_AFTER_RECONFIG因为不再受GSR(全局复位)的影响。
使用SNAPPING_MODE约束可以自动创建合法的RP。
GSR功能嵌在partial bitstreams里,所以不用做什么包含。然而重配置过程利用了SHUTDOWN序列,外部DONE管脚会在重配置开始的时候拉低,配置完成后拉高。需要注意这个动作。使用STARTUP模块的DONEO不能阻止DONE脚改变状态,因为在shutdown过程中这个模块是禁用的。STARTUP同样不能用在其他地方,例如产生一个配置时钟。 另外一种方法就是使用局部复位local reset.
软件操作流程
综合
每个模块module(含静态)都需要自底向上的综合,以便每个模块都有各自的网表或者checkpoint。 1 综合顶层
cd d:/xilinx/vivado_prj/led_shift_count/Sources/hdl read_verilog top/top.v(及其他与静态设计、包括可重配置模块的黑箱模块定义相关的HDL文件)
cd d:/xilinx/vivado_prj/led_shift_count/Sources/xdc read_xdc top_io.xdc
synth_design -top top -part xc7z020clg484-1
write_checkpoint -force top_synth.dcp使用force选项能强制执行
2综合一个可重配置模块
cd d:/xilinx/vivado_prj/led_shift_count/Sources/hdl
read_verilog d:/xilinx/vivado_prj/led_shift_count/Sources/hdl/shift_right/shift_right.v synth_design -top shift -part xc7z020clg484-1 -mode out_of_context
write_checkpoint -force d:/xilinx/vivado_prj/led_shift_count/synth/shift_right/shift_right.dcp
read_verilog d:/xilinx/vivado_prj/led_shift_count/Sources/hdl/shift_left/shift_left.v synth_design -top shift -part xc7z020clg484-1 -mode out_of_context
write_checkpoint -force d:/xilinx/vivado_prj/led_shift_count/synth/shift_left/shift_left.dcp
3为其余的可重配置模块重复这个步骤
read_verilog d:/xilinx/vivado_prj/led_shift_count/sources/hdl/count_up/count_up.v synth_design -top count -part xc7z020clg484-1 -mode out_of_context
write_checkpoint -force d:/xilinx/vivado_prj/led_shift_count/synth/count_up/count_up.dcp 4
read_verilog d:/xilinx/vivado_prj/led_shift_count/Sources/hdl/count_down/count_down.v synth_design -top count -part xc7z020clg484-1 -mode out_of_context
write_checkpoint -force d:/xilinx/vivado_prj/led_shift_count/synth/count_down/count_down.dcp 5
建议综合完毕后关闭设计,重新运行实现。
建立Design Floorplan
open_checkpoint d:/xilinx/vivado_prj/led_shift_count/synth/Static/top_synth.dcp read_checkpoint -cell [get_cells inst_count] synth/count_up/count_synth.dcp // read_checkpoint -cell [get_cells inst_count] synth/count_up/count_up.dcp
read_checkpoint -cell [get_cells inst_shift] synth/shift_right/shift_synth.dcp // read_checkpoint -cell [get_cells inst_shift] synth/shift_right/shift_right.dcp