数字IC后端使用的各类文件及解释
最后修改日期:2023/12/14
12/14修改:有错误的标题层级,已修正。
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_LIB
和TARGET_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专用的工艺角情形。不过不知道这类文件的内容,因为不能在文本编辑器中显示。
以上展示了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文件输入给其他软件验证(比如Synopsys Formality)。
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,但是在记录时会将M1
和M2
的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 关于Floorplan文件的总结
-
无论保存还是读取用的都是.fp文件,但是实际上会多出来一个.fp.spr文件,这应该是为.fp文件作配置的,不要动就行了
-
Floorplan文件包含的内容很多,可以认为导入了Floorplan文件就可以直接跳到Place Standard Cell开始的步骤了
-
Flooplan文件囊括了IO文件的内容,并且不存在IO文件对Inside Pin的限制
-
Floorplan文件的内容太多了,以至于甚至可能存在冗余的信息
如果你是已经做了Place Cell、CTS、Nano Route等步骤的话,注意一下这些步骤是否影响了.fp文件。建议在Place Cell进行前生成.fp备忘,也方便修改。
2.7. GDS(Graphic Design System)版图文件(.gds)
通用的版图文件,可以认为该文件不受限于EDA工具和厂商。
数字模块生成结束后,将其生成为.gds再导入到版图工具(比如Virtuoso)中。在芯片版图画完后,也是将其生成为.gds提交流片。
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)