青江的个人站

“保持热爱,奔赴星海”

  • 主页
  • 目录
  • 图床
  • 留言板
  • -关于我-
友链 搜索文章 >>

青江的个人站

“保持热爱,奔赴星海”

  • 主页
  • 目录
  • 图床
  • 留言板
  • -关于我-

在Vivado中使用Pblock对模块进行位置约束


阅读数: 0次    2025-03-27
字数:1.8k字 | 预计阅读时长:6分钟

Pblock(Physical Block)是Xilinx Vivado工具中用于实现物理位置约束的一个重要功能。它允许设计者指定FPGA设计中特定逻辑应放置在芯片的哪些区域,从而更好地控制布局和优化时序性能。

Pblock的基本概念

Pblock本质上是FPGA上的一个矩形区域,您可以将特定的设计元素(如模块、实例或层次结构)分配到这些区域内。Pblock的主要用途包括:

  • 分区设计:将大型设计分成多个物理区域,便于并行工作和增量编译
  • 时序优化:通过控制关键路径组件的放置来改善时序
  • 资源规划:确保特定模块使用特定类型的FPGA资源
  • 热点管理:分散高功耗组件以避免热点集中
  • 接口约束:将I/O相关逻辑放置在接口附近

Pblock的创建方法

首先,对工程进行综合,综合运行完成后,打开综合后的设计。

1

在界面的右上角,将Vivado的模式由Default Layout切换到Floorplanning。

2

一旦切换到Floorplanning模式,Vivado会自动打开Physical Constraints窗口(也可以通过Window -> Physical Constraints打开此窗口)和Device窗口。至此,就可以开始手动指定Pblock布局了。

3

手动指定Pblock进行布局就是为某一个模块设定一个资源和位置约束,Pblock的大小限定了该逻辑单元所能使用的FPGA资源,Pblock的位置限定了该逻辑单元在FPGA芯片中的位置,Pblock中所包含的FPGA资源类型限定了该逻辑单元所能使用的资源。

在Netlist窗口中选择需要进行位置约束的模块,例如图中的算法(algorithm)模块,点击Device窗口中的Pblock创建图标,即可在芯片中框出想要的位置。

4

框选完成后,会弹出一个窗口进行确认,其中的资源类型可以根据需求进行修改,通过勾选其中的资源类型,可改变该Pblock是否包含这类资源。

5

绘制Pblock也可以包含一个或多个Bank,绘制时候需要较为精确,Vivado会进行一定的自动吸附。对应确认窗口如下图所示。

6

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

7

Pblock的初始位置和大小并不重要。通常的做法是先给所有的需要手工布局的逻辑单元画Pblock,然后再根据这些逻辑单元的资源利用率以及连接关系调整相应的Pblock的大小和位置。

选中Pblock,在其属性窗口中,选择Statistics,可看到Pblock所包含的资源类型和数量,同时显示了对应逻辑单元需要用到的资源类型与数量,从而可以获得该Pblock中的资源利用率。

8

如果Pblock内部的资源比算法需要使用到的资源少时,就需要适当增大Pblock的大小,直到资源足够算法使用。

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

1
2
3
create_pblock pblock_algorithm
add_cells_to_pblock [get_pblocks pblock_algorithm] [get_cells -quiet [list hdmi_vdma_inout_i/algorithm]]
resize_pblock [get_pblocks pblock_algorithm] -add {CLOCKREGION_X1Y4:CLOCKREGION_X1Y6}

这里主要使用了三条命令:

create_pblock:创建Pblock

add_cells_to_pblock:将逻辑单元分配给该Pblock

resize_pblock:调整Pblock的大小和位置

关于Pblock的一些问题

Pblock是否可以嵌套

Pblock是可以嵌套的,尽管这种应用方式并不常见。嵌套Pblock是为了更细粒度的对相关逻辑进行布局约束。从设计层次角度讲,嵌套的Pblock对应的逻辑单元是父层与子层的关系。

图中为Pblock嵌套时的情况。

9

此时它们在Physical Constraints窗口中也是按层次方式显示的,这样就可以清晰且直观地看到Pblock的关系。

10

嵌套的两个Pblock,它们的一些属性是不相同的。最典型的是PARENT不同,顶层的Pblock其PARENT值为ROOT,而子层的Pblock其PARENT是顶层的Pblock。

Pblock是否可以包含多个矩形

Vivado支持创建多个矩形构成一个Pblock,从而使得该Pblock形状不是矩形。这在某些场合是非常有用的。

首先,对指定的cell创建一个Pblock;其次,在Device View中选中该Pblock,点击右键,选择Add Pblock Rectangle,如下图所示。此时会创建一个新的矩形。这两个矩形共同构成一个新的Pblock。可以反复选中Pblock,点击右键添加多个矩形Pblock,从而形成多个矩形Pblock共同构成一个非矩形的Pblock。

11

对于多个矩形构成一个Pblock的情形,这些矩形之间会以虚线形式连接,表面它们隶属于同一个Pblock。如下图所示。从Tcl命令角度讲,无非是增加了几行resize_pblock命令而已。

12

1
2
3
create_pblock pblock_algorithm
add_cells_to_pblock [get_pblocks pblock_algorithm] [get_cells -quiet [list hdmi_vdma_inout_i/algorithm]]
resize_pblock [get_pblocks pblock_algorithm] -add {CLOCKREGION_X1Y4:CLOCKREGION_X1Y6 CLOCKREGION_X0Y3:CLOCKREGION_X0Y3}

一个Pblock为什么会显示内外两个矩形

外层矩形,对应图中的粗紫色矩形,是Pblock的边界,显示了该Pblock所覆盖的FPGA面积。内层矩形,对应图中的细橙色矩形,表明了分配给该Pblock的资源与整个FPGA资源的比率。因此,我们只能调整外层矩形的大小来改变Pblock所占用的FPGA资源。

如何用不同颜色显示嵌套的Pblock

对于嵌套的Pblock,可以用不同的颜色显示。具体方法是:依次点击Tools -> Settings -> Colors -> Device,如下图所示。最多可修改三层嵌套的Pblock的颜色。

13

能否让工具自动设置Pblock的位置和大小

在Vivado中,如果已经创建了Pblock,依次选择Tools -> Floorplanning -> Place Pblocks,会弹出如下图所示对话框。这个界面显示了需要自动设置的Pblock,点击OK,工具就会自动调整Pblock的大小和位置。

14

如何使得Pblock内部资源仅供Pblock对应的模块使用

如果模块A分配给pblock_A,那么A只能使用pblock_A内部资源,但这并不能保证其他模块使用pblock_A内部资源。为了使得pblock_A中资源仅供模块A使用,可以设置属性EXCLUDE_PLACEMENT为true来达到此目的。但需注意,Pblock框住的只是逻辑资源而非布线资源,所以即使使用了该属性,其他模块也是可以使用该Pblock内的布线资源的。

1
set_property EXCLUDE_PLACEMENT TRUE [get_pblocks pblock_algorithm]

如何保证Pblock内部逻辑仅仅使用Pblock内部的布线资源

默认情形下,一旦给某一模块分配了Pblock,就保证了该模块只能使用Pblock内部的FPGA逻辑资源,但并不能保证该模块只使用该Pblock内部的布线资源。换言之,Pblock框住的只是逻辑资源,不包括布线资源。这样,相应的模块还是有可能使用Pblock外部的布线资源。为了增强设计的复用性,尤其在层次化设计中,应保证模块只使用Pblock内部的布线资源,这可通过属性CONTAIN_ROUTING实现。

1
set_property CONTAIN_ROUTING TRUE [get_pblocks pblock_algorithm]

参考链接

布局约束Pblock设置方法-CSDN博客

本文来源: 青江的个人站
本文链接: https://hanqingjiang.com/2025/03/27/250327_vivado_pblock/
版权声明: 本作品采用 CC BY-NC-SA 4.0 进行许可。转载请注明出处!
知识共享许可协议
赏

谢谢你请我喝可乐~

支付宝
微信
  • FPGA
  • Vivado

扫一扫,分享到微信

微信分享二维码
Vivado中的增量编译与设计锁定
【云服务器(Ubuntu)配置(折腾)】五、Linux进阶配置
  1. 1. Pblock的基本概念
  2. 2. Pblock的创建方法
  3. 3. 关于Pblock的一些问题
    1. 3.1. Pblock是否可以嵌套
    2. 3.2. Pblock是否可以包含多个矩形
    3. 3.3. 一个Pblock为什么会显示内外两个矩形
    4. 3.4. 如何用不同颜色显示嵌套的Pblock
    5. 3.5. 能否让工具自动设置Pblock的位置和大小
    6. 3.6. 如何使得Pblock内部资源仅供Pblock对应的模块使用
    7. 3.7. 如何保证Pblock内部逻辑仅仅使用Pblock内部的布线资源
  4. 4. 参考链接
© 2021-2025 青江的个人站
晋ICP备2024051277号-1
powered by Hexo & Yilia
  • 友链
  • 搜索文章 >>

tag:

  • 生日快乐🎂
  • 小技巧
  • 新年快乐!
  • Linux
  • 命令
  • 语录
  • 复刻
  • Blog
  • Notes
  • Android
  • C
  • Homework
  • MATLAB
  • Server
  • FPGA
  • Vivado

  • 引路人-稚晖
  • Bilibili-稚晖君
  • 超有趣讲师-Frank
  • Bilibili-Frank