在Vivado Design Suite中使用Placement优化

文章详细描述了VivadoDesignSuite布局器如何通过优化时序松弛、布线长度和拥塞来放置设计元素。涉及设计规则检查、时钟和I/O布局、不同阶段的布局过程以及布局后优化,包括全局布局、详细布局和BUFG插入等策略。
摘要由CSDN通过智能技术生成

Vivado Design Suite 的布局器将网表中的单元放置在目标 Xilinx 设备上的特定位置。与其他 implementation命令一样,Vivado 布局器从内存中的设计开始工作,并对其进行更新。

一、Placement优化

Vivado 布局器同时针对以下方面对 design placement进行优化:
• 时序松弛(Timing slack):选择时序关键路径上的单元放置位置,以最小化负时序松弛。
• 布线长度(Wirelength):整体放置旨在最小化连接的总布线长度。
• 拥塞(Congestion):Vivado 布局器监控引脚密度,并分散单元以减少潜在的布线拥塞。
这些优化目标在放置过程中是相互关联的,并且通常需要权衡。例如,最小化时序松弛可能需要增加布线长度,而最小化布线长度可能会增加拥塞。Vivado 布局器会根据当前的设计目标和约束条件,尝试找到这些优化目标之间的最佳平衡点。
1、设计规则检查(Design Rule Checks)
在开始布局之前,Vivado implementation 会运行设计规则检查(DRCs),这包括用户通过 report_drc 命令选择的 DRCs,以及 Vivado 布局器内部内置的 DRCs。内置的 DRCs 用于检查非法放置,例如没有 LOC 约束的 Memory IP 单元,以及具有冲突 IOSTANDARD 的 I/O 端口组。
2、时钟和 I/O 放置(Clock and I/O Placement)
在设计规则检查之后,Vivado布局器会先布局时钟和 I/O 单元,然后再布局其他逻辑单元。时钟和 I/O 单元的布局是并行的,因为它们通常通过针对目标 Xilinx 设备特定的复杂布局规则相互关联。对于 UltraScale、UltraScale+ 和 Versal 设备,布局器还会分配时钟轨道并预路由时钟。具有 IOB 属性的寄存器单元会在这一阶段进行处理,以确定哪些 IOB 值为 TRUE 的寄存器应映射到 I/O 逻辑位置。如果布局器无法遵守 IOB 属性为 TRUE 的设置,则会发出关键警告。
3、布局器目标(Placer Targets)
• I/O 端口及其相关逻辑
• 全局时钟缓冲器
• 时钟管理模块(MMCMs 和 PLLs)
• 千兆收发器(GT)单元
4、布局未固定逻辑(Placing Unfixed Logic)
当布局未固定逻辑时,布局器会遵守物理约束,例如 LOC 属性和 Pblock 分配。它还会验证现有的 LOC 约束与网络列表连接和设备位置是否一致。某些 IP(如 Memory IP 和 GTs)在生成时会带有针对特定设备的布局约束。
由于设备的 I/O 架构,LOC 属性通常会约束除应用了 LOC 的单元之外的其他单元。输入端口的 LOC 也会固定其相关 I/O 缓冲区、IDELAY 和 ILOGIC 的位置。在输入路径中,不能对单个单元应用冲突的 LOC 约束。对于输出和与 GT 相关的单元,情况也相同。
因此,在设计过程中,需要仔细考虑 LOC 和其他布局约束的使用,以确保它们不会相互冲突,并且能够有效地指导布局器进行正确的布局操作。
5、时钟资源布局规则
时钟资源必须遵循在《7 Series FPGAs Clocking Resources User Guide (UG472) 》《UltraScale Architecture Clocking Resources User Guide (UG572) 》以及《Versal ACAP Clocking Resources Architecture Manual (AM003)》中描述的布局规则。例如,驱动全局时钟缓冲器的输入必须位于具有时钟功能的I/O位置,对于7系列设备,必须位于设备的上半部分或下半部分中相同的部分;对于UltraScale设备,则必须位于同一时钟区域内。这些时钟布局规则还会根据逻辑网表连接和设备位置进行验证。
6、当时钟和I/O布局失败时
如果Vivado布局器无法为时钟和I/O布局找到解决方案,它会报告被违反的布局规则,并简要描述受影响的单元。布局失败可能由多种原因造成,包括:
• 由于冲突的约束导致的时钟树问题
• 布局器无法解决的过于复杂的时钟树问题
• RAM和DSP块布局与其他约束(如Pblocks)的冲突
• 资源过度使用
• I/O端口组的要求和规则
在某些情况下,Vivado布局器会临时将单元布局在特定位置,并尝试布局其他单元以解决布局问题。这些临时布局通常可以指出时钟和I/O布局失败的原因。手动布局一个临时布局失败的单元可能有助于布局收敛。
提示:使用place_ports命令先运行时钟和I/O布局步骤,然后再运行place_design。如果端口布局失败,布局结果会被保存到内存中,以便进行故障分析。要获取更多信息,在Vivado Tcl命令提示符下运行place_ports -help。

二、全局布局、详细布局和布局后优化

在完成时钟和I/O布局之后,剩下的布局阶段包括全局布局、详细布局和布局后优化。
1、全局布局
全局布局主要由两个阶段组成:布局规划和物理综合。
①布局规划阶段
设计被划分为相关的逻辑簇,并根据I/O和时钟资源的布局选择初始位置。当针对SSI设备时,设计还会被划分为不同的SLR(Slice Logic Region),以最小化SLR之间的交叉和相关的延迟惩罚。在此阶段,可以应用软性的SLR布局规划约束来指导逻辑划分。
②物理综合阶段
在物理综合过程中,布局器可以执行各种物理优化操作,这些操作将基于布局规划阶段后的设计初始布局,对网表进行优化,以便为后续的布局阶段做好准备。例如,在基于扇出的复制中,由于已知初始布局,因此可以将复制的驱动器与其负载共同定位。这可以减轻在place_design之前不了解布局的情况下进行复制时可能产生的拥塞。
优化是基于内部参数来考虑的,对于基于时序的优化,会评估时序并在时序得到改进的情况下提交优化。

2、详细布局
详细布局是将设计从初始全局布局转变为完全布局的过程,通常从最大的结构(它们作为良好的锚定点)开始,一直到最小的结构。详细布局过程首先放置大型宏单元,如多列UltraRAM、BRAM和DSP块阵列,其次是LUTRAM阵列宏单元,然后是更小的宏单元,如用户定义的XDC宏单元。逻辑布局的迭代旨在优化线长、时序和拥塞。LUT-FF对(查找表-触发器对)被打包进CLB(Configurable Logic Block,可配置逻辑块),其附加约束是CLB中的寄存器必须共享公共控制集。

3、布局后优化
在分配所有逻辑位置后,布局后优化执行最终步骤以改善时序和拥塞。这些步骤包括改善关键路径布局和可选的BUFG插入阶段。在BUFG插入阶段,布局器可以将高扇出网络路由到全局路由轨道上,以释放构造路由资源。扇出大于1000且松弛度大于1.0ns的控制信号驱动的高扇出网络会考虑这种优化。负载被分为关键负载和高正松弛负载。高正松弛负载通过BUFGCE(全局缓冲器时钟启用)驱动,BUFGCE被放置在原始驱动器最近的可用位置,而关键负载仍然连接到原始驱动器。这种优化仅在不会造成时序恶化的情况下执行。BUFG插入是默认开启的,可以使用-no_bufg_opt选项禁用。
在布局后运行report_timing_summary来检查关键路径。具有非常大负设置松弛的路径可能需要手动布局、进一步约束或逻辑重构以实现时序闭合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值