Pblock可以这么画
- 2019 年 10 月 30 日
- 筆記
手工布局应该算是一项高级技能,在某些场合是不可或缺的,例如Partial Reconfiguration。同时,它也是实现时序收敛的一种可选方法。
首先,打开综合后的设计,将Vivado切换到Floorplanning模式,如下图所示。

一旦切换到Floorplanning模式,Vivado会自动打开Physical Constraints窗口(也可以通过Window -> Physical Constraints打开此窗口)和Device窗口,如下图所示。至此,我们就可以开始手工布局。

手工布局的本质是对指定逻辑单元设定面积约束,在Vivado下就是对其画一个Pblock。Pblock的大小限定了该逻辑单元所能使用的FPGA资源;Pblock的位置限定了该逻辑单元在FPGA中的位置;Pblock中所包含的FPGA资源类型限定了该逻辑单元所能使用的资源。
第二步,在Netlist窗口中选择需要手工布局的逻辑单元,这里我们选取了模块arnd1,如下图所示。之后在Device窗口中点击蓝色椭圆标记的快捷键。

第三步,一旦点击上图标记2的按钮,就可以开始画Pblock,如下图所示。图中Grids显示了该Pblock所包含的资源类型及数量。

一旦画好一个Pblock,在Physical Constraints窗口中就会有所显示,毕竟Pblock实质上就是一种物理约束。

Pblock的初始位置和大小并不重要。通常的做法是先给所有的需要手工布局的逻辑单元画Pblock,然后再根据这些逻辑单元的资源利用率以及连接关系调整相应的Pblock的大小和位置。
选中Pblock,在其属性窗口中,选择Statistics,可看到Pblock所包含的资源类型和数量,同时显示了对应逻辑单元需要用到的资源类型与数量,从而可以获得该Pblock中的资源利用率,如下图所示。

如前所述,Pblock本质上是一种物理约束,因此也可以通过相应的Tcl命令完成。上述操作对应的Tcl命令如下图所示。

这里主要使用了三条命令:
create_pblock: 创建Pblock
add_cells_to_pblock: 将逻辑单元分配给该Pblock
resize_pblock: 调整Pblock的大小和位置