静态时序分析(STA)中多角多模式(MCMM)约束编写方法
扫描二维码
随时随地手机看文章
在现代芯片设计中,单一PVT(工艺、电压、温度)条件下的静态时序分析(STA)已无法满足流片要求。多角多模式(MCMM, Multi-Corner Multi-Mode)是签核(Sign-off)的必经之路。本文将结合PrimeTime(PT)与Genus/Innovus流程,解析MCMM约束的编写核心。
一、MCMM的核心概念:模式(Mode)与角(Corner)
• 模式(Mode):指芯片的工作状态,如Function(功能模式)、Scan(测试模式)、Sleep(低功耗模式)。不同模式下,时钟频率、使能信号和输入约束截然不同。
• 角(Corner):指工艺偏差,如SSG(-40℃,慢工艺,低电压)关注建立时间(Setup),FFG(+125℃,快工艺,高电压)关注保持时间(Hold)。
MCMM的本质是穷举所有“模式×角”的组合,确保芯片在任何极端条件下都能工作。
二、PrimeTime中的MCMM约束编写
在PT中,MCMM通过create_scenario和set_operating_conditions实现。
1. 定义工艺角(Corners)
首先定义PVT条件,通常写在单独的.tcl文件中。
# pt_corners.tcl
# 定义慢角(Setup Critical)
create_corners slow_125c_ssg
set_operating_conditions -analysis_type on_chip_variation \
-process 1.0 -voltage 0.81 -temperature 125 \
-library slow.db
# 定义快角(Hold Critical)
create_corners fast_40c_ffg
set_operating_conditions -analysis_type on_chip_variation \
-process -1.0 -voltage 0.99 -temperature -40 \
-library fast.db
2. 定义模式(Modes)
在顶层约束文件中,定义不同的工作模式。
# pt_modes.tcl
# 功能模式
create_scenarios func_mode
set_current_scenario func_mode
source ./constraints/func.sdc # 加载功能模式SDC
# 扫描测试模式
create_scenarios scan_mode
set_current_scenario scan_mode
set_case_analysis -active true [get_ports scan_en]
source ./constraints/scan.sdc # 加载扫描模式SDC(通常频率更低)
3. 关联角与模式(MCMM矩阵)
将角与模式组合,形成完整的分析视图。
# pt_mcmm_setup.tcl
source pt_corners.tcl
source pt_modes.tcl
# 创建MCMM集合
create_analysis_view -name func_setup -scenarios {func_mode@slow_125c_ssg}
create_analysis_view -name func_hold -scenarios {func_mode@fast_40c_ffg}
create_analysis_view -name scan_setup -scenarios {scan_mode@slow_125c_ssg}
# 设置当前分析视图
set_current_analysis_view -setup {func_setup} -hold {func_hold}
三、Genus/Innovus中的约束编写(Synthesis & P&R)
在综合和布局布线阶段,工具需要感知不同的操作条件。
1. Genus综合约束
Genus使用create_op_cond和create_constraint_mode。
# genus_mcmm.tcl
# 定义操作条件(对应PT的Corner)
create_op_cond -name op_slow -opcond {SSG_125C} \
-library slow.lib -voltage 0.81 -temp 125
create_op_cond -name op_fast -opcond {FFG_-40C} \
-library fast.lib -voltage 0.99 -temp -40
# 定义约束模式(对应PT的Mode)
create_constraint_mode -name func_cm -sdc_files {func.sdc}
create_constraint_mode -name scan_cm -sdc_files {scan.sdc}
# 应用MCMM设置
set_db lp_insert_clock_gating true
set_db syn_generic_effort high
syn_gen -effort high -op_cond {op_slow op_fast} \
-constraint_mode {func_cm scan_cm}
2. Innovus布局布线约束
Innovus通过create_rc_corner和create_constraint_mode来配合MCMM。
# innovus_mcmm.tcl
# RC Corner(寄生参数角)
create_rc_corner -name rc_max -cap_table max.capTbl
create_rc_corner -name rc_min -cap_table min.capTbl
# 约束模式
create_constraint_mode -name func_cm -sdc_files {func.sdc}
create_constraint_mode -name hold_cm -sdc_files {hold.sdc}
# 建立分析视图
create_analysis_view -name func_setup_view \
-constraint_mode func_cm -rc_corner rc_max
create_analysis_view -name func_hold_view \
-constraint_mode hold_cm -rc_corner rc_min
# 应用到当前设计
set_analysis_view -setup {func_setup_view} -hold {func_hold_view}
四、MCMM编写的常见陷阱与避坑
1. 模式与角混淆
◦ 错误:在func.sdc中定义operating_conditions。
◦ 正确:SDC文件只描述时序路径(时钟、IO),PVT条件在create_analysis_view或create_op_cond中定义。SDC应是模式相关的,而非角相关的。
2. 多模式下的False Path
◦ 现象:Scan模式和Function模式共用一条路径,但Scan下该路径无效。
◦ 解决:在Scan模式的SDC中,对Function特有的路径设置set_false_path。
# scan.sdc
set_false_path -from [get_clocks func_clk] -to [get_clocks test_clk]
3. 签核与优化不一致
◦ 现象:综合时用WC(Worst Case),PT签核用OCV/AOCV。
◦ 解决:确保Genus/Innovus中create_op_cond的PVT值与PT的create_corners完全一致。
五、结语
MCMM约束编写的核心在于“分离”与“组合”:将模式(Mode)定义在SDC中,将工艺角(Corner)定义在PVT/RC设置中,最后通过create_analysis_view将它们像搭积木一样组合起来。掌握MCMM,是芯片从“能跑”走向“能流片”的关键一步。





