完成本模块后,你应该能够
• 描述CCD优化如何改善建立时间
• 应用CCD控制来限制何处以及应用多少有用偏斜
• 为宏单元库启用有用偏斜
优化建立时间违规
• 修复建立时间违规的经典方法通常是,默认基于单周期时序来优化数据路径上的门。
• 示例:
如果路径A的优化无法解决-0.05ns的违规问题,你就会陷入困境。
路径B的正余量并不能帮助解决路径A的违规问题。
• 解决方案:
修改RTL:将路径A重新设计为多周期路径,或改进组合逻辑代码。
寄存器重定时(set_optimize_registers命令)。
并发时钟与数据(CCD)优化。
并发时钟和数据优化:建立时间
• CCD优化引入了有用偏斜以改善数据路径的建立时间。
■ 分别对时钟引脚施加时钟网络延迟,并单独调整以改善时序。compile.flow.enable_ccd
时钟平衡点延迟
• 由CCD(时钟树插入或布线)施加的时钟引脚网络延迟约束,影响了CTS之前的(布局布线前)数据路径的时序分析与优化,而这些约束在CTS过程中是不被考虑的。
• 因此,CCD优化还包括了应用时钟平衡点延迟,这些延迟是用来指导CTS实现预期有益的时钟偏斜策略的。
■ 时钟平衡点延迟被校正为零:
延迟偏移详细信息
• 当CCD优化改变延迟时,它会采用set_clock_latency -offset命令。
■ -offset的使用由工具保留,不要用于指定用户自定义的偏斜。
• 此设置仅在compile_fusion和place_opt阶段使用。
■ 在时钟优化阶段进行的CCD会实施有益的偏斜,因此,在CTS之后会移除-offset指定的延迟。
• 若要输出CCD延迟信息,请使用write_script命令。
■ write_sdc命令不会写出使用-offset选项获得的CCD延迟信息。
■ 它仅写出原始的、用户指定的延迟信息。
在2019.12之前,CCD延迟是叠加在用户指定的延迟之上的,因此不易区分哪些是由用户指定的,哪些是由工具推导得出的。
何时进行有用偏斜计算
• CCD优化(默认开启)执行“有用偏斜计算”,以应用时钟延迟和平衡点。
■ 为活动场景的所有角点计算值。
• 有用偏斜计算的多次运行与数据路径优化相结合,以实现更好的QoR收敛。
■ 在initial_opto期间进行3次
■ 在final_opto期间进行2次
实际的时钟平衡延迟值是针对每个角点应用的,但前提是该角点关联有active scenario。
CCD场景与保持时序
• CCD优化在所有激活的场景中进行
■ 确保你启用了计划用于CTS的所有场景,以免发生误关联。
• 建议启用保持(hold)场景(尽管在综合期间不会进行保持优化)
■ 仅在CCD优化期间考虑保持场景
■ 允许在保持优化与建立优化之间控制退化程度
否则,不会考虑保持退化
■ 保持退化的控制由以下参数决定:
ccd.hold_control_effort [none | low | medium | high | ultra]
(默认:low)
■ 较高的努力级别会以牺牲建立优化为代价来减少保持退化
■ 有效值:none, low, medium, high, ultra
例如,如果在编译过程中使用了S1和S2场景,而在后续的CTS阶段新增了S3场景,那么S3场景可能导致不同的时钟平衡点需求,从而可能引发不同的时序违规情况。因此,务必确保编译阶段的CCD和CTS阶段的CCD看到的是相同的时序违规问题。
CCD针对亚关键路径的优化
• 使用定向CCD对其他亚关键路径执行CCD优化
■ 例如,针对ICG路径或存储器路径(详情见下页)
• CCD主要集中在每个路径组的WNS路径上,即关键路径
■ 默认情况下,亚关键路径无法从CCD优化中受益
• 若要针对每个路径组中最差的300条亚关键路径进行优化:set_app_options -name ccd.enable_top_wns_optimization -value true
• 上述特性适用于compile_fusion、place_opt以及clock_opt build_clock
中的CCD操作
通过启用ccd.enable_top_wns_optimization
,CCD将优化排名前300的关键/WNS路径,而不仅仅专注于最差的WNS关键路径。此特性是独立的,可以单独使用或与下一页所示的定向CCD功能结合使用。
定向CCD
• 要将CCD集中于关键路径组上,可使用set_app_options -name ccd.targeted_ccd_path_groups \
-value {pathgroup_icgs pathgroup_ram1_in}
• 若要聚焦于关键endpoints,请创建如下所示的文件set_app_options -name ccd.targeted_ccd_end_points_file \
-value ccd_ep.txt
■ 当同时指定了定向路径组和端点(endpoints)时,定向CCD仅对同时属于指定的定向路径组和端点列表中的端点起作用
■ 仅需指定时序关键的路径组和端点
切勿受诱惑去指定设计中的所有路径
限制CCD偏斜的程度
• 默认情况下,延迟的预添加与延后操作会在一定范围内进行。
• 这些限制是可以调整的:
1ccd.max_postpone ; Default 200ps
2ccd.max_prepone ; Default 300ps
这些选项默认设置为-1000,但这暗示了上述范围(见手册页)。
■ 减小这些限制可能会对时序QoR(Quality of Results,结果质量)产生影响,因为它限制了CCD优化的潜力。
总体而言,在CTS过程中,预推进(preponing)比后推进(postponing)受到更多限制,因为始终可以通过插入缓冲器来推迟时钟引脚,但并不总是能去除缓冲器,达到某个点后就达到了最小值!因此,预推进的数量被设置为较大的数值,以便尽早尽可能多地利用预推进时间。我们限制后推进,以避免在编译过程中引入过多具有过多缓冲器的多样路径。然而,在CTS后期,默认情况下对预推进和后推进并无限制。
在CCD优化期间跳过路径组
• 您可以配置CCD优化,在调整时钟延迟时跳过属于特定路径组的时钟引脚。
• 这些路径组上的数据路径优化仍将被执行。
set_app_options -name ccd.skip_path_groups -value {pathgroup1 {scenarioA pathgroup2}}
■ 如果您只指定路径组名称而不指定场景名称,所有场景中具有指定名称的所有路径组都将被跳过。
■ 如果您同时指定了路径组名称和场景名称,只会跳过指定场景中的那个路径组。
忽略边界寄存器的IO时序
• 可能需要阻止基于IO时序的CCD偏斜操作。
■ IO时序往往不准确或过于悲观。
■ 最好忽略部分或全部IO的时序。
group_path -name MY_IN -from [get_ports In*]
set_app_options -name ccd.skip_path_groups -value {MY_IN}
compile_fusion
■ 这样做可以让CCD对IO边界寄存器进行偏斜,以帮助改善Path A的时序。
在项目初期,所有模块的I/O时序约束往往未被明确界定,因此可能采用了保守的约束条件。鉴于CCD优化专注于创造“有用偏斜”以满足时序要求,这可能会导致I/O寄存器上出现异常大的偏斜。为了避免这种情况,并转而利用接口寄存器帮助内部路径,我们选择将I/O路径放入忽略列表中。