背景介绍
1.逻辑综合
2.形式验证
3.物 理实现
tf文件为物理规则,TLU为timing计算
ICC文件包含物理数据与综合数据
cell view包含所i有物理信息,fram包含接口连线,与禁止走线区域,pnr过程中,ICC只会把fram view读进memory,cel view只在最后写gds用
建立milway
create mw1iboc8051 mwLIB-open
-technology techfile.tf
-mw_reference_library"mw/sc mw/io mw/ram32" #物理库
新建设计
read_verilog -top oc805l_top oc805l_top.v
read_sdc oc805l.sdc
save_mw_cel -as init_design
Floorplan
初始化
包含stdcel row,metal track
initialize_floorplan
摆放好macro和port的位置
加上power&ground的strap
placement
自动摆放所有未摆放好的stdcel,时序优化,面积优化,功耗优化
place阶段还没有route,需要进行估算
1.Route之前,icc做place_opt进行优化时用virtualRoute估计连接线的长度和形状,以此根据TLU+模型估计RC参数;
2.事实上,在后面降到的CTS阶段,由于没有route,所以也是通过同样的方法估计的RC参数;
place之后会分析timing,要满足setup time
clock tree synthesis/CTS
要完成的工作:
1.在此之前,从synthesis开始到placement,Clock都被假设为理想的,从clockport到reg/CK的延时都为0;我们需要构建一棵ClockTree,把Clock信号从port送到reg/CK;
2.ClockTree长好之后还需要对timing进行优化(这个阶段的优化叫做PostCTSOpt),包括setup和hold:
第一,place_opt是基于理想时钟而对设计进行,长完ClockTree之后的时钟和理想时钟存在区别;
第二,CTS的过程中工具会挪动原来的单元,导致delay有变化;
第三,需要修Holdtiming,因为在这之前一直没理会Hold(why?);
3.要完成对ClockNet的绕线(route);
routing
对所有net进行绕线,进行timing,area,power优化
DFM(DesignForManufacturing);
1.这一步也通常被称为DFM(DesignForManufacturing);
2.良率(Yield):因为有些芯片在wafer上制造出来有缺陷,有的芯片能正常工作,有些芯片工作不正常,那么正常的芯片占总芯片的比例就是良率;
wire spreading(增大线间距)
Redundant Via Insertion
FillerCell lnsertion
填满未摆放cell的row/site,构建连续完整的NWell/PWellMetal Fill Insertion
Metal FIle
各处Meta的密度不一样,在制造的过程中容易出现下面的问题:
Metal Srotting(特别宽薄的金属会翘起来,解决方法挖一些孔)
4.形式验证二
mapped.v vs pnr.v
5.Signaloff STA:StartRC + PT(.spef)
1.STA:StaticTimingAnalysis,简称STA。是相对于使用激励动态仿真而言的,STA通过静态分析delay并检直时序是否满足;
2.SignoffSTA:可以理解为最终的、权威的STA,此处timing要是过了就人为性能就满足要求了;
3.SignoffSTA要求使用最精确的RC寄生参数和STA算法;
4.高精度的RC参数用synopsys的StarRC工具提取,Cadence相应的工具叫 RC
5.STA工具用synopsys的PrimeTime(PT),Cadence相应的工具叫ETS;
startRC提取寄生参数
STA
6.物理验证
DRC物理规则检查
fab的要求,会给后端一个drc的rule文件,包含所有物理要求
Antenna Check(天线规则检查)
随着连线长度的增加,在gate上的电压升高,天线规则设定了能接受的线长
LVS(Layout vs Schematic)
验证pnr.v与gds等价
7.power signoff:IR Drop
电源经过不同路径会有压降,对最差情况进行分析,常用软件EPS
实际操作
文件包含以下
1.DMSA(Design Multi-Scenario Analysis)
-
定义:多场景时序分析技术,用于在多种工作条件(如不同电压、温度、工艺角)下验证设计的时序收敛性。
2. EPS(Electrical Power Signoff)
3. FM(Formal Verification)
4. PNR(Place and Route)
-
定义:布局布线,将逻辑网表转换为物理版图的核心流程。
-
关键步骤:
-
Floorplan:规划芯片宏单元(如IP、RAM)和I/O的位置。
-
CTS(Clock Tree Synthesis):构建时钟树,减少时钟偏斜(Skew)。
-
布线:连接所有逻辑单元,确保满足时序和物理规则。
-
5. PV(Physical Verification)
6. StarRC
-
定义:Synopsys的寄生参数提取工具,用于生成标准寄生交换格式(SPEF)文件。
-
作用:提取版图中的电阻、电容等寄生参数,供静态时序分析(STA)工具(如PrimeTime)使用,精确评估时序性能37。
流程中的关联性
-
设计流程顺序:逻辑综合(生成网表)→ PNR → StarRC(寄生提取)→ STA/DMSA(时序验证)→ FM(功能等价性验证)→ PV(物理规则检查)→ EPS(电源签核)。
ICC_SETUP INIT_DESIGN_ICC PLACE_OPT_ICC CLOCK_OPT_CTS_ICC
CLOCK_OPT_PSYN_ICC CLOCK_OPT_ROUTE_ICC
(ZRT)ROUTE_ICC ROUTE_OPT_ICC
综合操作
重要指令
get_attri $clk name/period
set_svf -off #VF文件记录了综合过程中对设计的优化操作(如寄存器合并、信号重命名等),供形式验证工具(如Formality)进行逻辑等价性检查时使用8。
布局操作
打开ICC,首先创建MW库
###########
source ../scripts/rm_setup/icc_setup.tcl
create_mw_lib \
-tech $TECH_FILE \
-bus_naming_style {[%d]} \
-mw_reference_library $MW_REFERENCE_LIB_DIRS \
$MW_DESIGN_LIBRARY
导入准备文件
open_mw_lib $MW_DESIGN_LIBRARY
read_verilog -top $DESIGN_NAME $ICC_IN_VERILOG_NETLIST_FILE
uniquify_fp_mw_cel
current_design $DESIGN_NAME
link
删除之前针对不同情况的scenario,并设定新的多模多态
#remove_sdc
remove_scenario -all
source ../scripts/usr_tcl/mmmc.tcl
设置bus group
set cur_scenario [current_scenario]
foreach scenario [all_active_scenarios] {
current_scenario $scenario
set ports_clock_root {}
foreach_in_collection a_clock [get_clocks -quiet] {
set src_ports [filter_collection [get_attribute $a_clock sources] @object_class==port]
set ports_clock_root [add_to_collection $ports_clock_root $src_ports]
}
group_path -name REGOUT -to [all_outputs]
group_path -name REGIN -from [remove_from_collection [all_inputs] $ports_clock_root]
group_path -name FEEDTHROUGH -from [remove_from_collection [all_inputs] $ports_clock_root] -to [all_outputs]
};
设置当前scenario
set cur_scenario [current_scenario]
foreach scenario [all_active_scenarios] {
current_scenario $scenario
remove_propagated_clock [all_fanout -clock_tree -flat]
remove_propagated_clock *
};
current_scenario $cur_scenario
设置线层,以及CELL占总面积的 利用率
set_ignored_layers -max_routing_layer M5 -min_routing_layer M1
initialize_floorplan -core_utilization 0.40
可以保存floorplan,下次直接打开
加入end_cap,防止DRC在边缘出问题
add_end_cap -respect_keepout -respect_blockage -lib_cell SHFILL3_HVT
保存cell设计
save_mw_cel -as init
加入tap_cell,此处SHFILL3_HVT应该是专门的tap_Cell单元(此工艺库中没有),用于连接衬底(Substrate)和阱(Well),防止闩锁效应(Latch-up)并确保电位稳定
add_tap_cell_array -pattern stagger_every_other_row \
-fill_boundary_row true \
-respect_keepout \
-master_cell_name SHFILL3_HVT \
-distance 110
创建电源线,并连接电源引脚和线
derive_pg_connection -power_net VDD -ground_net VSS -create_ports top
derive_pg_connection -power_net VDD -power_pin VDD
derive_pg_connection -ground_net VSS -ground_pin VSS
画供电网络,并连接标准单元网络
create_power_straps -direction vertical -start_at 5 -num_placement_strap 979 -increment_x_or_y 60 -nets {VDD VSS} -layer M4 -width 4 -pitch_within_group 30 -extend_low_ends to_boundary_and_generate_pins -extend_high_ends to_boundary_and_generate_pins
create_power_straps -direction horizontal -start_at 20 -num_placement_strap 979 -increment_x_or_y 60 -nets {VDD VSS} -layer M5 -width 10 -pitch_within_group 30 -extend_low_ends to_boundary_and_generate_pins -extend_high_ends to_boundary_and_generate_pins
preroute_standard_cells -nets {VDD VSS} #加蓝线
如果想关了重新进行打线
close_mw_cel
open_mw_cel prepg
执行布局优化,重点进行 面积恢复(回收冗余空间),同时优化 功耗(门控时钟/电压域调整)和缓解 布线拥塞
生成 所有激活场景(PVT条件、模式)下的时序、面积、功耗违规报告
强制重新连接所有单元的VDD/VSS引脚,修复因布局调整导致的 电源网络断裂 或 PG引脚悬空
将未连接的输入端口绑定到TIE单元(高电平TIEH_HVT/低电平TIEL_HVT),防止 悬空信号引入漏电或噪声
place_opt-area_recovery -efforthigh-power-congestion
report_constraint-all-scenario[all_active_scenarios]> ../rpts/all_vios.placel.rpt
derive_pg_connection -power_net VDD -power_pin VDD -cells [get_flat_cells *]-reconnect
derive_pg_connection -ground_net VSS -groundpin VSS -cells [get_flat_cells *] -reconnect
###
suppress_messageAPL-017
connect_tie_cells-objects*
-obj_type cell_inst
-tie_high_lib_cell TIEH_HVT
-tie_low_lib_cell TIEL_HVT
-max_fanout32
all_tieoff_cells
时钟树综合
CTS_SETTING
reset_clock_tree_references
set ICC_CTS_REF_LIST "VX2_LVT INVX4_LVT INVX8_LVT INVX16_LVT"
set_clock_tree_references -references $ICC_CTS_REF_LIST
set_clock_tree_references -delay_insertion_only -references $Icc_CTs_REF_LIST
set_clock_tree_references -sizing_only -references $Icc_CTS_REF_LIST
reset_clock_tree_references
清除之前设置的时钟树参考单元列表,恢复工具默认配置。通常在CTS流程开始前调用,避免历史设置干扰当前优化5。
set_clock_tree_references
指定时钟树综合(CTS)阶段允许使用的逻辑单元类型,限制仅使用指定单元进行时钟树延迟调整,仅允许调整时钟树上已有单元的尺寸
# 定义时钟树路由规则名称
set ICC_CTS_RULE_NAME "cts_1w_2s"
# 检查现有规则是否存在
redirect -var x {report_routing_rules $ICC_CTS_RULE_NAME}
# 若规则不存在且满足条件,则创建新规则
if {$ICC_CTS_RULE_NAME == "iccrm_clock_double_spacing" && [regexp "Info: No non-default rule" $x]} {
# 定义双倍间距规则(可根据工艺库需求添加宽度参数)
define_routing_rule $ICC_CTS_RULE_NAME \
-default_reference_rule \
-multiplier_spacing 2 \
# -multiplier_width 2 # 如需双倍线宽则取消注释
# 报告规则属性并应用到时钟树优化
report_routing_rule $ICC_CTS_RULE_NAME
set_clock_tree_options \
-routing_rule $ICC_CTS_RULE_NAME \
-use_default_routing_for_sinks 1 \
-optimize # 补充缺失的优化选项
}
# 1. 定义CTS使用的金属层(需与工艺库匹配)
set ICC_CTS_LAYER_LIST {M3 M4 M5 M6 M7} ;# 修正:花括号定义列表
set_clock_tree_options -layer_list $ICC_CTS_LAYER_LIST
# 2. 基础时序约束(单位需与设计设置一致,如ns)
set_clock_tree_options \
-max_tran 0.4ns \ ;# 最大过渡时间(默认0.5ns)
-target_skew 0.1ns \ ;# 目标时钟偏差
-target_early_delay 0.5ns \ ;# 补充缺失的-clock_trees参数
-clock_trees [all_clocks] ;# 约束覆盖所有时钟
# 3. 可选高级约束(按需启用)
# set_clock_tree_options -max_cap 1.5pF -clock_trees [list clk_core] ;# 指定时钟的电容上限
CLOCK_OPT_CTS_ICC
定义CTS阶段插入的缓冲器/反相器的实例名前缀,便于后期调试
使用Arnoldi算法计算时钟网络延迟,精度高于默认的Elmore模型
#通过分拆时钟门控(Clock Gating)降低动态功耗,但可能增加时钟树复杂度
set_app_var cts_instance_name_prefix cTs
#check_mv_design -verbose
set_delay_calculation -clock_arnoldi
# if {$ICC_CTS_CLOCK_GATE_SPLIT}{
# report_split_clock_gates_options
# set_optimize_pre_cts_power_options -split_clock_gates true
#}
-
-only_cts
:仅执行时钟树综合(缓冲器插入、层级优化)。 -
-no_clock_route
:跳过时钟网络物理布线,用于快速评估时钟结构。
clock_opt -only_cts -no_clock_route
report_clock_timing -type skew -clock clk
report_clock_tree -clock_trees clk
# 1. 连接电源网络(支持全层级单元)
derive_pg_connection \
-power_net VDD \
-power_pin VDD \
-cells [get_cells -hier *] \ ;# 覆盖所有层级单元
-reconnect ;# 谨慎使用:仅在明确需要覆盖时启用
# 2. 连接地网络(同上)
derive_pg_connection \
-ground_net VSS \
-ground_pin VSS \
-cells [get_cells -hier *] \
-reconnect
# 3. 验证电源连接完整性
check_pg_connectivity -verbose
# 1. 抑制非关键警告(APL-017通常与物理库版本兼容性提示相关)
suppress_message APL-017
# 2. 连接高/低电平 Tie Cell(修正参数与对象范围)
connect_tie_cells \
-objects [get_cells -hier -filter "is_tie_cell"] \ ;# 动态获取所有层级Tie Cell
-obj_type cell_inst \ ;# 操作对象类型为单元实例
-tie_high_lib_cell TIEH_HVT \ ;# 高电平Tie Cell类型
-tie_low_lib_cell TIEL_HVT \ ;# 低电平Tie Cell类型
-max_fanout 32 ;# 单Tie Cell最大驱动32个负载
# 3. 生成Tie网络报告(调试时启用)
# report_tie_nets -verbose > tie_net.rpt
# 4. 保存CTS阶段设计库(修正变量名拼写)
save_mw_cel -as $ICC_CLOCK_OPT_CTS_CEL ;# 注意变量名大小写一致性(CLOCK非CLoCK)
CLOCK_OPT_PSYN_ICC(优化)
启用时钟重收敛悲观去除(CRPR)技术。CRPR 技术可以在时序分析中减少由于时钟信号的重收敛而引入的悲观因素,从而得到更准确的时序分析结果。
set_app_var timing_remove_clock_reconvergence_pessimism true
在案例分析中不进行顺序传播
#set_app_var case_analysis_sequential_propagation never
设置面积关键范围
# Set Area Critical Range
# Typical value: 5 percent of critical clock period
set_app_var physopt_area_critical_range 0.1
设置功耗关键范围
# Set Power Critical Range
# Typical value: 5 percent of critical clock period
set_app_var physopt_power_critical_range 0.1
-
set ICC_FIX_HOLD_PREFER_CELLS "*/INV* */*BUFF* */DEL*"
:将ICC_FIX_HOLD_PREFER_CELLS
变量设置为一个包含特定单元名称模式的字符串,这些模式包括反相器(INV
)、缓冲器(BUFF
)和延迟单元(DEL
)。 -
if {{ $ICC_FIX_HOLD_PREFER_CELLS != ""}}
:检查ICC_FIX_HOLD_PREFER_CELLS
变量是否不为空。 -
remove_attribute [get_lib_cells $ICC_FIX_HOLD_PREFER_CELLS] dont_touch
:从库单元中移除dont_touch
属性,意味着这些单元可以被工具进行修改和优化。 -
set_prefer -min [get_lib_cells $ICC_FIX_HOLD_PREFER_CELLS]
:设置这些库单元为优先选择的单元,并且以最小化的方式进行选择。 -
set_fix_hold_options -preferred_buffer
:设置保持时间修复选项,将这些优先选择的单元作为首选缓冲器来修复保持时间违规。
set ICC_FIX_HOLD_PREFER_CELLS "*/INV* */*BUFF* */DEL*"
if {{ $ICC_FIX_HOLD_PREFER_CELLS != ""}} {{
remove_attribute [get_lib_cells $ICC_FIX_HOLD_PREFER_CELLS] dont_touch
set_prefer -min [get_lib_cells $ICC_FIX_HOLD_PREFER_CELLS]
set_fix_hold_options -preferred_buffer
}}
设置多模态
remove_scenario-all
source ../scripts/usr_tcl/set_mmmc_libs.tcl
source../scripts/usr_tcl/mmmc_postcTs.tcl
all_active_scenarios
RC提取
extract_rc
在无需重新布线的情况下进行时钟树物理综合优化,侧重面积与功耗修复。
clock_opt -no_clock_route -only_psyn -area_recover -power
report_constraint -all -scenario [all_active. enarios]>../rpts/all_vios.psynl.rpt
CLOCK_OPT_ROUTE_ICC
对时钟网络进行预布线,但跳过轨道分配(-no_track
)和详细布线(-no_detail
)
将时钟网络的延迟计算模式设置为 Arnoldi算法(替代传统Elmore模型)
基于已有全局布线结果(-reuse_existing_global_route
),对时钟网络执行增量式详细布线
将当前设计单元(CEL)保存至环境变量$ICC_CLOCK_OPT_ROUTE_CEL
指定路径
route_group-all_clock_nets -no_track -no_detail
set_delay_calculation -clock_arnoldi
route_zrt_group -all_clock_nets -reuse_existing_global_route true
save_mw_cel -as $ICC_CLOCK_OPT_ROUTE_CEL
布线操作
设置ZRoute布线引擎在详细布线阶段自动插入冗余通孔
报告当前金属层的优选布线方向
set_route_zrt_common_options -post_detail_route_redundant_via_insertion high
report_preferred_routing_direction
报告当前设计所有激活场景(Process-Voltage-Temperature, PVT)下的 TLU+(互连延迟模型) 和 PLU(工艺参数模型) 文件配置信息,确保寄生参数提取和时序分析的准确性
report_tlu_plu_files -scenario [all_scenarios]
在布线阶段 并行插入冗余通孔,并预留空间确保后续优化可行性
执行 初始布线优化,聚焦于时序收敛和拥塞缓解,跳过最终设计规则检查(DRC)
set_route_zrt_common_options s -concurrent_redundant_via_mode reserve_space
set_route_zrt_common_options s -concurrent_redundant_via_effort_level high
route_opt -initial_routeonly
禁用ZRoute引擎的 并行冗余通孔插入 功能,回归传统单线程处理模式
根据当前物理布局和布线状态, 动态修正时钟树延迟值
强制重新连接所有单元的VDD/VSS引脚,修复因布局调整或ECO操作导致的 电源网络断裂
set_route_zrt_common_options s-concurrent_redundant_via_mode off
update_clock_latency
derive_pg_connection -power_net VDD -power_pin VDD -cells [get_flat_cells*]-reconnect
derive_pg_connection -ground_net VSS -ground_pin VSS -cells [get_flat_cells *] -reconnect
save_mw_cel -as $ICC_ROUTE_CEL
布线优化(route_opt)
为后续生成的实例(如缓冲器、冗余通孔)添加统一前缀 icc_route_opt_
,便于ECO阶段快速定位修改目标
基于当前物理状态(布线、电容耦合)重新计算时序路径,确保优化基准的准确性
高努力路由优化
set_app_var compile_instance_name_prefix icc_route_opt
update_timing
route_opt-skip_initial_route -effort high -xtalk_reduction -power
report_constraint -all -scenario [all_active_scenarios] > ../rpts/all_vios.routed.rpt
derive_pg_connection -power_net VDD -power_pin VDD -cells [get_flat_cells*]-reconnect
derive_pg_connection -ground_net VSS -ground_pin VSS -cells [get_flat_cells *] -reconnect
save_mw_cel -as $ICC_ROUTE_OPT_CEL
结尾操作(OUTPUT)
打开新的ICC,
-
创建新Milkyway库(
create_mw_lib
) -
从参考库复制优化后的设计单元(
copy_mw_cel
) -
配置参考库依赖关系(
set_mw_lib_reference
)
if (1} { ;# in new icc_shell
set DATA_DIR ../output_data/v0
sh mkdir -p $DATA_DIR
source../scripts/rm_setup/icc_setup.tcl
source../scripts/usr_tcl/set_mmmc_libs.tcl
set from_mw_cel"SICC_RoUTE_oPT_CEL"
sh rm -rf $DATA_DIR/$(DESIGN_NAME)_LIB
create_mw_lib -tech $TECH_FILE -bus_naming_style ([%d]] -mw_reference_Iibrary"$MW_REFERENCE_LIB_DIRS"$ $DATA_DIR/$(DESIGN_NAME}_LIB
copy_mw_cel -from_lib $[MW_DESIGN_LIBRARY} -to_lib $DATA_DIR/$(DESIGN_NAME}_LIB -from $from_mw_cel -to $DESIGN_NAME
set_mw_lib_reference $DATA_DIR/$(DESIGN_NAME}_LIB -mw_reference_library "$MW_REFERENCE_LIB_DIRS"
加载指定路径下的Milkyway设计库,准备后续操作
列出库中所有设计单元
设置TLU+文件(互连延迟模型)
打开指定设计单元
设置输出目录
###GDSII
open_mw_lib_DATA_DIR/$(DESIGN_NAME)_LIB
listLimw_cels
set_tlu_plus_files -max_tluplus $TLUPLUS_CMAX -min_tluplus $TLUPLU
S_CMIN -tech2itf_map $TLUPLUS_MAP
open_mw_cel SDESIGN_NAME
Set RESULTS_DIR SDATA_DIR
物理设计签核前执行 设计名称标准化 和 电源网络修复
####Outputs Script
################
set enable_page_mode false
##Change Names
change_names -rules verilog -hierarchy
#save_mw_cel -as change_names_icc
#close_mw_cel
#open_mw_cel change_nanes_icc
#
derive_pg_connection-power_net VDD -power_pin VDD -cells [get_flat_cells*] -reconnect
derive_pg_connection -ground_net VSS -ground_pin VSS -cells [get_flat_cells *] -reconnect
从物理设计工具(如Synopsys ICC)导出 签核级Verilog网表,做STA FM用
##Verilog
#write_verilog -diode_ports -no_physical_only_cells -pg -supply_statementnone $RESULTS_DIR/$DESIGN_NAME.output.pg.v
write_verilog -no_physical_only_cells -supply_statement none $RESULTS_DIR/SDESIGN_NAME.output.v
通过write_def
输出标准设计格式(DEF),通过set_keepout_margin
为所有宏单元设置安全间距,防止信号干扰和光刻热点
##DEF
write_def -output SRESULTS_DIR/$DESIGN_NAME.output.def
set_keepout_margin -type hard -all_macros -outer [5 5 5 5]
填充单元操作
set decap_fillers "DCAP_HVT"
set fillers "SHFILL1_HVT SHFILL2_HVT SHFILL3_HVT SHFILL64_HVT SHFILL128_HVT" ;# 修正fi1lers->fillers
# 去耦电容插入(命令语法修正)
insert_stdcell_filler -respect_keepout \
-connect_to_power VDD \
-connect_to_ground VSS \
-cell_with_metal $decap_fillers \ ;# 修正netal->metal
-cell_with_metal_prefix decap
# 标准填充插入
insert_stdcell_filler -respect_keepout \
-connect_to_power VDD \
-connect_to_ground VSS \
-cell_with_metal $fillers
-
设计备份与恢复:通过
save_mw_cel
和copy_mw_cel
实现安全操作回滚。 -
填充单元移除:过滤非逻辑单元(
*SHFILL*
)以适配LVS工具需求。 -
PG-aware网表导出:保留电源地(VDD/VSS)连接关系,确保物理与逻辑一致性
## For LvS use,the option -no_physical_only_cells is removed
save_mw_cel -asbak
remove_cell *SHFILL* > rm_filler.log
write_verilog -diode_ports -pg RESULTS_DIR/SDESIGN_NAME.output.pg.lvs.filler.v
close_mw_cel
copy_mw_cel -from bak-to SDESIGN_NAME
Open_mW_celSDESIGN_NAME
在布局布线阶段 限制工具使用的金属层范围
set_ignored_layers -min_routing_layer M1 -max_routing_layer M7
金属层填充
提取过程中不考虑实际的金属填充。也就是说,在进行寄生参数提取等操作时,不会将金属填充的影响纳入计算。
在提取过程中考虑浮动的金属填充。与之前的 NONE
设置不同,此时会将金属填充的影响纳入寄生参数提取等操作的计算中。
#-max_length (ml 2 m2 2 m3 2 m4 2 m5 2 m6 2 m7 2)
set_extraction_options -real_metalfill_extraction NONE
insert_metal_filler -routing_space 9
-timing_driven -from_metal 1 -to_metal 7
-stagger (ml m2 m3 m4 m5 m6 m7 m8)
-width (ml 0.3 m2 0.3 m3 0.3 m4 0.3 m5 0.3 m6 0.3 m7 0.3 m8 0.3)
-min_length (ml 0.5 m2 0.5 m3 0.5 m5 0.5 m6 0.5 m7 0.3 m8 0.3)
-max_length (ml 1 m2 2 m3 2 m5 2 m6 2 m7 2 m8 1)
#-fill_poly
set_extraction_options -real_metalfill_extraction FLoATING
set RESULTS_DIR $DATA DIR
##GDSII
#Set options - usually also include a mapping file (-map_layer)
set_write_stream_options
-child_depth 255
-map_layer/disk2/course/library/tech/icc/saed90nm.gdsout.map
-output_filling fill
-output_outdated_fill
-keep_data_type
-max_name_length 255
-output_net_nane_as_property 1
-output_instance_name_as_property 1
-output_pin (geometry text)
write_stream -lib_name $RESULTS_DIR/$(DESIGN_NAME}_LIB -format gds $RESULTS_DIR/SDESIGN_NAME.gds
提取电源网络(VSS/VDD)在金属层M7上的几何形状,并将其转换为引脚(Pin)
移除所有布局阻挡(Placement Blockage)、布线阻挡(Routing Blockage)和布线引导(Route Guide),确保后续优化不受限制
定义布线层范围(M1-M8),某些工具(如天线效应检查)会忽略此范围外的层,避免干扰关键层的分析。
生成宏模块(Macro)的物理框架,通常用于IP模块或标准单元的布局集成
使用ZRT引擎分层提取天线效应(Antenna Effect)属性,检测制造过程中因电荷积累导致的栅氧击穿风险。
set ns [get_net_shapes -of [get_nets -all [VSs VDD)] -f layer==M7]
convert_wire_to_pin -net_names (Vss VDD) $ns
remove_placement_blockage -all
remove_routing_blockage
remove_route_guide -all
save_mw_cel
##
set_ignored_layers -min_routing_layer M1 -max_routing_layer M8
create_macro_fram ;#-identify_macro_pin_by-pin_text
extract_zrt_hier_antenna_property -cell_name $DESIGN_NAME
FM
source ../../../syn/scripts/dc_setup.tcl
#################################################################################
# Formality Verification Script for
# Design Compiler Reference Methodology Script for Top-Down Flow
# Script: fm.tcl
# Version: G-2012.06 (July 2, 2012)
# Copyright (C) 2007-2012 Synopsys, Inc. All rights reserved.
#################################################################################
#################################################################################
# Synopsys Auto Setup Mode
#################################################################################
set_app_var synopsys_auto_setup true
# Note: The Synopsys Auto Setup mode is less conservative than the Formality default mode,
# and is more likely to result in a successful verification out-of-the-box.
#
# Using the Setting this variable will change the default values of the variables listed here below
# You may change any of these variables back to their default settings to be more conservative.
# Uncomment the appropriate lines below to revert back to their default settings:
# set_app_var hdlin_ignore_parallel_case true
# set_app_var hdlin_ignore_full_case true
# set_app_var verification_verify_directly_undriven_output true
# set_app_var hdlin_ignore_embedded_configuration false
# set_app_var svf_ignore_unqualified_fsm_information true
# set_app_var signature_analysis_allow_subset_match true
# Other variables with changed default values are described in the next few sections.
#################################################################################
# Setup for handling undriven signals in the design
#################################################################################
# The Synopsys Auto Setup mode sets undriven signals in the reference design to
# "0" or "BINARY" (as done by DC), and the undriven signals in the impl design are
# forced to "BINARY". This is done with the following setting:
# set_app_var verification_set_undriven_signals synthesis
# Uncomment the next line to revert back to the more conservative default setting:
# set_app_var verification_set_undriven_signals BINARY:X
#################################################################################
# Setup for simulation/synthesis mismatch messaging
#################################################################################
# The Synopsys Auto Setup mode will produce warning messages, not error messages,
# when Formality encounters potential differences between simulation and synthesis.
# Uncomment the next line to revert back to the more conservative default setting:
# set_app_var hdlin_error_on_mismatch_message true
#################################################################################
# Setup for Clock-gating
#################################################################################
# The Synopsys Auto Setup mode, along with the SVF file, will appropriately set the clock-gating variable.
# Otherwise, the user will need to notify Formality of clock-gating by uncommenting the next line:
# set_app_var verification_clock_gate_hold_mode any
#################################################################################
# Setup for instantiated DesignWare or function-inferred DesignWare components
#################################################################################
# The Synopsys Auto Setup mode, along with the SVF file, will automatically set the hdlin_dwroot
# variable to the top-level of the Design Compiler tree used for synthesis. Otherwise, the user
# will need to set this variable if the design contains instantiated DW or function-inferred DW.
# set_app_var hdlin_dwroot "" ;# Enter the pathname to the top-level of the DC tree
#################################################################################
# Setup for handling missing design modules
#################################################################################
# If the design has missing blocks or missing components in both the reference and implementation designs,
# uncomment the following variable so that Formality can complete linking each design:
# set_app_var hdlin_unresolved_modules black_box
#################################################################################
# Read in the SVF file(s)
#################################################################################
# Set this variable to point to individual SVF file(s) or to a directory containing SVF files.
#set_svf /disk2/course/proj/demo00/flow/syn/output_data/demo00_top.svf
#################################################################################
# Read in the libraries
#################################################################################
foreach tech_lib "$stdcel_libs $memory_libs" {
read_db -technology_library $tech_lib
}
#################################################################################
# Read in the Reference Design as verilog/vhdl source code
#################################################################################
read_verilog -work_library WORK -r /disk2/course/proj/demo00/flow/syn/output_data/demo00_top.mapped.v
set_top r:/WORK/${top}
#################################################################################
# Read in the Implementation Design from DC-RM results
#
# Choose the format that is used in your flow.
#################################################################################
# For Verilog
read_verilog -work_library WORK -i /disk2/course/proj/demo00/flow/pnr/output_data/v0/demo00_top.output.v
# OR
# For .ddc
#read_ddc -i ${RESULTS_DIR}/${DCRM_FINAL_DDC_OUTPUT_FILE}
# OR
# For Milkyway
# The -no_pg option should be used for MW designs from DC to prevent automatic
# linking to power aware versions of the cells.
# read_milkyway -i -no_pg -libname WORK -cell_name ${DCRM_FINAL_MW_CEL_NAME} ${mw_design_library}
set_top i:/WORK/${top}
#################################################################################
# Configure constant ports
#
# When using the Synopsys Auto Setup mode, the SVF file will convey information
# automatically to Formality about how to disable scan.
#
# Otherwise, manually define those ports whose inputs should be assumed constant
# during verification.
#
# Example command format:
#
# set_constant -type port i:/WORK/${DESIGN_NAME}/<port_name> <constant_value>
#
#################################################################################
#################################################################################
# Report design statistics, design read warning messages, and user specified setup
#################################################################################
# report_setup_status will create a report showing all design statistics,
# design read warning messages, and all user specified setup. This will allow
# the user to check all setup before proceeding to run the more time consuming
# commands "match" and "verify".
# report_setup_status
#################################################################################
# Match compare points and report unmatched points
#################################################################################
match
#report_unmatched_points > ${REPORTS_DIR}/${FMRM_UNMATCHED_POINTS_REPORT}
#################################################################################
# Verify and Report
#
# If the verification is not successful, the session will be saved and reports
# will be generated to help debug the failed or inconclusive verification.
#################################################################################
verify
#if { ![verify] } {
# save_session -replace ${REPORTS_DIR}/${FMRM_FAILING_SESSION_NAME}
# report_failing_points > ${REPORTS_DIR}/${FMRM_FAILING_POINTS_REPORT}
# report_aborted > ${REPORTS_DIR}/${FMRM_ABORTED_POINTS_REPORT}
# # Use analyze_points to help determine the next step in resolving verification
# # issues. It runs heuristic analysis to determine if there are potential causes
# # other than logical differences for failing or hard verification points.
# analyze_points -all > ${REPORTS_DIR}/${FMRM_ANALYZE_POINTS_REPORT}
#}
#
#exit
STARRC
#!/bin/csh -f
mkdir spef -p
sed -i 's#^BLOCK: oc8051_top#BLOCK: demo00_top#g' scripts/*.cmd
sed -i 's#^MILKYWAY_DATABASE.*#MILKYWAY_DATABASE: /disk2/course/proj/demo00/flow/pnr/output_data/v0/demo00_top_LIB#g' scripts/*.cmd
sed -i 's#^NETLIST_FILE: ../spef/oc8051_top#NETLIST_FILE: ../spef/demo00_top#g' scripts/*.cmd
cd ./tmp
rm -rf ./stardir*
#### extract spef #####
StarXtract -clean ../scripts/extract_cmax_125c.cmd &
StarXtract -clean ../scripts/extract_cmax_m40c.cmd &
StarXtract -clean ../scripts/extract_cmin_125c.cmd &
StarXtract -clean ../scripts/extract_cmin_m40c.cmd &
StarXtract -clean ../scripts/extract_typ_25c.cmd &
EXTRC_CMAX_125C
BLOCK: demo00_top
MILKYWAY_DATABASE: /disk2/course/proj/demo00/flow/pnr/output_data/v0/demo00_top_LIB
TCAD_GRD_FILE: /disk2/course/library/tech/starrc/nxtgrd_mf/saed90nm_1p9m_1t_Cmax_MF.nxtgrd
MAPPING_FILE: /disk2/course/library/tech/icc/tluplus/tech2itf.map
NETLIST_FILE: ../spef/demo00_top.cmax_125c.spef
NETLIST_FORMAT: SPEF
*NETLIST_COMPRESS_COMMAND: gzip -q
OPERATING_TEMPERATURE: 125
MAGNIFICATION_FACTOR:0.9
MAGNIFY_DEVICE_PARAMS:NO
MODE: 400
COUPLING_ABS_THRESHolD: 1e-15
COUPLING_REL_THRESHOLD: 0.01
REDUCTION: NO_EXTRA_LOOPS
NETLIST_INPUT_DRIVERS: YES
NETLIST_CONNECT_OPENS: *
REMOVE_DANGLING_NETS : NO
*NETLIST_MAX_FILE_SIZE: 6.0E+09
*NETLIST_MAX_LINE: 500
*REFERENCE_DIRECTION: vertical
COUPLE_TO_GROUND: NO
EXTRACT_VIA_CAPS: YES
METAL_FILL_POLYGON_HANDLING: FLOATING
NETLIST_NODE_SECTION: YES
REDUCTION: NO_EXTRA_LOOPS
*DP_NETLISTING: NO
POWER_NETS: VDD VSS
SLEEP_TIME_AFTER_FINISH:100
*NUM_CORES : 1
STAR_DIRECTORY: ./stardir_cmax_125c
SKIP_CELLS: *
DRC
RULES
@define MilkyWay "N"
IF (MilkyWay == "Y"){
HEADER {
INLIB = MwLibName
BLOCK = TOPCELLNAME
FORMAT = MILKYWAY
OUTPUT_LAYOUT_PATH = .
}
}
ELSE IF (MilkyWay == "N"){
HEADER {
INLIB = ../input/demo00_top.gds
BLOCK = demo00_top
FORMAT = GDSII
OUTLIB = EV_OUT
OUTPUT_FORMAT = GDSII
GROUP_DIR = group
LAYOUT_PATH = .
}
}