vivado产生报告阅读分析24-读取和解释时序路径特性报告
读取和解释时序路径特性报告
路径特性可分为 4 大类 : 时序、逻辑、物理和属性。您可通过命令行帮助功能查看每项特性的定义。Tcl 命令 : report_design_analysis -help
第 1 类 : 时序
• “ Timing Analysis ” ( 时序分析 ): “ Path Type ” ( 路径类型 ) 和“ Requirement ” ( 要求 ) 详列了时序分析类型 (SETUP 或 HOLD ) 和时序路径要求。“ Slack ” ( 裕量 ) 指示根据时序约束规定的时序分析 , 时序路径要求是否 已得到满足。“Timing Exception ” ( 时序例外 ) 指示是否已将任何时序例外 ( 例如 , 多周期路径或最大延迟 ) 应 用于时序路径。
检查路径要求通常是对时序约束缺失或不正确问题进行调试的第 1 步 :
对于建立时间要求低于 4 ns 的路径 , 必须加以审查并验证其在设计中的有效性 , 对于时钟域交汇路径尤其如 此。
对于建立时间要求小于 2 ns 的路径 , 通常此类路径难以满足时序 , 因而必须避免 , 对于早期架构尤其如此。
通常如果建立时间要求较小 , 请检查是否缺失时序例外约束 , 并检查源和目标时钟沿。时序分析始终假定源与目标时钟沿之间存在最小的正差值, 除非被时序例外约束覆盖。
对于保持路径要求为正值的要求 , 必须加以审查 , 因为此类要求不常见且难以满足。当保持路径要求为正值 时, 请检查对于可能仅应用于建立分析路径的保持分析 , 是否缺失多周期路径约束。此外 , 还需检查源时钟与目标时钟之间的关系是否正确。
• “ Datapath ” ( 数据路径 ): “ Path Delay ” ( 路径延迟 ) 、“ Logic Delay ” ( 逻辑延迟 ) 和“ Net Delay ” ( 信号 线延迟) 详列了数据路径延迟总量及其细分 , 按逻辑单元和信号线显示其所占延迟比例。
如果“ Logic Delay ”在数据路径延迟总量中所占比例异常高 , 例如 , 达 50% 甚至更高 , 那么建议检查数据路径逻辑深度和逻辑路径上的单元类型, 可能需要修改 RTL 或综合选项以减少路径深度或者使用延迟较小的单元。
如果“ Net Delay ”在建立路径的路径延迟总量中占绝对主导地位 , 且“ Requirement ”合理 , 则建议对本部分中所列的路径的部分物理特性和属性特性进行分析。具体需要查看的项包括“High Fanout ” ( 高扇出 ) 和“Cumulative Fanout ” ( 累积扇出 ) 特性 , 以便了解路径中的部分信号线是否存在高扇出 , 以及是否可能导致出现布局问题。此外, 还要检查“ Hold Fix Detour ”特性 , 以了解在路径上是否发生了保持修复。
• “ Clocks ” ( 时钟 ): 有关时序路径时钟的“ Start Point Clock ” ( 起点时钟 ) 、“ End Point Clock ” ( 端点时 钟) 、“ Clock Relationship ” ( 时钟关系 ) 和“ Clock Skew ” ( 时钟偏差 ) 详细信息。“ Start Point Clock ”和 “Endpoint Clock ”分别列出了对应的时序路径源时钟和目标时钟。
检查“ Clock Relationship ” ( 时钟关系 ) 是否正确且符合预期。对于时钟内部路径或同步时钟域交汇路径 , 关 系标记为“Safely Timed ” ( 已安全定时 ) 。您必须验证“ Requirement ”和“ Clock Skew ”是否合理。对于异 步时钟, 此关系标记为“ No Common Primary Clock ” ( 无公共基准时钟 ) 、“ No Common Period ” ( 无公共 周期) 、“ No Common Node ” ( 无公共节点 ) 或“ No Common Phase ” ( 无公共相位 ) 。时序例外必须覆盖异步时钟域交汇路径( 检查“ Timing Exception ”值 ) 。
检查“ Clock Skew ”是否合理。在分析时钟偏差时 , 请检查级联时钟缓冲器的时钟树结构。在 7 系列器件中 ,请检查源时钟和目标时钟的不同时钟缓冲器类型。在 UltraScale 中 , 可能需要检查时钟信号线的布局布线 , 因为它取决于逻辑负载布局。跨越时钟区域边界或 I/O 列可能导致时钟偏差增大 , 这符合预期。
第 2 类 : 逻辑
• 路径 : “ Start Point Pin Primitive ” ( 起点管脚原语 ) 、“ End Point Pin Primitive ” ( 端点管脚原语 ) 、“ Start Point Pin” ( 起点管脚 ) 、“ End Point Pin ” ( 端点管脚 ) 、“ Logic Levels ” ( 逻辑层次 ) 、“ Logical Path ” ( 逻 辑路径) 和“ Routes ” ( 布线 ) 可提供有关时序路径的部分基本信息。
“ Start Point Pin Primitive ”和“ End Point Pin Primitive ”是时序路径起点和端点的参考管脚名称。请检查 “Start Point Pin Primitive ”和“ End Point Pin Primitive ”是否是期望的时序路径起点和端点。“ Start Point Pin”和“ End Point Pin ”用于识别实际的时序路径起点和端点 , 这些起点和端点将显示在典型时序报告的标题中。
请检查端点管脚 ( 例如 , CLR 、 PRE 、 RST 和 CE ), 这些管脚可能包含在控制信号的高扇出信号线 ( 例如 , 异步复 位和时钟使能信号) 中。另请检查单元类型 , 因为部分原语 ( 如块 RAM 和 DSP ) 具有比其他单元更大的时钟输出(Clock-to-Q) 延迟和建立 / 保持时间要求。如果出现在路径上 , 这些单元可能占用大量路径时序预算。
“ Logic Levels ”和“ Logical Path ”详列了逻辑级数以及数据路径中的原语类型。“ Routes ”表示数据路径中可布线的信号线数量。您可使用此信息来快速检查造成大量逻辑层次的主要原因是 LUT 还是 LUT / CARRY / MUXF 单元混合。CARRY 和 MUXF 单元通常连接到具有专用布线 ( 延迟较小或为空 ) 的信号线 , 而 LUT 输入的布线则始终需穿越互连结构。
虽然路径基本上已经对 LUT 进行了约束 , 但检查 LUT 大小同样是很重要的。请尝试理解多个较小的 LUT ( 非LUT6) 链接在一起的原因 , 以及导致综合无法仅以 LUT6 为目标的因素 , 这样可能可以减少逻辑级数。路径中可能存在 KEEP / DONT_TOUCH / MARK_DEBUG 之类的属性或中高扇出信号线 , 导致影响映射效率。根据分析结果, 您可修改 RTL 源、添加 / 修改 RTL 中的属性 , 或者使用其他综合设置来减少路径上的 LUT 数量。另外, 也可以使用 opt_design 命令的 -remap 选项来对 LUT 映射重新进行最优化 , 这可能可消除部分较小的 LUT。
• 单元 : 数据路径中存在的 DSP 块和 BRAM 。如果路径来自不含输出寄存器且含有数个逻辑层次的 RAMB 或 DSP ,那么在此类路径上满足时序满足时序则更为困难。如果这些路径难以满足时序要求, 那么您应考虑将自己的设计修改为使用 RAMB 或 DSP 输出寄存器。
第 3 类 : 物理
• 架构边界交汇 : “ IO Crossings ” ( IO 交汇 ) 和“ SLR Crossings ” ( SLR 交汇 ) 用于识别路径是否跨越架构资源(例如 , IO 列或 SLR 边界 ) 。
跨越大量架构列并不总是意味着存在问题。请检查信号线延迟过高或偏差过大是否与跨越大量架构列存在关联。如果跨越大量架构列可能导致了特定模块内多个实现运行之间发生时序问题, 请考虑使用 Pblock 来最大限度减少布局规划, 从而减少架构列或 SLR 边界交汇。
• 路径布局限制 : Pblock : 过度的布局规划有时可能会阻碍工具达到最理想结果。跨越多个 Pblock 的路径有时会遇到时序问题。
• 如果路径跨越多个 Pblock , 请检查 Pblock 的位置及其对时序路径布局造成的影响。
• 如果 Pblock 彼此相邻 , 应考虑为每个单独 Pblock 创建单个 Pblock 作为其超集。这样可以放宽对布局器的限制, 从而改善时序。
如果物理要求规定 Pblock 分散布局 , 请考虑在 Pblock 间采用流水打拍来帮助满足时序要求。
• 布局框 : 边界框大小、时钟区域距离、合并 LUT 对 : 如果时序路径的边界框大小或时钟区域距离过大 , 请尝试使用 place_design 中的指令。在 UltraScale 器件中 , 请注意“时钟区域距离”及其可能对时序路径“时钟偏差”产 生的影响。
• 信号线扇出和绕行 :
• “ High Fanout ” ( 高扇出 ) 用于显示数据路径中所有信号线的最高扇出 , 而“ Cumulative Fanout ” ( 累积扇出) 对应于所有数据路径信号线扇出总和。
如果“ High Fanout ”和“ Cumulative Fanout ”值都较大 , 鉴于扇出会影响布线和信号线延迟 , 因此出现时序违例的概率很大。
如果已运行物理最优化 , 但未降低扇出 , 请检查 MARK_DEBUG 和 DONT_TOUCH 约束 , 防止复制。 如果实现前需要在信号线上执行复制, 可在综合中 ( 在 RTL 内部或 XDC 文件中 ) 使用 MAX_FANOUT 约束。由于依靠布局来实现高扇出信号线的有效时序, 因此通常不建议在综合中执行复制 , 最好依靠布局后的物理最优 化 ( phys_opt_design ) 来执行复制。使用不同指令 ( 如 , Explore 、 AggressiveExplore 或 AggressiveFanoutOpt) 还可增强物理最优化 , 从而对含少量正裕量的路径也一并执行最优化。 如果实现期间需要在特定信号线上减少扇出, 可以使用以下命令强制执行复制 : phys_opt_design - force_replication_on_nets <netName>
• 如果“ Hold Fix Detour ” ( 保持修复绕行 ) 断言有效 , 则表示数据路径上布线已延迟 , 以满足路径保持时间要求。如果路径无法满足建立时间要求, 请检查源时钟和目标时钟之间偏差是否过大。此外还需检查源时钟和目标时钟之间的时序约束是否正常, 以避免保持路径要求为正值 ( 大部分情况下该值应为 0 或负值 ) 。
第 4 类 : 属性
• LUT 组合 : “ Combined LUT Pairs ”表示路径中存在成对组合的 LUT 。虽然成对组合的 LUT 可降低逻辑使用率 , 但也会限制布局解决方案, 可能由于管脚密度过高而导致拥塞。如果怀疑设计中存在 LUT 组合问题 , 建议在综合中使用 -no_lc 选项来禁用 LUT 组合。
• 最优化阻塞 : “ Mark Debug ” ( 标记调试 ) 和“ Dont Touch ” ( 禁止触碰 ) 可快速识别路径中是否存在不允许工具对其执行最优化的任何信号线或单元。
默认情况下 , 设置 MARK_DEBUG 属性会同时设置 DONT_TOUCH 属性。请考虑将 DONT_TOUCH 设置为 FALSE以允许执行最优化。
DONT_TOUCH 禁用单元或信号线复制等最优化。请评估是否需要 DONT_TOUCH 约束 , 如可行 , 请将其移除。当信号线进入含 DONT_TOUCH 的层级单元时 , 层级单元内的部分信号线无法执行复制。如果使用 DONT_TOUCH 来阻止逻辑裁剪 , 请检查设计是否正确。由于未连接的输出而移除的逻辑就是一个简单的示例。
• 固定布局布线 : “ Fixed Loc, Fixed Route ” ( 固定逻辑和固定布线 ) 可快速识别是否存在可能影响时序路径裕量的任何固定布局或布线约束。
使用单元位置约束有助于稳定高难度设计的 QoR 。如果修改设计后无法再满足时序 , 可尝试移除布局约束 , 以 便为布局器提供更大的灵活性。
使用固定布线会阻止布线器最优化信号线延迟以满足时序。含锁定布线的时序路径常常与其他路径共享信号 线, 而这些路径可能受到此约束的负面影响。仅在必要时且不影响交互路径的前提下使用固定布线。请务必谨记, 对其他 Pblock 等物理约束执行更改可能还需要更新固定的单元位置或固定布线。
第 5 类 : Dynamic Function eXchange 设计
对于 Dynamic Function eXchange (DFX) 设计 : 逻辑路径中的每个单元都带有前缀 , 用于识别此单元是属于可重配置分区 (RP#:) 还是属于设计的静态区域 (S:) 。
• “ DFX Path Type ” ( DFX 路径类型 ): 用于指定路径属于完全处于静态区域中、完全处于可重配置分区 (RP) 中还是跨越区域间的边界。时序路径的延迟元素同样也细分到各区域内。
• “ DFX Boundary Nets ” ( DFX 边界信号线 ): 用于报告静态区域或可重配置模块 (RM) 之间或者网表中两个 RM之间的时序路径的交汇次数。
• “ Boundary Fanout ” ( 边界扇出 ): 用于报告位于 PPLOC 的边界路径扇出到其下游负载的行为。