后端设计笔记1

背景介绍

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)

  • 定义:多场景时序分析技术,用于在多种工作条件(如不同电压、温度、工艺角)下验证设计的时序收敛性。

  • 作用:优化芯片在PVT(工艺、电压、温度)变化下的稳定性和性能,确保设计在极端条件下仍满足时序要求13


2. EPS(Electrical Power Signoff)

  • 定义:电源完整性签核,关注芯片电源网络的稳定性和可靠性。

  • 作用:验证电源网络的电压降(IR Drop)和电迁移(EM)是否满足要求,防止因供电不足或金属层过载导致芯片失效56


3. FM(Formal Verification)

  • 定义:形式验证,通过数学方法验证逻辑功能的等价性。

  • 作用:确保综合后的门级网表与原始RTL设计功能一致,避免因工具优化引入逻辑错误。常用工具如Synopsys Formality13


4. PNR(Place and Route)

  • 定义:布局布线,将逻辑网表转换为物理版图的核心流程。

  • 关键步骤

    • Floorplan:规划芯片宏单元(如IP、RAM)和I/O的位置。

    • CTS(Clock Tree Synthesis):构建时钟树,减少时钟偏斜(Skew)。

    • 布线:连接所有逻辑单元,确保满足时序和物理规则。

  • 工具:Cadence Innovus、Synopsys ICC2710


5. PV(Physical Verification)

  • 定义:物理验证,检查版图是否符合制造规则(DRC)和电路连接正确性(LVS)。

  • 作用:确保GDSII文件无短路、断路、间距违规等问题。常用工具如Mentor Calibre16


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,

  1. 创建新Milkyway库(create_mw_lib

  2. 从参考库复制优化后的设计单元(copy_mw_cel

  3. 配置参考库依赖关系(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  
  1. 设计备份与恢复:通过save_mw_celcopy_mw_cel实现安全操作回滚。

  2. 填充单元移除:过滤非逻辑单元(*SHFILL*)以适配LVS工具需求。

  3. 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 = .
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值