学习Synopsys Fusion Compiler FE21: 时序约束的可行性

文摘   2024-09-24 18:15   上海  

时序约束的可行性

• 您的约束条件是否干净无误?

  • 现实可行的I/O约束条件

  • 应用了所有必要的时序例外
    • 如果不是,许多优化周期可能会浪费在可能不可行的时序路径上。
    • 建议:
    在运行compile_fusion之前,识别并处理不可行的路径。

处理不可行路径

• 不可行路径是指无法满足时序要求的路径(起点的到达时间>终点的所需时间):

  • 缺少假路径或多周期路径约束

  • 即使将单元和网络延迟设为零,输入或输出延迟约束仍不合理
    compute_infeasible_path_overrides

  • 用于识别不可行的时序路径

  • 生成负的路径余量

  • 将生成的路径余量应用于这些路径,以防止对它们进行优化

不可行路径示例

• 下面的例子用于在当前场景中识别不可行路径,并将路径余量异常写入到 out.tcl 文件中。

  • 验证/调整路径余量异常后,通过引用 out.tcl 文件来应用它们。
    ■ 在报告中:arrival(到达时间)= 起点的到达时间,required(所需时间)= 终点的所需时间。

 1fc_shell> compute_infeasible_path_overrides -verbose -output out.tcl
2****************************************
3Report : infeasible path
4Design : risc_core
5Version: V-2023.12-SP3
6Date   : Mon Jun 10 06:49:20 2024
7****************************************
8
9                                                                                         startpoint     endpoint
10startpoint                   endpoint                      scenario       group path     arrival        required       infeasibility
11-------------------------------------------------------------------------------------------------------------------

12alu_clk_en                   alu/alu_cg/EN                 func::ss_125c  **in2reg_default**
13                                                                                             3.10           2.95           0.15
14data_clk_en                  data_path/data_cg/EN          func::ss_125c  **in2reg_default**
15                                                                                             3.10           2.96           0.14
16rf_clk_en                    reg_file/ramc_cg/EN           func::ss_125c  **in2reg_default**
17fc_shell> sh cat out.tcl 
18
19 #################################
20 # compute_infeasible_timing_paths 
21 #################################
22
23set_path_margin -10000.00 -setup -comment SYNOPSYS_INFEASIBLE_PATH_OVERRIDE -scenarios func::ss_125c -from alu_clk_en -to alu/alu_cg/EN
24set_path_margin -10000.00 -setup -comment SYNOPSYS_INFEASIBLE_PATH_OVERRIDE -scenarios func::ss_125c -from data_clk_en -to data_path/data_cg/EN
25set_path_margin -10000.00 -setup -comment SYNOPSYS_INFEASIBLE_PATH_OVERRIDE -scenarios func::ss_125c -from rf_clk_en -to reg_file/ramc_cg/EN

不可行路径命令详情

compute infeasible path overrides命令默认针对当前场景执行。

  • 根据需要使用-corners-modes-scenarios来指定角点、模式或场景。

  • 每个路径组识别出最差的10,000条路径。

    • 可以使用`-max_paths`或 `-nworst` 来调整此数目。

  • 默认情况下,该命令不直接应用路径余量。

    • 建议生成输出文件(使用`-output`参数),检查并修正后,再通过source命令应用。

    • 或者,可以使用`-apply_override_constraints`选项在命令执行时直接应用这些余量。
      • 生成的`set_path_margin`命令:

  • 应用一个时序例外,该例外可通过report_exceptions命令报告。

  • 始终通过10,000时间单位来放宽路径的时序要求。

移除不可行路径

• 自动生成的路径余量例外会带有注解属性值 "* comment",其内容为 SYNOPSYS_INFEASIBLE_PATH_OVERRIDE
• 要移除这些已生成的路径余量,可使用命令:
remove_path_margin -comment SYNOPSYS_INFEASIBLE_PATH_OVERRIDE

每个执行的 set_path_margin 命令都会在当前设计中创建一个异常对象,该对象可以通过其路径(使用 get_exceptions -from/-to)来识别。每个路径余量异常都有一个注释属性,该属性会自动被赋予一个值 synopsys_infeasible_path_override。这个注释属性的值可以用来仅通过上述的 remove_path_margin 命令从设计中移除路径余量异常。

你现在应该能够:

• 执行多角多模(MCMM)建立时间分析:

  • 定义分析和优化所需的角点、模式和场景。

  • 加载MCMM约束。

  • 配置场景设置。

  • 建模芯片内变异。
    • 处理不可行的时序路径。

缩放组(Scaling Groups)

通过使用缩放组,Fusion Compiler能够在由四个.db PVT条件界定的任何电压和温度之间进行插值,例如:

  • 0.9V @ -20°C

  • 0.8V @ 100°C

这使得在不必针对每个可能的工作电压和温度进行特性化的情况下,也能高效地进行多电压设计。

通常,这一功能在流片前最终设计阶段不被采用。

使用缩放组(Scaling Groups)

• 通过列出所需的.db文件来定义缩放组(SGs):

  • 实际的数据库文件不需要——数据库名称仅用于识别面板。

  • 要查找名称,运行report_lib并查找“source.db库”。

  • 在一个SG中的所有.db文件里,工艺编号和标签必须相同。

• 接下来,您可以指定哪个SG应用于哪个corner:

  • 默认情况下,所有SG都可以在所有角落中使用。

1define_scaling_lib_group -name my_sgl \
2{ss0p75vn40c.db ss0p95vn40c.db ss0p75vl25c.db ss0p95vl25c.db}
3# optional-ifyou only want to use the scaling group in a specific comer:
4set_scaling_lib_group my_sgl -corners ss_80c
5# Prevent any scaling groups from being used for analysis for corner ss_120c:
6set_scaling_lib_group -none -corners ss_120c

set_scaling_lib_group命令允许在指定的角点中使用特定的缩放库组进行分析。工具会在这个组内的库之间进行电压、温度或电压和温度的插值。你可以为最大延迟分析、最小延迟分析或两者都设置缩放库(使用-min和-max选项)。在一个角点上,你可以设置多个允许的缩放库组。默认情况下,所有定义的缩放库组可以在每个角点上使用。

在上面的例子中,通过set_scaling_lib_group -none -corners ss_120c禁用了特定角点的缩放功能,这意味着对于这个角点,将会进行VT匹配(电压和温度匹配)。

变化的来源

• 由于以下原因,器件的电气特性会发生变化:
  ■ 晶体管多边形形状的变化
  ■ 掺杂原子位置和密度的变化
  ■ 边缘的不规则性

早/晚与非高斯分布

• 设置(Setup)和保持(Hold)时序是在它们各自的晚(late)和早(early)分布尾部报告的。
• POCV通过早(early)和晚(late)结构来处理非高斯延迟分布,
 ■ 同时支持单一系数和LVF流程。
• 时序分析是利用估计的高斯分布进行的。

简而言之,即使面对非高斯分布的时序数据,POCV也能通过特定的早/晚结构来应对,这一处理方式同时兼容单一系数模型和LVF模型,并且在进行时序分析时,会采用估计的高斯分布模型来进行评估。

模拟OCV/使用最小/最大库
• 如果针对每个角点都有可用的“最小”和“最大”库来模拟芯片内变异,那么应如下所示指定这些库,而非应用set_timing_derate命令。

1current_corner SLOW
2set voltage 0.95 -object_list VDD
3set voltage 0.98 -object_list VDD -min
4set temperature 125
5set temperature 117 -min
6set process_number -late 1.10
7set process_number -early 1.08
8set process_label -late SLOW_MAX
9set_process label -early SLOW_MIN

如果需要工艺标签(例如,因为最小和最大库都使用了相同的工艺编号):

1set_process_label -late SLOW_MAX
2set_process_label -early SLOW_MIN

IC技术圈
致力于建立IC技术知识、IC技术圈内人的联系
 最新文章