在DFXs设计中,RM和静态区之间的信号称之为边界信号。所有RM的输入/输出端口必然会有Partition Pin,布局工具会将Partition Pin放置在边界信号的某个节点上,如下图所示,图中白色高亮部分即为Partition Pin,左侧显示了这个Partition Pin的位置。
实际上Partition Pin的出现会给布线带来压力,尤其是Partition Pin较多的时候,这是因为与之相连的边界信号其布线必须被固定下来,从而降低了布线工具在寻找最佳布线通路时的灵活性,这也是为什么我们建议尽可能降低RM和静态区之间的端口个数。好在Vivado本身在执行DFX时提供了一个所谓的“扩展的布线区域”(Expanded Routing)。这个扩展的布线区域将会包含部分位于静态区的布线资源。如果边界信号在静态区的负载正好落在了扩展的布线区域内,那么就不需要指定/固定Partition Pin的位置了,这样布线工具在对后续RM布线时就会有更大的灵活性。这个过程即为PPLOC缩减,由Vivado工具自动完成。那么如何查看扩展的布线区域内。对于2023.1之前的Vivado,在DFX工程目录下工具会自动生成一个hd_visual文件夹,在此文件夹下会有两个如下图所示的Tcl文件。在打开布线dcp文件中,source该Tcl文件即可看到扩展的布线区域。对于2023.1及其之外的版本,可以使用命令get_dfx_footprint。
下图显示了Pblock区域(图中白色高亮部分)和扩展的布线区域(蓝色部分)的大小,从中可以看到两者的关系。
如果PPLOC缩减没有被触发(不满足缩减条件),那么从静态区的逻辑单元到Partition Pin这段net就会被锁定,后续新的RM重新进行布局布线时会继承这段锁定的布线。如下图所示,在RM1中,图中红色net为静态区逻辑单元到某个Partition Pin的物理走线。因Partition Pin的存在,这段走线会被固定下来。这可在RM2的布线结果视图中看到,这段走线以虚线方式呈现。同时属性IS_REUSE和IS_ROUTE_FIXED值为TRUE,表明该段走线是被继承被同一个RP下的所有RM使用且被固定下来的。
从PPLOC产生的原理我们可以想到减少PPLOC的一个方法就是尽可能将边界信号在静态区的负载放置在扩展布线区域内,这可通过画Pblock的方式实现。如下图所示,动态区RM的输入端口reset_vio是Partition Pin,同时可以看到Partition Pin Location列对应的位置。我们画一个小的Pblock如下图中的红色方框所示,将与该端口相连的动态区的LUT放置在该Pblock内,可以看到这个Pblock是在扩展的布线区域内的。重新布局布线就可以发现reset_vio已经不再有PPLOC了。
Copyright @ FPGA技术驿站