place_design 命令在设计中运行布局操作。与其他实现命令一样,place_design 具有可重入性。对于部分布局的设计,Vivado布局器使用现有的布局作为起点,而不是从头开始。
place_design 的语法如下:
place_design [-directive <arg>] [-no_timing_driven] [-timing_summary] [-unplace] [-post_place_opt] [-no_psip] [-no_bufg_opt] [-quiet] [-verbose]
选项参数说明:
-directive :用于指定布局指令或策略。
-no_timing_driven:禁用时序驱动的布局。
-timing_summary:在布局完成后生成时序摘要报告。
-unplace:取消布局,即移除所有已布局的单元。
-post_place_opt:在布局后执行优化。
-no_psip:禁用某种特定的布局优化(可能是与PSIP相关的优化)。
-no_bufg_opt:禁用BUFG(全局缓冲)优化。
-quiet:减少输出信息,使运行更加安静。
-verbose:增加输出信息,提供更详细的日志。
下面是一个 place_design 的示例脚本(运行布局,将结果保存到检查点,报告时序估计)
place_design write_checkpoint -force $outputDir/post_place report_timing_summary -file $outputDir/post_place_timing_summary.rpt
这个示例脚本对内存中的设计进行布局。布局完成后,它会将设计保存为一个检查点(checkpoint),生成一个时序摘要报告,并将报告写入指定的文件。检查点文件通常用于在设计流程中创建临时保存点,以便在必要时可以恢复到该状态。时序摘要报告则提供了布局后设计的时序性能信息,帮助评估布局的质量和可能的优化空间。
place_design 命令的选项参数说明如下。
1、使用 -no_timing_driven 选项
place_design -no_timing_driven 命令会指示布局器在放置单元时不使用时序驱动的策略。默认情况下,布局器会尝试优化设计的时序性能,通过考虑信号路径的延迟和时序约束来放置单元。然而,当使用 -no_timing_driven 选项时,布局器将不再考虑时序信息,而是可能基于其他因素(如物理位置、连线长度、单元间的相互作用等)来放置单元。
这个选项可能在某些特殊情况下有用,例如:
调试和测试:当需要隔离时序对布局结果的影响时,可以使用这个选项。这有助于确定布局问题是否与时序有关。
初始布局:在某些设计流程中,可能首先使用非时序驱动的布局作为起点,然后在此基础上进行后续的优化。
性能权衡:在某些应用中,可能更关注于减少连线长度或优化其他物理特性,而不是时序性能。
然而,需要注意的是,不使用时序驱动的布局可能会导致最终设计的时序性能较差,特别是当设计具有严格的时序约束时。因此,在使用这个选项之前,应该仔细考虑其对设计性能的影响,并确保它符合设计目标。
此外,还需要注意,即使使用了 -no_timing_driven 选项,布局器可能仍然会执行一些基本的优化来避免明显的物理问题,例如单元重叠或违反制造规则。因此,这个选项并不意味着布局器会完全忽略物理约束和规则。
2、使用 -timing_summary 选项
place_design -timing_summary 命令会在布局过程结束后提供一个时序概要。这个概要通常包含设计的一些关键时序信息,例如最大延迟、最小延迟、关键路径等。这对于设计师在布局阶段了解设计的时序性能非常有用。
时序概要可能包含以下信息:
关键路径延迟
显示设计中延迟最长的路径及其延迟值。这有助于设计师识别可能需要进行优化以改善时序性能的路径。
总延迟
可能包括设计的平均延迟、最大延迟和最小延迟等统计信息。这些指标可以反映设计的整体时序性能。
时序违规
如果设计中有任何时序违规(即不满足时序约束的路径),这些违规通常也会在时序概要中列出。这可以帮助设计师快速定位并解决问题。
资源利用率
虽然这不一定直接属于时序信息,但一些布局器可能会在时序概要中提供关于资源利用率的统计,如逻辑单元利用率、内存利用率等。
例如以下提示信息及图1:
INFO: [Place 30-100] Post Placement Timing Summary | WNS=0.236 | TNS=0.000 |
其中:
WNS = Worst Negative Slack(最差负裕量),表示时序约束中最差的裕量值。
TNS = Total Negative Slack(总负裕量),表示所有时序路径中负裕量的总和。这个值通常用于评估整体时序性能,值越小表示时序性能越好。
通过查看这些信息,可以对布局后的设计有一个初步的时序评估,并基于这些信息进行后续的优化或调整。如果发现时序性能不佳或存在时序违规,可能需要重新调整布局策略、增加约束或应用其他优化方法来改善时序。
3、使用 -unplace 选项
place_design -unplace 命令用于撤销之前的布局操作,将设计中的所有组件(如逻辑单元、内存块等)恢复到未布局的状态。这通常意味着所有组件都被移除了它们在物理位置上的布局,回到了一个初始的、未分配具体位置的状态。
这个命令在以下几种情况中可能会非常有用:
重新布局
如果你想要重新进行布局操作,可能是因为之前的布局结果不理想,或者因为设计发生了更改(例如,添加了新的逻辑或约束),那么可以使用 -unplace 选项来撤销之前的布局,然后重新运行布局器。
布局策略调整
通过撤销之前的布局,可以应用新的策略或参数,并重新评估布局结果。
调试和验证:在设计和验证过程中,需要撤销布局以检查某些特定方面(如逻辑功能、连接性等)是否独立于布局时。撤销布局后,可以在不考虑物理位置的情况下进行这些检查。
需要注意的是,撤销布局并不会撤销布线操作。
4、使用 -post_place_opt 选项
place_design -post_place_opt 命令通常用于在布局完成后执行布局后优化(Post-Placement Optimization)。布局后优化是一个重要的步骤,用于进一步提高布局的质量,并可能包括一些额外的调整和优化操作,以改善设计的性能、减少资源使用或满足特定的时序要求。
布局后优化可能包括以下几种类型的操作:
时序优化
针对关键路径或时序紧张的路径进行优化,以减少路径延迟并满足时序约束。这可能包括重新分配逻辑单元的位置、优化连线长度或调整驱动强度等。
资源优化
通过合并、共享或重新分配资源来减少设计中使用的逻辑单元数量或类型,从而节省硬件资源。
物理优化
优化布局的物理特性,如减少连线交叉、平衡热量分布或提高可布线性。
其他特定优化
根据设计目标和约束,执行其他类型的优化操作,如减少功耗、优化功耗与性能权衡等。
5、使用 -no_psip 选项
place_design -no_psip 命令通常用于指示布局器在放置过程中不考虑特定类型的预定义放置指令或策略,即不使用PSIP(Pre-Specified Instance Placement)功能。
PSIP允许设计师在布局之前为某些特定的逻辑单元或组件指定固定的物理位置。这通常用于满足特定的硬件需求、优化性能或确保某些组件之间的物理接近性。但是,在某些情况下,设计师可能想要完全由布局器自动决定组件的位置,而不受任何预定义放置指令的约束。
需要注意的是,不使用PSIP功能可能会导致布局结果与期望有所不同,特别是当设计中存在特定的硬件需求或性能优化目标时。因此,在决定是否使用 -no_psip 选项时,需要仔细权衡其对设计性能、资源利用率和硬件实现的影响。
6、使用 -no_bufg_opt 选项
place_design -no_bufg_opt 命令用于指示布局器在布局过程中不优化全局缓冲器(Buffer Global,简称BUFG)。BUFG是FPGA中用于提高信号驱动能力和平衡延迟的全局缓冲器,它们通常用于改善信号完整性和时序性能。
默认情况下,布局器可能会尝试优化BUFG的放置位置,以最大化其效果并减少设计中的时序违规。然而,在某些特定情况下,设计师可能想要控制BUFG的放置位置,或者不希望布局器对BUFG进行优化。
禁用BUFG优化可能适用于以下情况:
手动放置BUFG
手动指定了BUFG的放置位置,并希望保持这些位置不变时。
BUFG数量限制
在某些FPGA芯片中,BUFG的数量是有限的。如果想要确保布局器不会使用过多的BUFG,可以禁用优化来避免不必要的BUFG插入。
特殊设计要求
在某些特殊的设计中,BUFG的放置可能受到特定的硬件约束或性能要求的影响。禁用BUFG优化可以确保布局器不会违反这些要求。
需要注意的是,禁用BUFG优化可能会影响到设计的时序性能。因为BUFG的优化通常旨在改善信号延迟和时序违规,所以禁用优化可能会导致时序问题增加。
7、使用 -quiet选项
place_design -quiet 命令用于减少命令执行过程中在控制台上显示的输出信息。这通常用于那些不需要实时查看详细进展或输出信息的情况,或者当您希望将输出重定向到文件或日志中,以减少控制台上的噪音。
当使用place_design -quiet 命令时,布局器将只输出关键信息或错误消息,而省略大多数正常的进度报告和详细输出。这可以使命令执行更加快速,并且使控制台输出更加简洁。
8、使用 -verbose 选项
place_design -verbose 命令用于增加布局过程中的输出信息的详细程度,包括状态信息、进度更新、内部决策和可能的相关数据。与 -quiet 选项相反,-verbose 选项告诉布局器在执行布局操作时输出更多的详细信息,以便我们能够更深入地了解布局过程的各个方面。
通过查看详细的输出信息,可以:
跟踪布局过程中各个阶段的进度和完成情况。
了解布局器如何做出决策,例如如何选择放置位置、优化资源使用等。
发现布局过程中可能存在的问题或警告,并据此进行调整或优化。
评估布局结果的质量,包括时序性能、资源利用率等。
需要注意的是,使用 -verbose 选项可能会产生大量的输出信息,特别是在大型设计或复杂的布局过程中。因此,在使用此选项时,建议将输出重定向到日志文件或特定的输出窗口,以便更方便地查看和分析。
此外,对于这些选项,不同的布局器工具和版本可能具有不同的详细输出格式和内容,因此建议查阅相关工具的文档以获取更详细和准确的信息。