通过场景分析最小化模式和角点的数量:
• 如若你继承了包含混合模式、角点和场景的约束条件:
▲ 为每个场景创建独有的模式和角点,借此可以移除相同的场景。
▲ 执行remove_duplicate_timing_contexts命令来找出模式和角点的最小集合,移除重复项,并重新分配场景。
▲ 运行write_script命令来记录模式、角点及场景相关的约束条件,以便后续使用或审查。
1create_mode M1 ; create_corner C1 2create_scenario -name S1 -mode M1 -corner C1 3create_mode M2 ; create_corener C2 4create_scenario -name S2 -mode M2 -corner C2 5...... 6current_scenario S1 7read_sdc S1.sdc 8current_scenario S2 9read_sdc S2.sdc 10...... 11remove_duplicate_timing_contexts 12write_script
假设在上述例子中,remove_duplicate_timing_contexts命令发现模式M1和M2实际上是相同的模式(因为它们共享完全相同的约束条件):它会删除模式M2,并将场景S2重新指派给M1(而不是原来的M2)。
该命令同样会删除完全相同的场景。例如,如果S1=M1+C1且S2=M2+C2,进一步假设M1=M2、C1=C2以及S1=S2,那么S2、M2和C2都将被移除。
write_script命令会创建一个名为wscript的目录,其中包含为每个模式、角点、场景以及全局约束单独的Tcl文件。
当你的网表或布局规划发生变化时,在设计设置阶段加载这些创建的文件。
检查时序约束条件:
• 可使用以下命令来检查约束条件:
▲ 使用check_timing检查缺失的时钟、时钟域交叉、缺失的输入/输出延时等问题…
▲ 运行report_exceptions识别具有单周期时序异常的路径:虚假路径、多周期路径、异步最小或最大延迟路径。
▲ 执行report_case_analysis以确认模式设置的正确性。
▲ 运用report_disable_timing来识别含有被禁用时序弧的路径(这些路径将不会针对时序进行优化)。
1check_timing 2foreach_in_collection mode [all_modes] { 3 current_mode $mode 4 report_exceptions 5 report_case_analysis 6 report_disable_timing 7}
■ 多数report_命令均针对当前场景生效:
■ 部分命令提供-scenario,-corner, 及/或-mode选项,以便调整报告内容所涉及的场景、角点或模式。
控制多角多模(MCMM)时序报告
• 报告所有活动的、启用建立时间分析的场景中,各个路径组内的单一最差建立时序路径:
report_timing
• 从列出的和活动的角点、模式或场景中,分别报告单一最差建立时序路径:
1report_timing -corners "C1 C4" 2report_timing -modes FUNC* 3report_timing -scenarios "S1 S2 S5 S6"
• 分别为每个活跃的角点、模式、场景或路径组报告最差建立时序路径:
1report_timing -reportby corner|mode|scenario|group
• 分别为每个列出的和活动的角点、模式或场景报告最差建立时序路径:
1report_timing -worst-corners "C1 C4" -modes FUNC* -scenarios "S1 S2 S5 S6"
控制场景分析与优化:
•create_scenario命令用于创建场景,将其设为活动状态,并启用以下分析类型:
-
建立时间和保持时间
-
泄漏功耗与动态功耗
-
最大转换、最大电容与最小电容
• 针对所有活动场景及其启用的分析类型,优化会同时进行。
-
即使启用,保持时间优化也不会在综合阶段执行。
-
当使用同时发生的时钟和数据(CCD)时,会考虑到保持时间。
• 使用set_scenario_status命令限制分析类型,或在编译前将场景设为非活动状态。
-
详情请参见下一页的示例。
CCD = 同时时钟与数据(Concurrent Clock and Data)。
CCD优化通过改变启动和捕获触发器的时钟延迟值,可以改善数据路径的时序。当为满足建立时间而调整时钟偏斜时,保持时间可能会受到严重影响。因此,在编译过程中同时启用保持场景尤为重要。尽管这不会直接启用保持修复或优化,但它能确保保持时间不至于大幅恶化。
CCD优化既可以在使用理想时钟时进行,也可以在进行时钟树综合时应用。
这一主题将在后续单元中更详细地讨论。
修改Scenario 状态的示例:
1create_scenario -mode mFUNC -corner cSLOW 2create_scenario -mode mTEST -corner cSLOW 3create_scenario -mode mFUNC -corner cFAST 4create_scenario -mode mTEST -corner cFAST 5#Disable setup timing for the FAST corner 6set_scenario_status *cFAST -setup false 7#Disable leakage power analysis and optimization for the TEST mode scenarios: 8set_scenario_status mTEST* -leakage_power false 9# Disable fast test mode 10set_scenario_status mTEST::cFAST -active false 11compile_fusion
上表中场景名称后的 "*" 表示这些场景名称为用户自定义(而非默认的 "mode::corner" 格式)。
除了使用report_scenarios命令生成包含场景状态设置的表格外,你还可以通过查询场景属性来获取类似信息:mode(模式)、corner(角点)、active(活动)、setup(建立时间)、hold(保持时间)、leakage_power(泄漏功耗)、dynamic_power(动态功耗)、max_tran(最大转换)、max_cap(最大电容)、min_cap(最小电容)。对于脚本编写目的而言,这种方法比使用report_scenarios更为实用。示例如下:
定义操作条件下的角点PVT值
• Fusion Compiler 支持使用 set_operating_conditions 来确定每个角点的PVT值。
set_operating_conditions Worst -library saed32lvt_ss0p95vl25c.db
• 这是一种间接方法,依赖于操作条件模型名称和库来确定PVT数值。
在上述示例中,通过在库 saed321vt_ss0p95vl25c.db 中指定操作条件名称为 Worst,分别确定了标称PVT值为0.99(典型工艺偏差)、125°C(温度)和0.95V(电压)。
上述表格(针对不同的LVT、IP1和IP2库)以及后续页面中的表格,是通过使用 report_lib 命令生成的。
直接定义PVT - 推荐
• 强烈建议使用直接方法,以提高清晰度和易用性:
1current_corner ss125c 2set_process_number 0.99 3set_voltage 0.75 4set_voltage 0.95 -object_list VDDH 5set_temperature 125
在施加电压时,您可以直接为设计设定电压(如第一个示例所示)。如果UPF创建了电源网络,那么也需要对该网络设定电压。例如,如果创建了VDD和VSS这两个网络:
1set_voltage -object_list VDD 0.95 2set_voltage -object_list VSS 0.0
关于工艺(P)值的一点说明:大约几十年前,用户仅获得一个在“典型”PVT角点下特征化的库。该库会包含多个操作条件,每个条件都有一套不同的PVT值,以代表不同的角点。时序分析随后会将典型单元延迟乘以P值以及基于工艺k因子的V和T缩放因子,从而推导出“max”和“min”角点的延迟。为了表示比典型工艺更慢的角点,会使用大于1.0的P值;相反,对于比典型工艺更快的角点,则使用小于1.0的P值。例如,P值为1.2意味着所有单元延迟由于较慢的工艺角点而比典型延迟慢20%;同样,P值为0.8则意味着由于较快的工艺角点,单元延迟比典型情况快20%。
如今,P值(或V和T值)不再用于任何缩放目的,因为每个库中的“标称”单元延迟已经针对特定的PVT角点进行了特征化。PVT值仅用于标识库的标称PVT角点。因此,许多库供应商已经改为在所有工艺角点上使用P值为1的做法。这种做法直接导致了直接PVT指定方法的一个问题:无法区分两个针对相同V和T但针对慢速和快速工艺角点特征化的不同库,因为这两个库的P值都是1。解决这个问题的一种方法是为不同的工艺角点使用不同的P值(例如,上述示例中的0.99和1.01)。只要这些值不同,具体数值并不重要。如果不能使用不同的P值,可以通过应用“工艺标签”来区分库,这一点稍后讨论。