首页 > 其他分享 >数字IC后端使用的各类文件及解释

数字IC后端使用的各类文件及解释

时间:2023-11-12 20:33:40浏览次数:33  
标签:lef 文件 set 数字 LIB 后端 .. lib IC

最后修改日期:2023/11/12


1. HDL综合(使用SDC)

这里以Synopsys Design Compiler(SDC)为例解释。工艺是SMIC130。

1.1. TCL(Tool Command Language)配置文件(.tcl)

使用TCL对SDC过程进行配置。

1.1.1. SDC参数配置

下面展示了一些对SDC进行配置的tcl语句。

set DC_S_DESIGN      <TOP_MODULE>
set DC_S_IS_FLATTEN  true
set DC_S_IS_SYN      true
set DC_S_IS_NET      true
set DC_S_IS_APR      false
set DC_S_BLOCK_DB    netlist
set DC_S_UPF_FLOW    true

其中定义了一些运行参数。TOP_MODULE位置填上HDL的顶层模块名。

1.1.2. 工艺定义

下面展示了工艺相关的一些tcl语句。

set DC_S_STD_LIB_PATH <LIB_DIR>
set DC_S_STD_LINK_LIB   [list SVT HVT]
set DC_S_STD_TARGET_LIB [list SVT HVT]
set DC_S_STD_LIB_CORNER WC

set LIB_STDCELL_TC_SVT "scc013ug_hd_rvt_tt_v1p2_25c_basic"
set LIB_STDCELL_WC_SVT "scc013ug_hd_rvt_ss_v1p08_125c_basic"
set LIB_STDCELL_BC_SVT "scc013ug_hd_rvt_ff_v1p32_-40c_basic"
set LIB_STDCELL_TC_HVT "scc013ug_hd_hvt_tt_v1p2_25c_basic"
set LIB_STDCELL_WC_HVT "scc013ug_hd_hvt_ss_v1p08_125c_basic"
set LIB_STDCELL_BC_HVT "scc013ug_hd_hvt_ff_v1p32_-40c_basic"
set LIB_STDCELL_PATH_SVT $DC_S_STD_LIB_PATH/rvt
set LIB_STDCELL_PATH_HVT $DC_S_STD_LIB_PATH/hvt

其中在LIB_DIR位置填上数字库文件所在路径。

LINK_LIBTARGET_LIB指向SVT和HVT,这是因为同时安装了两种数字库,分别为RVT(SVT)和HVT版本。在综合时将两种版本混用,这样综合器的选择范围更广,综合结果更好。

STDCELL后面的TC WC BC分别指:typical case, worst case, best Case。一般综合时选择最坏情况,综合得到的电路才是robust的。这也是为什么会有set DC_S_STD_LIB_CORNER WC这一句。

1.2. SDC约束文件(.sdc)

对数字电路信号的约束。综合器是按照约束文件的要求来综合优化的,只要满足了约束文件里面的要求了,综合器就认为电路已经合格。

从文件格式来看,SDC文件的语法与TCL是基本一致的,只是可能有一些在一般TCL中不存在的命令。

1.2.1. SDC变量定义

set <NAME> <VALUE>
$<NAME>

以上给出了SDC中定义变量的语法。第一句中定义了变量,NAME VALUE是变量的名称和值,中间用空格隔开。但是注意:在之后使用变量时,必须在前面加上$符号才算引用。这一点可以类比Verilog

1.2.2. 约束定义

定义的约束有许多种类。以下列出一些命令名称:

  • create_clock
  • set_clock_groups
  • set_false_path
  • set_input_delay
  • set_output_delay
  • set_driving_cell
  • set_load
  • set_fix_hold

以上命令的含义容易理解,但是具体用法在此不表。可以去找找SDC写法的相关资料。

1.3. Database文件(.db)

这类文件一般是PDK内就有的库文件,描述了Synopsys专用的工艺角情形。不过不知道这类文件的内容,因为不能在文本编辑器中显示。

image

以上展示了SMIC130 PDK中的所有db文件。从文件的名称可以得到一些信息。对于scc013ug_hd_rvt_ff_v1p32_0c_basic.db进行解释:

  • scc013ug_hd是这个数字库的名称

  • rvt表示regular voltage,这表示MOS管栅极开启电压是常规的系列,一般常见的有rvt/lvt/hvt

  • ff表示MOS工艺角为ff

    按照NMOS、PMOS的快、慢,组合起来可以得到四个工艺角:ss、sf、fs、ff,加上常规typical(tt),这些工艺角表征了MOS制造偏差所带来的最极端情况。值得一提的是:ff对应BC、ss对应WC、tt对应TC,这应该容易理解。

  • 0c代表0℃,这代表了温度工艺角

    在有的工艺文件命名中,比如零下40℃会被写作m40c,这第一眼看着可能不是很直观,想不到是温度。

1.4. LIB文件(.lib)

定义了工艺角下数字器件的电气参数。

library(scc013ug_hd_rvt_ff_v1p32_-40c_basic) { 
  delay_model : table_lookup ; 
  in_place_swap_mode : match_footprint ;
  comment : "Created by Wendy Zhang, Design Service, SMIC" ;
  revision : "0.1" ; 
  library_features(report_delay_calculation);
  time_unit : 1ns ;
  voltage_unit : 1V ; 
  current_unit : 1mA ; 
  capacitive_load_unit(1, pf);
  pulling_resistance_unit : 1kohm ; 
  leakage_power_unit : 1uW ; 
  input_threshold_pct_fall : 50 ; 
  input_threshold_pct_rise : 50 ; 
  output_threshold_pct_fall : 50 ; 
  output_threshold_pct_rise : 50 ; 
  slew_derate_from_library : 0.5 ; 
  slew_lower_threshold_pct_fall : 30 ; 
  slew_lower_threshold_pct_rise : 30 ; 
  slew_upper_threshold_pct_fall : 70 ; 
  slew_upper_threshold_pct_rise : 70 ;
  nom_process : 1 ; 
  nom_temperature : -40 ; 
  nom_voltage : 1.32 ; 
  default_cell_leakage_power : 0 ; 
  default_fanout_load : 1 ; 
  default_inout_pin_cap : 0.031358; 
  default_input_pin_cap : 0.031358; 
  default_leakage_power_density : 0 ;
  default_max_transition : 0.73 ; 
  default_output_pin_cap : 0 ; 
  default_threshold_voltage_group : "scc013ug_hd_rvt" ;
  voltage_map(VNW, 1.32);
  voltage_map(VDD, 1.32);
  voltage_map(VSS, 0);
  voltage_map(VPW, 0);


  operating_conditions(ff_v1p32_-40c) { 
    process : 1 ; 
    temperature : -40 ; 
    voltage : 1.32 ;
    tree_type : balanced_tree ; 
  }

  default_operating_conditions : ff_v1p32_-40c ;

  input_voltage(default) { 
    vil : 0 ; 
    vih : 1.32 ; 
    vimin : 0 ; 
    vimax : 1.32 ; 
  }

  output_voltage(default) { 
    vol : 0 ; 
    voh : 1.32 ; 
    vomin : 0 ; 
    vomax : 1.32 ; 
  }

以上展示了一小部分lib文件的内容。

1.5. SVF文件(.svf)

综合过程生成的文件,用于记录综合过程中对于Verilog原始逻辑作出的调整。这些调整有可能改变了实际逻辑功能,有可能没有,这需要将SVF文件输入给其他软件验证。

1.6. SDF(Standard Delay Format)文件(.sdf)

这种文件表征了电路器件的延时信息。在Verilog功能仿真的基础上加上SDF文件就成了时序仿真。

SDF文件可以由综合器得到,此时得到的延时只计算了器件固有的传输延时。

SDF文件还可以在布局布线之后再次得到,此时SDF文件还计算了器件距离、走线等带来的延时,因此更接近真实情况。

一般SDF文件不是人工编写的,因此不需要知道其内部语法。不过下面还是列出一个SDF文件的部分内容作为例子。

(CELL
  (CELLTYPE "AND2HDV0")
  (INSTANCE clk_gate_q_reg/main_gate)
  (DELAY
    (ABSOLUTE
    (IOPATH A1 Z (0.259:0.260:0.260) (0.246:0.246:0.246))
    (IOPATH A2 Z (0.253:0.253:0.253) (0.240:0.240:0.240))
    )
  )
)

以上是一个器件(也就是一个实例化)的SDF内容。其中定义了器件的类型,器件的层级位置,器件的IO延时(这是综合器给出的SDF,因此只有IO延时)。

1.7. 总结SDC过程中的文件

1.7.1. 输入文件

  • .tcl:作为SDC运行的配置
  • .sdc:SDC约束文件
  • .db:工艺角database文件
  • .lib:工艺角电气参数文件
  • .v:原始Verilog文件

1.7.2. 输出文件

  • .svf:对Verilog逻辑作出的调整记录

  • .sdc:全部信号的约束文件

    需要注意,输出的.sdc文件(一般为了区分命名为xxx_all.sdc)与输入是不同的。在写输入.sdc文件的时候,不可能对所有信号进行约束,我们写的只是关心的关键信号。
    在综合过程中,SDC会将输入.sdc文件中未提到的信号按照默认参数生成约束,并将所有信号的约束输出为新的.sdc文件。这个文件在后续的布局布线中是必须的。

  • .v:输出的综合后网表

    在编写原始Verilog文件时我们肯定不会使用一个具体数字库里面的器件,换句话说,这个Verilog文件是抽象的,与工艺无关的。
    而综合过程就是在数字库中寻找合适的数字器件,将它们组合起来并且完成与你编写的抽象Verilog文件一致的功能。因此综合后的网表(一般为了区分命名为xxx_netlist.v)全都是库数字器件的例化。

  • .sdf:延时文件,用于综合后仿真

  • .rpt:SDC综合的报告文件。检查.rpt文件可以确认综合过程是否存在问题,综合结果是否可靠

2. 布局布线(使用Innovus)

这里以Cadence Innovus为例解释。工艺是SMIC130。

2.1. 导入设置文件(.globals)

该文件不是必须的。但是有一个.globals配置会快很多。

set ::TimeLib::tsgMarkCellLatchConstructFlag 1
set _timing_save_restore_compression_mode hybrid
set dcgHonorSignalNetNDR 1
set defHierChar {/}
set delaycal_input_transition_delay {0.1ps}
set distributed_client_message_echo {1}
set distributed_mmmc_disable_reports_auto_redirection {0}
set fpIsMaxIoHeight 0
set gpsPrivate::dpgNewAddBufsDBUpdate 1
set gpsPrivate::lsgEnableNewDbApiInRestruct 1
set init_gnd_net {VSS}
set init_lef_file {../../../../LIB130/lef_rvt/tf/tf_wo_RDL/scc013u_7lm_2tm.lef ../../../../LIB130/lef_rvt/macro/SCC013UG_HD_RVT_V0p1.lef ../../../../LIB130/lef_rvt/macro/SCC013UG_HD_RVT_V0p1_ant.lef ../../../../LIB130/lef_hvt/tf/tf_wo_RDL/scc013u_7lm_2tm.lef ../../../../LIB130/lef_hvt/macro/SCC013UG_HD_HVT_V0p1.lef ../../../../LIB130/lef_hvt/macro/SCC013UG_HD_HVT_V0p1_ant.lef}
set init_mmmc_file {import/MMMC_lib1.tcl}
set init_oa_search_lib {}
set init_pwr_net {VDD}
set init_top_cell {double_count_10}
set init_verilog {import/xxx_netlist.v}
set latch_time_borrow_mode max_borrow
set lsgOCPGainMult 1.000000
set pegDefaultResScaleFactor 1.000000
set pegDetailResScaleFactor 1.000000
set report_inactive_arcs_format {from to when arc_type sense reason}
set timing_library_float_precision_tol 0.000010
set timing_library_load_pin_cap_indices {}
set timing_library_write_library_to_directory {}
set tso_post_client_restore_command {update_timing ; write_eco_opt_db ;}

这个文件定义了Innovus-Import Design的配置,如果不load这个.globals文件也可以自己设置。

2.1.1. lef文件设置

set init_lef_file:lef文件后面会说明是什么。文件中对于lef文件需要引用所有用到的lef文件,并且顺序也不是随意的,第一个必须是techfile。

2.1.2. mmmc设置

set init_mmmc_file:mmmc文件后面会说明是什么。

2.1.3. 电源地设置

set init_pwr_net set init_gnd_net:这是必须要设置的,否则后面Innovus运行会全是错误。

2.1.4. 网表设置

set init_verilog:综合后网表。

2.2. MMMC文件(.tcl)

一种特殊的.tcl文件,称为多模多角(Multi-Mode Multi-Corner, MMMC)文件。

set TECH_LIB_RVT_tt  $lib_RVT_PATH/scc013ug_hd_rvt_tt_v1p2_25c_basic.lib

set TECH_LIB_RVT_ss  $lib_RVT_PATH/scc013ug_hd_rvt_ss_v1p08_125c_basic.lib

set TECH_LIB_RVT_ff  $lib_RVT_PATH/scc013ug_hd_rvt_ff_v1p32_-40c_basic.lib

set TECH_LIB_HVT_tt  $lib_HVT_PATH/scc013ug_hd_hvt_tt_v1p2_25c_basic.lib

set TECH_LIB_HVT_ss  $lib_HVT_PATH/scc013ug_hd_hvt_ss_v1p08_125c_basic.lib

set TECH_LIB_HVT_ff  $lib_HVT_PATH/scc013ug_hd_hvt_ff_v1p32_-40c_basic.lib

set file_sdc  $input_PATH/import/double_count_10_all.sdc


create_constraint_mode -name functional \
   -sdc_files [list $file_sdc]

create_library_set  -name fast_LIB \
                    -timing [list $TECH_LIB_RVT_ff $TECH_LIB_HVT_ff]

create_library_set  -name slow_LIB \
                    -timing [list $TECH_LIB_RVT_ss $TECH_LIB_HVT_ss]

create_library_set  -name tpyical_LIB \
                    -timing [list $TECH_LIB_RVT_tt $TECH_LIB_HVT_tt]

create_rc_corner -name rc_cbest\
   -preRoute_res 0.8\
   -postRoute_res 0.8\
   -preRoute_cap 0.8\
   -postRoute_cap 0.8\
   -postRoute_xcap 0.8\
   -preRoute_clkres 0\
   -preRoute_clkcap 0\
   -T -40

create_rc_corner -name rc_cworst\
   -preRoute_res 1.2\
   -postRoute_res 1.2\
   -preRoute_cap 1.2\
   -postRoute_cap 1.2\
   -postRoute_xcap 1.2\
   -preRoute_clkres 0\
   -preRoute_clkcap 0\
   -T 125

create_rc_corner -name rc_ctypical\
   -preRoute_res 1\
   -postRoute_res 1\
   -preRoute_cap 1\
   -postRoute_cap 1\
   -postRoute_xcap 1\
   -preRoute_clkres 0\
   -preRoute_clkcap 0\
   -T 25

create_delay_corner -name fast_d_lib\
   -library_set fast_LIB\
   -rc_corner rc_cbest  \

create_delay_corner -name slow_d_lib\
   -library_set slow_LIB\
   -rc_corner rc_cworst \

create_delay_corner -name typical_d_lib\
   -library_set tpyical_LIB\
   -rc_corner rc_ctypical \

create_analysis_view -name av_maxff -constraint_mode functional -delay_corner fast_d_lib
create_analysis_view -name av_maxss -constraint_mode functional -delay_corner slow_d_lib
create_analysis_view -name av_maxtt -constraint_mode functional -delay_corner typical_d_lib

set_analysis_view -setup [list av_maxss av_maxff av_maxtt] -hold [list av_maxss av_maxff av_maxtt]

setAnalysisMode -analysisType onChipVariation

可以明显看出,其中定义了多个工艺角。

2.3. LEF(Library Exchange Format)文件(.lef)

专门用于数字后端的器件版图描述文件。一般.lef文件在PDK中可以找到。

2.3.1. 工艺LEF文件

也称为Techfile(tf) LEF文件,因为其中描述了各个层的名称、尺寸限制、走线方向偏好等等信息。

LAYER METAL1
  TYPE		ROUTING ;
  DIRECTION	HORIZONTAL ;
  PITCH		0.41 ;
  OFFSET	0.41 ;
  WIDTH		0.16 ;
  MINWIDTH 0.16 ;
  SPACING 0.17 ;
  SPACING 0.2 RANGE 0.405 2.005 ;
  SPACING 0.4 RANGE 2.005 10.005 ;
  SPACING 0.5 RANGE 10.005 999.0 ;
  RESISTANCE	RPERSQ 0.0995 ;
  CAPACITANCE	CPERSQDIST 3.62e-3 ;
  EDGECAPACITANCE 6.9800e-7 ;
  THICKNESS 0.26 ;
  ANTENNACUMAREARATIO	 5000.0 ;
  ANTENNACUMDIFFAREARATIO PWL (  ( 0.0 5000.0 ) ( 0.159 5000.0 ) ( 0.16 44064.0 ) ( 1.0 44400.0 ) ) ;
  MINIMUMDENSITY 16 ;
  MAXIMUMDENSITY 82 ;
  DENSITYCHECKWINDOW 200 200 ;
  DENSITYCHECKSTEP 100 ;
  AREA	0.08 ;
  MINENCLOSEDAREA  0.170 ;
  MAXWIDTH 14.00 ;
END METAL1

以上是SMIC130某个tf文件里对METAL1的定义。其中DIRECTION HORIZONTAL表示倾向于用METAL1走横向的线。一般各层金属都会依照H,V,H,V,...的顺序排列,这样布局布线工作按照该指示进行更容易布通。其余参数都是电气和工艺参数,容易理解。

注意:LEF文件定义的层只有Poly、MET、Via,是没有有源区、掺杂区、阱区等的定义的。所以在数字流程中不会用到这些层。也正是因为LEF没有定义所有层,所以它只是用于数字后端的版图文件,而不是能取代gds的通用版图文件。

在引用LEF文件时,必须将tf文件放在前面。这很容易理解:必须先定义METAL1,才能用METAL1去绘制图形,反之肯定不行。

2.3.2. 版图LEF文件

也称为macro LEF文件,其中定义了各个器件的版图形状。

MACRO INHDV0
  CLASS CORE ;
  ORIGIN 0 0 ;
  FOREIGN INHDV0 0 0 ;
  SIZE 1.23 BY 3.28 ;
  SYMMETRY X Y ;
  SITE CoreSite ;
  PIN I
    DIRECTION INPUT ;
    USE SIGNAL ;
    PORT
      LAYER METAL1 ;
        RECT 0.105 1.39 0.345 1.785 ;
    END
  END I
  PIN VDD
    DIRECTION INOUT ;
    USE POWER ;
    SHAPE ABUTMENT ;
    PORT
      LAYER METAL1 ;
        RECT 0.165 2.06 0.325 3.4 ;
        RECT 0 3.16 1.23 3.4 ;
    END
  END VDD
  PIN VSS
    DIRECTION INOUT ;
    USE GROUND ;
    SHAPE ABUTMENT ;
    PORT
      LAYER METAL1 ;
        RECT 0.165 -0.12 0.325 1 ;
        RECT 0 -0.12 1.23 0.12 ;
    END
  END VSS
  PIN ZN
    DIRECTION OUTPUT ;
    USE SIGNAL ;
    PORT
      LAYER METAL1 ;
        RECT 0.515 0.86 0.835 2 ;
    END
  END ZN
END INHDV0

以上LEF定义了一个最简单的CMOS反相器。其中定义了器件的尺寸、管脚信息等。之后使用之前定义的层描绘了各层图形。所以这个MACRO完全定义了该数字器件的版图。

2.4. 版图转换文件(.map)

在版图转换时,经常用到.map文件,其说明各层的名称、作用、GDS层序号等等。

在Innovus导出版图时需要一个参考.map文件。但是其实有若干个.map文件,在不同地方使用的。因此需要根据内容进行区分。

2.5. 管脚文件(.io)

这不是必须的文件。其中定义了模块管脚的位置、层、属性等信息。在Innovus中保存.io文件时可以选择Location或Sequence,一般选择Location,因为它是绝对位置。

注意:.io文件中不会包含位置为Inside的管脚,这个文件只会记录在模块Floorplan边缘的管脚。

2.6. Flooplan文件(.fp & .fp.spr)

Floorplan文件定义了Innovus的Floorplan,实际上该文件内容很多,下面介绍部分内容。

2.6.1. Design Routing Halo

Halo是器件周围的保护区域,禁止摆放器件、走线等。

2.6.2. Core Row

模块中允许放器件的部分被称为Core。因为数字器件都是按行排列的,所以每一行称为Core Row。

######################################################
#  Core Rows Parameters:                             #
######################################################
Row Spacing = 0.000000
Row SpacingType = 2
Row Flip = 2
Core Row Site: CoreSite 

##############################################################################
#  DefRow: <name> <site> <x> <y> <orient> <num_x> <num_y> <step_x> <step_y>  #
##############################################################################
DefRow: ROW_0 CoreSite 0.0000 0.0000 FS 17073 1 0.4100 0.0000
DefRow: ROW_1 CoreSite 0.0000 3.2800 N 17073 1 0.4100 0.0000
DefRow: ROW_2 CoreSite 0.0000 6.5600 FS 17073 1 0.4100 0.0000
DefRow: ROW_3 CoreSite 0.0000 9.8400 N 17073 1 0.4100 0.0000
DefRow: ROW_4 CoreSite 0.0000 13.1200 FS 17073 1 0.4100 0.0000

如上是关于Core Row的部分内容。定义了Core Row的参数和每行的参属性。

2.6.3. Track

############################################################################################
#  Track: dir start number space layer_num layer1 [firstColor] [isSameColor] [width] [rule]#
############################################################################################
Track: X 1.2300 6828 1.0250 1 7

Track貌似是模块中对于走线位置、尺寸的限制。类似于一种格点。

2.6.4. Physical Net

#########################################################
#  PhysicalNet: <name> [-pwr|-gnd|-tiehi|-tielo]        #
#########################################################
PhysicalNet: VDD -pwr
PhysicalNet: VSS -gnd

定义了电源/地网络。

2.6.5. Physical Instance

#########################################################
#  PhysicalInstance: <name> <cell> <orient> <llx> <lly> #
#########################################################
PhysicalInstance: WT_1 FILLTIEHD MX 0.0000 0.0000
PhysicalInstance: WT_2 FILLTIEHD MX 19.6800 0.0000
PhysicalInstance: WT_3 FILLTIEHD MX 39.7700 0.0000

定义了物理器件的属性。

注意:只有Well Tap Cell会在Physical Instance里面出现。而像Tie Hi/Lo Cell、Physical Filler Cell、Standard Cell都是不会在其中出现的。

从Innovus GUI的角度来看:在Floorplan view下能看到的cell都会被记录到.fp文件里。

2.6.6. Instance

######################################################
#  Instance: <name> <orient> <llx> <lly>             #
######################################################
Instance: clk_1G__L8_I0 R0 2522.7300 252.5600
Instance: clk_1G__L7_I0 MX 2854.8300 249.2800
Instance: clk_1G__L6_I0 R0 3187.7500 246.0000
Instance: clk_1G__L5_I1 R0 2324.7000 252.5600
Instance: clk_1G__L5_I0 MX 3512.0600 249.2800
Instance: clk_1G__L4_I0 MX 3526.0000 249.2800
Instance: clk_1G__L3_I0 MX 4726.0700 249.2800
Instance: clk_1G__L2_I0 R0 5925.3200 246.0000
Instance: clk_1G__L1_I0 MX 6992.1400 118.0800
Instance: clk_rd__L4_I0 R0 3733.8700 42.6400
Instance: clk_rd__L3_I0 MX 4853.1700 52.4800
Instance: clk_rd__L2_I0 MX 5966.7300 59.0400
Instance: clk_rd__L1_I0 MX 6992.1400 157.4400

关于这里面的cell的类型不是很确定。推测是只有CTS相关的Cell,而没有Standard Cell。

2.6.7. Blockage

####################################################################################
#  <PlacementBlockages>                                                            #
#     <Blockage name="blk_name" type="hard|soft|partial">                      #
#       <Attr density=1.2 excludeFlops=yes inst="inst_name" pushdown=yes />      #
#       <Box llx=1 lly=2 urx=3 ury=4 /> ...                                        #
#     </Blockage>                                                                  #
#  </PlacementBlockages>                                                           #
####################################################################################
<PlacementBlockages>
    <Blockage name="defScreenName" type="hard" >
	<Box llx=0.0000 lly=65.6000 urx=6670.2900 ury=236.1600 />
    </Blockage>
</PlacementBlockages>

#################################################################
#  <SizeBlockages>                                             #
#     <Blockage name="blk_name">                              #
#       <Box llx=1 lly=2 urx=3 ury=4 /> ...                     #
#     </Blockage>                                               #
#  </SizeBlockages>                                            #
#################################################################

##########################################################################################################
#  <RouteBlockages>                                                                                      #
#     <Blockage name="blk_name" type="User|RouteGuide|PtnCut|WideWire">                              #
#       <Attr spacing=1.2 drw=1.2 inst="name" pushdown=yes fills=yes exceptpgnet=yes pgnetonly=yes />  #
#       <Layer type="route|cut|masterslice" id=layerNo />                                              #
#       <Box llx=1 lly=2 urx=3 ury=4 /> ...                                                              #
#       <Poly points=nr x0=1 y0=1 x1=2 y2=2 ...  />                                                      #
#     </Blockage>                                                                                        #
#  </RouteBlockages>                                                                                     #
##########################################################################################################
<RouteBlockages>
    <Blockage type="User">
	<Layer type="route" id=7 />
	<Box llx=6653.2200 lly=65.6000 urx=6653.8200 ury=71.7600 />
    </Blockage>
</RouteBlockages>

实际上细分可以分为Placement Blockage、Size Blockage、Pin Blockage、Route Blockage。Blockage就是在一个区域内禁止某种做法。比如Route Blockage就是在区域内禁止走线。

值得一提的是,在.fp文件中,Route Blockage的记录方式是将各Layer分开的。比如说你创建的一个Route Blockage是-layer {M1 M2},看起来创建的是一个Blockage,但是在记录时会将M1M2的Blockage分开记录。

2.6.8. IO Pins

##############################################################################
#  <IOPins>                                                                  #
#    <Pin name="pin_name" type="clock|power|ground|analog"                   #
#         status="covered|fixed|placed" is_special=1 >                       #
#      <Port>                                                                #
#        <Pref x=1 y=2 side="N|S|W|E|U|D" width=w depth=d orientation=val /> #
#        <Via name="via_name" x=1 y=2 BotMask=2 CutMask=1 TopMask=2 />...  #
#        <Layer id=id spacing=1.2 drw=1.2>                                   #
#          <Box llx=1 lly=2 urx=3 ury=4 /> ...                               #
#          <Poly points=nr x0=1 y0=1 x1=2 y2=2 ...           />              #
#        </Layer> ...                                                        #
#      </Port>  ...                                                          #
#      <NETEXPR>                                                             #
#        ground VSS                                                          #
#      </NETEXPR> ...                                                        #
#      <Antenna model=num type="name" value=float_num layer=num /> ...       #
#    </Pin> ...                                                              #
#  </IOPins>                                                                 #
##############################################################################

<IOPins>
  <Pin name="wr[255]" status="fixed" >
    <Port>
      <Pref x=31.5100 y=298.4800 side=N width=0.2000 depth=0.6000 orientation=R180 />
      <Layer id=5 >
        <Box llx=31.4100 lly=297.8800 urx=31.6100 ury=298.4800 />
      </Layer>
    </Port>
  </Pin>
  ...
</IOPins>

.fp文件中包含IO Pins,这就意味着.fp文件是可以完全替代.io文件的。不仅如此,我发现.fp文件中的IO是记录IO的坐标的。也就是说,导入.fp也可以导入位置为Inside的Pin,比.io更好。

2.6.9. PG Pin

###################################################################################################################
#  PGPin: <pin> <net> {in|out|inout} {pwr|gnd|-} {placed|fixed|-} <x> <y> <side> <layerId> <nrBox> <NETEXPR=""> #
#    PinBox: <llx> <lly> <urx> <ury>                                                                              #
#    PinPoly: <nrPts> <x1> <y1> <x2> <y2>...<xn> <yn>                                                             #
###################################################################################################################
PGPin: VSS VSS inout gnd fixed 103.7500 0.0000 S 4 1
  PinBox: 103.0000 0.0000 104.5000 1.5000 -lyr 4
PGPin: VSS VSS inout gnd fixed 103.7500 298.4800 N 4 1
  PinBox: 103.0000 296.9800 104.5000 298.4800 -lyr 4

根据和版图的比较,我认为PG Pin定义的是Power Stripe。其中定义了与Power Ring连接点的位置、层等。然后用Innovus用MET将两个点连接就得到了Power Stripe。

2.6.10. Global Net Connection

###########################################################$############################################################################################
#  GlobalNetConnection: <net_name> {-pin|-inst|-net} <base_name_pattern> -type {pgpin|net|tiehi|tielo} {-all|-module <name>|-region <box>} [-override] #
########################################################################################################################################################
GlobalNetConnection: VDD -pin VDD -inst * -type pgpin -all
GlobalNetConnection: VDD -inst * -type tiehi -all
GlobalNetConnection: VSS -inst * -type tielo -all
GlobalNetConnection: VSS -pin VSS -inst * -type pgpin -all
GlobalNetConnection: VDD -pin VNW -inst * -type pgpin -all
GlobalNetConnection: VSS -pin VPW -inst * -type pgpin -all

这里一般定义的都是电源地。

2.6.11. GDS(Graphic Design System)版图文件(.gds)

通用的版图文件,可以认为该文件不受限于EDA工具和厂商。

数字模块生成结束后,将其生成为.gds再导入到版图工具(比如Virutoso)中。在芯片版图画完后,也是将其生成为.gds提交流片。

2.6.12. 关于Floorplan文件的总结

  • 无论保存还是读取用的都是.fp文件,但是实际上会多出来一个.sp.spr文件,这应该是为.fp文件作配置的,不要动就行了

  • Floorplan文件包含的内容很多,可以认为导入了Floorplan文件就可以直接跳到Place Standard Cell开始的步骤了

  • Flooplan文件囊括了IO文件的内容,并且不存在IO文件对Inside Pin的限制

  • Floorplan文件的内容太多了,以至于甚至可能存在冗余的信息

    如果你是已经做了Place Cell、CTS、Nano Route等步骤的话,注意一下这些步骤是否影响了.fp文件。建议在Place Cell进行前生成.fp备忘,也方便修改。

2.7. 总结Innovus用到的文件

2.7.1. 参数文件

这里的文件都不是必须的。可以从外部导入到Innovus作为配置,也可以由Innovus导出供以后使用。

  • .globals:Innovus Import参数文件
  • .io:数字模块IO管脚定义文件
  • .fp:Floorplan定义文件

2.7.2. 输入

  • .sdc:综合给出的sdc,包含了所有信号的约束
  • .lef:包括工艺tf和数字器件版图macro的定义,供数字后端使用
  • mmmc.tcl:多模多角文件
  • .v:综合后网表文件
  • .map:作为输出gds文件的参考文件
  • (optional).tcl:可以是任何Innovus TCL命令组成的文件,在Innovus中可以调用并执行

2.7.3. 输出

  • .gds:通用版图文件,可以导入到IC设计软件中
  • .sdf文件:这个延时文件相比综合后的延时文件多了走线延时等,更接近实际
  • .v:布局布线后网表(一般以示区分可以命名为xxx_apr.sdf)

标签:lef,文件,set,数字,LIB,后端,..,lib,IC
From: https://www.cnblogs.com/li-2000/p/ICdigital-Files.html

相关文章

  • 31.random.choice()函数
    生成电脑的随机选择:使用random.choice函数从一组选项中随机选择电脑的出拳选项,将选择存储在另一个变量中print('猜拳游戏开始:')player=input('请出拳(石头/剪刀/布):\n')computer=random.choice(['石头','剪刀','布'])print(f'电脑出拳:{computer}')ifplayer==compu......
  • 剖析网络测量:Counting and Measuring Network Traffic
    全文共18000字,讲解了网络测量和计数中的多方面知识:网络测量的意义、网络测量的手段分类、网络测量在实现上的挑战、以及解决这些挑战所用到的技术和协同方案等等。参考书籍有:《NetworkAlgorithmics:AnInterdisciplinaryApproachtoDesigningFastNetworkedDevices(2ndE......
  • 【论文阅读笔记】【OCR-文本识别】 CLIPTER: Looking at the Bigger Picture in Scene
    CLIPTERICCV2023读论文思考的问题论文试图解决什么问题?现有的文本识别方法只关注于局部截取的文本区域,识别模型并没有利用全图的上下文信息,导致其可能对有挑战性的文本的识别效果较差能否以某种方式使识别器利用上globalfeature的信息?文章提出了什么样的解决......
  • python随机抽取数字的方法和代码
    在Python中,我们可以使用内置的random模块来随机抽取数字。下面是一些示例。从一个列表中随机抽取数字如果你有一个数字列表,并且你想从中随机选择一个数字,你可以使用random.choice函数。pythonimportrandomnumbers=[1,2,3,4,5,6,7,8,9,10]chosen_number=rando......
  • 所有数字除以10
    问题:表中所有数据除以10解决:表面上看是个除法题,其实因其“分隔符”种类太多,很难以除法的方式实现;目前数据都是偏整的数,即规律为删除非数字前的一个0。将数据复制,以无格式文本的方式粘贴到文字组件中,再用替换解决:查找内容分0和非0两部分,以半角小括号分隔,非数字即0-9以外的字......
  • 论文阅读:Active Learning for Point Cloud Semantic Segmentation via Spatial-Struct
    ActiveLearningforPointCloudSemanticSegmentation viaSpatial-StructuralDiversityReasoning通过空间结构多样性推理进行点云语义分割的主动学习摘要众所周知,昂贵的注释成本是点云语义分割技术发展的一个主要制约因素。在本文中,我们提出了一种新的基于主动学习的方法来......
  • org.springframework.context.ApplicationContextException: Failed to start bean 'd
    这个原因是高版本SpringBoot整合swagger造成的我的项目是2.7.8swagger版本是3.0.0就会出现上面的报错解决方式:1.配置WebMvcConfigurer.javaimportorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.Res......
  • 无涯教程-批处理 - NET STATISTICS函数
    显示工作站或服务器的网络统计信息。Netstatistics[SERVER/WORKSTATION]NETSTATISTICS-示例NetstatisticsServerServerStatisticsfor\\WIN-50GP30FGO75Statisticssince1/3/20169:16:28PMSessionsaccepted0Sessionstimed-out......
  • 极简版本Clickhouse监控步骤
    极简版本Clickhouse监控步骤背景昨天处理了鲲鹏920上面的Clickhouse的基于Docker的安装与部署今天想着能够继续处理一下增加监控信息能够实现对clickhouse使用过程中的一些简单了解.需要用到的工具和软件AltinitypluginforClickHouseGrafana用到的dashboard2515......
  • 《Swin Transformer: Hierarchical Vision Transformer using Shifted Windows》阅读
    论文标题《SwinTransformer:HierarchicalVisionTransformerusingShiftedWindows》Swin这个词貌似来自后面的ShiftedWindowsShiftedWindows:移动窗口Hierarchical:分层作者微软亚洲研究院出品初读摘要提出SwinTransformer可以作为CV的通用主干Tansfo......