CCD优化与边界寄存器(1/2)
• 默认情况下,CCD会对所有寄存器(包括边界FF)进行时序偏斜优化。
• 若要阻止在边界寄存器上进行延迟调整,请使用:ccd.optimize_boundary_timing -> set to false
不鼓励排除所有边界寄存器,因为这样做可能会严重影响CCD的优化潜力。
仅在绝对必要时使用此设置。
当该选项设置为false时,您会看到类似以下的信息:
1Boundary CK pin:en_launch/CK because of port din
2Boundary CK pin:ff_l_l/CK because of port din
3Optimize_boundary_timing is set to false, 2 registers will not be optimized, 20
4registers will be optimized.
完全禁止边界寄存器的偏斜会严重限制CCD优化的潜力。
当该选项为false时:
• 仅内部触发器可供CCD优化使用
工具执行边界识别,以区分边界触发器和内部触发器。如果您的设计包含连接大量触发器的端口,如扫描使能和复位端口,您可能希望将这些端口从边界识别中排除;否则,大多数触发器将被视为边界触发器,CCD优化的范围将非常有限。要指定要排除的端口,请参见下一张幻灯片。
• 边界触发器的延迟将不会被调整
• 如果时钟路径与内部触发器共享,通往边界触发器的时钟树扇入可以进行优化。
要禁用对通往边界触发器的时钟树扇入的优化,可将ccd.optimize_boundary_timing_upstream
应用程序选项设置为false。
请注意,同时将ccd.optimize_boundary_timing和ccd.optimize_boundary_timing_upstream
应用程序选项都设置为false,会阻止CCD优化大部分时钟树。
CCD优化与边界寄存器(2/2)
• 主要端口用于区分边界FF和内部FF。
• 通过使用以下命令忽略扫描和复位端口:ccd.ignore_scan_reset_for_boundary_identification -> set to true
忽略特殊的port的命令:set_app_options -name ccd.ignore_ports_for_boundary_identification \
-value {my_en en_A}
如果您指定了ccd.ignore_scan_reset_for_boundary_identification
应用程序选项,所有扫描/复位端口将不被考虑进边界识别中。复位/扫描端口是根据它们与触发器上的扫描/复位引脚的连接性来识别的。
宏单元的有用偏斜:概述
■ 对于到memory块或来自memory的路径,时序可能难以满足或根本无法满足。
■ 传统上,设计者手动在宏单元的时钟引脚上应用“有用偏斜”(时钟延迟和平衡点延迟)以解决时序问题。
■ Fusion Compiler能够自动处理这一过程。
• 用户只需简单定义关键宏单元偏斜组。
• 一个独立的偏斜优化算法(在CCD优化之前)可以改善宏单元输入和/或输出路径的时序。
用户将宏指定为一组skew bank,并指定要改进的一侧(输入、输出或两者皆有)——如上例所示,重点在于“输出”侧。
• 宏的有用偏斜在不恶化任何非目标(输入)宏bank路径的情况下,改善目标(输出)宏bank路径的时序。
■ 通过对输入路径的延迟进行偏斜调整,不仅宏本身,还包括输出路径的延迟得到优化,从而整体提升目标宏bank的时序性能,同时确保不对非目标宏bank路径造成负面影响。
• RAMA和RAMC的输入违规:输入寄存器被提前(preponed)。
■ 由于共享(橙色)寄存器的存在,很难推迟宏单元及其输出路径寄存器。
• RAMB的输入违规:RAMB及其输出寄存器被推迟(postponed)。
■ 输入路径寄存器很难提前——其中一些与RAMA/C的输出寄存器相同。
要查看当前宏的有用偏斜规范:
report_skew_macros [-bank_name name]
如果未指定bank,则报告指定bank的所有情况,或报告所有bank。
要移除宏bank:
remove_skew_macros [-bank_name name]
如果未指定bank,则移除指定bank的所有宏bank,或移除所有宏bank。
除了Fusion Compiler自动偏斜之外,您还可以对宏引脚应用额外的手动(用户)偏斜。应用用户偏斜时,请不要使用-offset选项。优化后,您将能够区分用户偏斜和工具偏斜(工具偏斜使用-offset)。此规则同样适用于set_clock_balance_points命令。
宏单元偏斜的限制
• 要控制宏时序/偏斜相对于非宏时序的优先级:
■ 可能的设置:low(低)、medium(中)、high(高)
■ 更高的努力级别可能会施加更多的偏斜来改善宏时序,但可能会进一步恶化非宏时序。
compile.flow.skew_macros_effort
宏单元的有用偏斜与CCD优化同时应用
宏单元的有用偏斜仅发生一次,发生在CCD优化之前的initial_opto阶段,可能会对非宏单元时序产生负面影响。
CCD优化可能为了优化非宏单元时序路径而覆盖宏单元偏斜,这可能损害宏单元的时序。
为防止关键宏单元偏斜退化,可在宏寄存器处禁用CCD:
group_path -name GRP_REG_IN -to [get_pins REG_IN]/D]
group_path -name GRP_REG_OUT -from [get_pins REG_OUT]/CK]
set_app_options -name ccd.skip_path_groups -value {GRP_REG_IN GRP_REG_OUT}
compile_fusion …
这样配置将在进行宏单元有用偏斜优化时,避免CCD优化对宏寄存器相关路径的影响,保护宏单元的关键时序。
如果不使用宏偏斜,CCD优化仍可能改善宏库的时序,但效果不如采用宏偏斜。这是因为,在CCD优化过程中,非存储器路径和存储器路径被平等对待。
上述get_pins命令中的参数假设已定义了以下引脚同义词(参见第二单元),否则请使用具体库技术的引脚名称:
1set_pin_name_synonym CK clocked_on
2set_pin_name_synonym D next_state