Synopsys® Technology File(工艺文件)详解

Synopsys 工艺文件(通常简称 "Tech File")是连接半导体制造工艺与 Synopsys EDA 工具(如 IC Compiler、Zroute、PrimeTime 等)的核心配置文件,它将晶圆厂提供的工艺规则(如布线、间距、层属性等)转化为 EDA 工具可识别的语法,是物理设计(布局、布线、DRC 检查)的 "工艺字典"。

1. 工艺文件的核心作用

  • 统一工艺规则:将晶圆厂的制造约束(如金属最小线宽、过孔间距、光刻规则等)标准化为 EDA 工具可执行的参数;

  • 工具适配:为布线器(Zroute / 经典布线器)、布局工具、DRC 验证工具提供统一的规则依据,确保设计符合工艺要求;

  • 跨层级兼容:支撑从前端物理设计到后端验证的全流程,保证不同工具使用相同的工艺约束。

2. 工艺文件的核心结构

工艺文件采用分段式语法,核心段(Section)及作用如下,结合我们此前讨论的布线规则举例说明:

2.1 顶层 Technology

全局配置,作用于所有金属层 / 过孔层,通常定义工具通用规则、版本兼容、全局模式等。

复制代码
Technology {
    # 全局规则模式:如最小长度检查模式(对应此前的最小长度规则)
    minLengthMode = 1
    # 特殊最小面积规则启用(仅经典布线器需要)
    minAreaMode = 1
    # 短边规则检查模式(对应最小边缘规则)
    minEdgeMode = 1
    # 工具版本兼容
    version = "S-2021.06-SP3"
}

2.2 Layer 段(核心)

每个金属层 / 过孔层独立配置,是布线设计规则的主要承载部分,我们此前讨论的 90% 以上的规则都配置在此段。

基础结构示例(结合此前规则):

复制代码
# 定义Metal1层的所有工艺规则
Layer "Metal1" {
    # 1. 层类型标识(工具识别用)
    type = metal
    # 2. 布线模式规则
    nonPreferredRouteMode = 1          # 禁止非优先方向布线
    onWireTrack = 1                    # 强制栅格上布线
    hasRectangleOnly = 1               # 仅限矩形规则
    # 3. 最小面积/长度规则
    minLength = 0.08                   # 最小长度(单位:μm,依工艺而定)
    minArea = 0.0064                   # 通用最小面积
    minAreaEdgeThreshold = 0.1         # 二级特殊最小面积的边缘阈值
    specialMinArea = 0.01              # 特殊最小面积
    # 4. 最小边缘规则
    minEdgeLength = 0.07               # 短边长度阈值
    maxNumMinEdge = 3                  # 连续短边最大数量
    maxTotalMinEdgeLength = 0.21       # 连续短边总长度上限
    # 5. 金属间距规则
    minSpacing = 0.08                  # 基础最小间距
    sameNetMinSpacing = 0.06           # 同网络最小间距
    stubParallelLengthMaxThreshold = 0.1 # 短截线平行重叠阈值
    stubMinSpacing = 0.07              # 短截线最小间距
    # 6. 金属线宽规则
    minWidth = 0.08                    # 最小线宽
    defaultWidth = 0.08                # 默认线宽
    signalRouteMaxWidth = 0.5          # 信号布线最大线宽
}

# 定义Via1层(Metal1-Metal2过孔)的规则
Layer "Via1" {
    type = via
    onWireTrack = 1                    # 过孔中心栅格对齐
    minEnclosedArea = 0.01             # 过孔包围最小面积
}

2.3 其他关键段

段名 作用
ViaLayer 专门定义过孔的层叠关系(如 Via1 连接 Metal1 和 Metal2)、过孔尺寸等
SpacingTable 复杂间距规则的表格配置(如电压相关间距、多级最小面积的阈值表)
Unit 定义单位(如微米、纳米)、栅格精度(如 0.001μm)

3. 工艺文件与布线设计规则的关联

我们此前讨论的所有布线规则(最小边缘、金属间距、线宽、面积等),本质上都是工艺文件中Layer段的属性配置

  • 规则的 "开关":部分规则需在Technology段启用(如minAreaMode = 1启用特殊最小面积规则);

  • 规则的 "参数":规则的阈值(如minSpacing = 0.08)直接配置在对应金属层的Layer段;

  • 工具适配:部分规则仅 Zroute 支持(如hasRectangleOnlyconvexConvexMinEdgeLengthTbl),需注意属性的工具兼容性。

4. 完整的 Synopsys® Technology File

这是一个面向先进工艺(如 7nm/5nm)的完整 Synopsys 工艺文件模板,整合了所有核心语法段与布线设计规则,适配 Zroute 与经典布线器,可直接用于 IC Compiler/IC Compiler II/Fusion Compiler 工具链。文件名建议保存为tech_7nm.tf

复制代码
/*
 * Synopsys Technology File Template (S-2021.06-SP3兼容)
 * 工艺: 7nm FinFET (示例参数,实际使用需替换为晶圆厂数据)
 * 用途: 支持Zroute与经典布线器,包含完整布线设计规则
 * 创建日期: 2026-01-15
 */

/******************************************************************************
 * 1. 全局技术配置 (Technology Section)
 * 定义单位、精度、全局规则模式,影响所有层的设计规则检查
 ******************************************************************************/
Technology {
    name = "tech7nm_ff"                     // 工艺名称,get_techs命令返回值
    /* 单位定义 (用户单位: 微米,精度: 1000 → 0.001μm分辨率) */
    unitLengthName = "micron"
    lengthPrecision = 1000
    gridResolution = 50                     // 制造栅格分辨率(0.05μm)
    unitTimeName = "ns"
    timePrecision = 100
    unitCapacitanceName = "pf"
    capacitancePrecision = 10000
    unitResistanceName = "kohm"
    resistancePrecision = 10
    /* 全局规则模式 (影响所有金属层) */
    minLengthMode = 1                       // 最小长度检查包含过孔段
    minAreaMode = 1                         // 启用特殊最小面积规则(经典布线器)
    minEdgeMode = 1                         // 短边规则触发无需凹角
    cornerSpacingMode = 0                   // 过孔对角间距测量(对角线)
    fatTblSpacingMode = 0                   // Fat线间距索引降级模式
    maxStackLevelMode = 1                   // 过孔阵列最大堆叠层数检查
    fixedColor = 0                          // 多图案技术支持掩模交换
    metalAboveMiMCap = "M9"                 // MiM电容插入在M9下方
}

/******************************************************************************
 * 2. 基础颜色定义 (PrimaryColor Section)
 * 定义GUI显示的6个基础颜色(2种强度的红、绿、蓝)
 ******************************************************************************/
PrimaryColor {
    lightRed = 90
    mediumRed = 180
    lightGreen = 80
    mediumGreen = 175
    lightBlue = 100
    mediumBlue = 190
}

/******************************************************************************
 * 3. 自定义显示颜色 (Color Section)
 * 覆盖默认颜色,用于层显示配置
 ******************************************************************************/
Color 62 {
    name = "owhite"
    rgbDefined = 1
    redIntensity = 255
    greenIntensity = 255
    blueIntensity = 230
}

Color 3 {
    name = "custom_blue"
    rgbDefined = 1
    redIntensity = 0
    greenIntensity = 128
    blueIntensity = 255
}

/******************************************************************************
 * 4. 线型定义 (LineStyle Section)
 * 定义层显示的线型样式
 ******************************************************************************/
LineStyle "boundary" {
    width = 10
    height = 1
    pattern = (1, 0, 0, 1, 1, 1, 1, 1, 0, 0)
}

LineStyle "dashed" {
    width = 4
    height = 1
    pattern = (1, 1, 0, 0)
}

/******************************************************************************
 * 5. 单元Tile定义 (Tile Section)
 * 标准单元行的基本单元尺寸,影响布线轨道生成
 ******************************************************************************/
Tile "unit" {
    width = 16                              // Tile宽度(单位: 微米)
    height = 168                            // Tile高度(单位: 微米)
}

/******************************************************************************
 * 6. 层定义 (Layer Section)
 * 核心部分: 定义各金属层、过孔层的物理/显示/设计规则/寄生参数
 * 示例包含: 多晶硅、M1-M3金属层、Via1-Via2过孔层
 ******************************************************************************/

/* 6.1 多晶硅层 (Poly) */
Layer "POLY" {
    /* 布局属性 */
    layerNumber = 1
    maskName = "poly"
    pitch = 0.14
    isDefaultLayer = 1
    isMarkerLayer = 0
    /* 显示属性 */
    color = "custom_blue"
    lineStyle = "solid"
    pattern = "dot"
    blink = 0
    visible = 1
    selectable = 1
    /* 设计规则属性 */
    minWidth = 0.07
    minLength = 0.07
    minArea = 0.0049
    minSpacing = 0.07
    sameNetMinSpacing = 0.06
    /* 寄生属性 */
    unitNomResistance = 0.01                // 方块电阻(千欧)
    unitNomCapacitance = 0.001              // 单位面积电容(pF)
    /* 物理属性 */
    unitNomHeightFromSub = 0.01             // 距衬底高度(微米)
    unitNomThickness = 0.005                // 厚度(微米)
}

/* 6.2 金属层1 (M1) - 优先方向: 水平 */
Layer "M1" {
    /* 布局属性 */
    layerNumber = 8
    maskName = "metal1"
    pitch = 0.22                            // 线间距(0.22μm)
    isDefaultLayer = 1
    /* 显示属性 */
    color = "blue"
    lineStyle = "solid"
    pattern = "solid"
    blink = 0
    visible = 1
    selectable = 1
    /* 设计规则属性 - 核心规则 */
    minWidth = 0.08                         // 最小线宽
    nonPreferredWidth = 0.09                // 非优先方向最小线宽
    defaultWidth = 0.08                     // 默认线宽
    signalRouteMaxWidth = 0.5               // 信号最大线宽
    minLength = 0.14                        // 最小长度
    minArea = 0.0112                        // 通用最小面积
    minEdgeLength = 0.07                    // 短边长度阈值
    maxNumMinEdge = 3                       // 连续短边最大数量
    maxTotalMinEdgeLength = 0.21            // 连续短边总长度上限
    minSpacing = 0.08                       // 基础最小间距
    stubParallelLengthMaxThreshold = 0.1    // 短截线平行重叠阈值
    stubMinSpacing = 0.07                   // 短截线最小间距
    /* 高级规则 - 最小边缘 */
    convexConcaveMinEdgeLength = 0.1        // 凸-凹连接边最小长度
    convexMinEdgeLength = 0.08              // 相邻凸边最小长度
    minEdgeLength2 = 0.08                   // 特殊缺口最小宽度
    minEdgeLength3 = 0.07                   // 特殊缺口相邻边阈值
    /* 高级规则 - 面积规则 */
    minAreaEdgeThreshold = 0.1              // 二级特殊面积边缘阈值
    specialMinArea = 0.015                  // 特殊最小面积
    specialMinAreaTblSize = 1               // 特殊面积表大小
    minAreaEdgeThresholdTbl = (0.1)
    minAreaFillMinLengthTbl = (0.1)
    minAreaFillMinWidthTbl = (0.08)
    specialMinAreaTbl = (0.015)
    /* 高级规则 - 间距规则 */
    concaveCornerKeepoutWidth = 0.1
    concaveCornerKeepoutLength = 0.1
    concaveCornerKeepoutMinEdgeLengthThreshold = 0.08
    /* Zroute专属规则 */
    hasRectangleOnly = 1                    // 仅限矩形
    onWireTrack = 1                         // 强制栅格布线
    nonPreferredRouteMode = 0               // 允许非优先方向布线
    /* 寄生属性 */
    unitNomResistance = 0.001               // 方块电阻(千欧)
    unitNomCapacitance = 0.002              // 单位面积电容(pF)
    maxCurrDensity = 5.0                    // 最大电流密度(MA/cm²)
    /* 物理属性 */
    unitNomHeightFromSub = 0.1              // 距衬底高度(微米)
    unitNomThickness = 0.01                 // 厚度(微米)
}

/* 6.3 金属层2 (M2) - 优先方向: 垂直 */
Layer "M2" {
    /* 布局属性 */
    layerNumber = 9
    maskName = "metal2"
    pitch = 0.22
    isDefaultLayer = 1
    /* 显示属性 */
    color = "red"
    lineStyle = "solid"
    pattern = "solid"
    blink = 0
    visible = 1
    selectable = 1
    /* 设计规则属性 */
    minWidth = 0.08
    minLength = 0.14
    minArea = 0.0112
    minSpacing = 0.08
    sameNetMinSpacing = 0.07
    /* Zroute专属规则 */
    xLegalDimTblSize = 4                    // 离散尺寸规则
    xLegalDimTbl = (0.08, 0.1, 0.12, 0.14)
    yLegalDimTblSize = 4
    yLegalDimTbl = (0.08, 0.1, 0.12, 0.14)
    /* 寄生与物理属性 */
    unitNomResistance = 0.0008
    unitNomCapacitance = 0.0018
    unitNomHeightFromSub = 0.2
    unitNomThickness = 0.012
}

/* 6.4 金属层3 (M3) - 优先方向: 水平 */
Layer "M3" {
    layerNumber = 10
    maskName = "metal3"
    pitch = 0.24
    isDefaultLayer = 1
    color = "green"
    lineStyle = "solid"
    pattern = "solid"
    minWidth = 0.09
    minLength = 0.15
    minArea = 0.0135
    minSpacing = 0.09
}

/* 6.5 过孔层1 (Via1) - 连接M1与M2 */
Layer "Via1" {
    /* 布局属性 */
    layerNumber = 18
    maskName = "via1"
    isDefaultLayer = 1
    /* 显示属性 */
    color = "yellow"
    lineStyle = "solid"
    pattern = "rectangleX"
    blink = 0
    visible = 1
    selectable = 1
    /* 设计规则属性 */
    minEnclosedArea = 0.0064
    minSpacing = 0.1
    onWireTrack = 1
}

/******************************************************************************
 * 7. 层数据类型定义 (LayerDataType Section)
 * 定义层的不同数据类型(如引脚文本、障碍物)
 ******************************************************************************/
LayerDataType "M1_PIN" {
    layerNumber = 8
    dataTypeNumber = 1
    nonMask = 1                              // 不参与掩模生成
    visible = 1
    selectable = 1
    color = "red"
    lineStyle = "solid"
    pattern = "dot"
}

LayerDataType "M1_OBS" {
    layerNumber = 8
    dataTypeNumber = 2
    nonMask = 1
    visible = 1
    selectable = 0
    color = "gray"
    lineStyle = "dashed"
    pattern = "hatch"
}

/******************************************************************************
 * 8. 过孔定义 (ContactCode Section)
 * 定义过孔的物理结构、寄生参数、设计规则
 ******************************************************************************/
/* 8.1 默认过孔 (M1-M2) */
ContactCode "VIA1_DEFAULT" {
    contactCodeNumber = 1
    contactSourceType = 0                    // 单切割固定过孔
    cutLayer = "Via1"
    lowerLayer = "M1"
    upperLayer = "M2"
    isDefaultContact = 1                     // 默认过孔
    /* 物理属性 */
    cutWidth = 0.07
    cutHeight = 0.07
    minNumRows = 1
    minNumCols = 1
    /* 设计规则属性 */
    upperLayerEncWidth = 0.03
    upperLayerEncHeight = 0.03
    lowerLayerEncWidth = 0.03
    lowerLayerEncHeight = 0.03
    minCutSpacing = 0.14
    /* 寄生属性 */
    unitNomResistance = 0.00025              // 过孔电阻(千欧)
    unitNomCapacitance = 0.0004              // 过孔电容(pF)
    temperatureCoeff = 2.5e-06               // 温度系数
}

/* 8.2 Fat过孔 (M1-M2,宽线专用) */
ContactCode "VIA1_FAT" {
    contactCodeNumber = 2
    contactSourceType = 0
    cutLayer = "Via1"
    lowerLayer = "M1"
    upperLayer = "M2"
    isFatContact = 1                         // Fat过孔标记
    /* 物理属性 */
    cutWidth = 0.14
    cutHeight = 0.14
    minNumRows = 2
    minNumCols = 2
    /* 设计规则属性 */
    upperLayerEncWidth = 0.05
    upperLayerEncHeight = 0.05
    lowerLayerEncWidth = 0.05
    lowerLayerEncHeight = 0.05
    minCutSpacing = 0.2
    /* 寄生属性 */
    unitNomResistance = 0.0001               // 更低电阻
    unitNomCapacitance = 0.0008
}

/******************************************************************************
 * 9. 层间设计规则 (DesignRule Section)
 * 定义跨层设计规则,如层间间距、包围规则
 ******************************************************************************/
DesignRule {
    layer1 = "M1"
    layer2 = "M2"
    minSpacing = 0.08
    minEnclosure = 0.03
    endOfLineEnclosure = 0.04
    stackable = 1                            // 允许过孔堆叠
}

DesignRule {
    layer1 = "M1"
    layer2 = "Via1"
    minSpacing = 0.05
    cornerMinSpacing = 0.04
}

/******************************************************************************
 * 10. 密度规则 (DensityRule Section)
 * 定义金属填充密度要求,用于signoff_metal_fill
 ******************************************************************************/
DensityRule {
    layer = "M1"
    windowSize = 200                         // 检查窗口尺寸(微米)
    minDensity = 20                          // 最小密度(%)
    maxDensity = 80                          // 最大密度(%)
    maxGradientDensity = 10                  // 相邻窗口密度差(%)
}

DensityRule {
    layer = "M2"
    windowSize = 200
    minDensity = 20
    maxDensity = 80
}

/******************************************************************************
 * 11. 开槽规则 (SlotRule Section)
 * 定义宽金属开槽规则,用于IC Compiler的slot_wire命令
 ******************************************************************************/
SlotRule "" {
    layerNumber = 8                          // M1层
    lengthThreshold = 5.0                    // 长度阈值(微米)
    widthThreshold = 0.5                     // 宽度阈值(微米)
    minSlotWidth = 0.1
    maxSlotWidth = 0.2
    minSlotLength = 1.0
    maxSlotLength = 4.0
    minSideSpace = 0.1
    maxSideSpace = 0.2
}

/******************************************************************************
 * 12. 边缘电容规则 (FringeCap Section)
 * 定义层间/层内耦合电容,用于时序驱动布局
 ******************************************************************************/
/* 12.1 M1-M2层间耦合电容 */
FringeCap 1 {
    number = 1
    layer1 = "M1"
    layer2 = "M2"
    minFringeCap = 0.00022
    nomFringeCap = 0.00022
    maxFringeCap = 0.00022
}

/* 12.2 M1层内耦合电容 */
FringeCap 2 {
    number = 2
    layer1 = "M1"
    layer2 = "M1"
    minFringeCap = 0.00017
    nomFringeCap = 0.00017
    maxFringeCap = 0.00017
}

/******************************************************************************
 * 13. 电容模型 (CapModel & CapTable Section)
 * 定义层材料、厚度、介电常数,用于寄生参数计算
 ******************************************************************************/
CapModel "M1_Cap_Model" {
    refLayer = "M1"
    groundPlaneBelow = "POLY"
    groundPlaneAbove = "M2"
    bottomCapType = "Table"
    bottomCapDataMin = "M1_C_BOTTOM"
    bottomCapDataNom = "M1_C_BOTTOM"
    bottomCapDataMax = "M1_C_BOTTOM"
    topCapType = "Table"
    topCapDataMin = "M1_C_TOP"
    topCapDataNom = "M1_C_TOP"
    topCapDataMax = "M1_C_TOP"
}

CapTable "M1_C_BOTTOM" {
    wireWidthSize = 3
    wireSpacingSize = 3
    wireWidth = (0.08, 0.1, 0.12)
    wireSpacing = (0.08, 0.1, 0.12)
    capValue = (
        2.4798e-05, 3.05934e-05, 3.5548e-05,
        3.1404e-05, 3.74482e-05, 4.2877e-05,
        3.87834e-05, 4.50642e-05, 5.07664e-05
    )
}

/******************************************************************************
 * 14. 电阻模型 (ResModel Section)
 * 定义线宽相关的电阻与温度系数,覆盖Layer段的电阻参数
 ******************************************************************************/
ResModel "M1_Res_Model" {
    layerNumber = 8                          // 对应M1层
    size = 3
    wireWidth = (0.08, 0.1, 0.12)
    tempCoeff = (0.001, 0.001, 0.001)
    minRes = (0.001, 0.0009, 0.0008)
    nomRes = (0.001, 0.0009, 0.0008)
    maxRes = (0.0012, 0.0011, 0.001)
}

/******************************************************************************
 * 15. 过孔规则 (ViaRule Section)
 * 定义特殊过孔结构,如自对准过孔(SAV)
 ******************************************************************************/
ViaRule "SAV_Via1" {
    viaName = "Via1"
    isSelfAligned = 1                        // 自对准过孔
    minEnclosure = 0.02
    maxMisalignment = 0.01
}

/******************************************************************************
 * 16. PR规则 (PRRule Section)
 * 定义单元行间距规则,用于布局
 ******************************************************************************/
PRRule {
    rowSpacingTopBot = 2.8                   // 非双回折单元行间距
    abuttableTopBot = 0                      // 不允许边缘对接
    rowSpacingTopTop = 2.8                   // 双回折单元行间距
    rowSpacingBotBot = 1.4
    abuttableTopTop = 1
    abuttableBotBot = 1
}

1. 工具适配

  • Fusion Compiler/IC Compiler II : 使用write_tech_file tech7nm.tf导出,read_tech_file tech7nm.tf导入
  • IC Compiler : 使用write_mw_lib_files -technology -output tech7nm.tf导出,read_mw_lib_files -technology tech7nm.tf导入

2. 关键参数替换

参数类别 替换说明
单位与精度 根据晶圆厂要求调整lengthPrecisiongridResolution
设计规则 替换minWidthminSpacing等为工艺节点实际值
寄生参数 从 TLUPlus 文件或晶圆厂提供的 RC 参数中获取准确值
物理属性 更新unitNomHeightFromSubunitNomThickness为实际层叠结构

3. 规则检查

  1. 使用check_tech_file tech7nm.tf验证语法正确性
  2. 布线后通过signoff_drc检查规则遵守情况
  3. 对 Zroute 专属规则,使用zroute -check_design_rules专项检查

5. Synopsys® Technology File 和innovus以及virtuoso的techfile 区别

Synopsys® Technology File、Cadence Innovus Tech File 与 Cadence Virtuoso Tech File 的核心区别在于归属的 EDA 工具链不同、承载的规则范围不同、应用阶段不同,三者均是连接半导体制造工艺与 EDA 工具的桥梁,但针对的设计环节和工具特性做了差异化适配。

以下是三者的详细对比:

特性维度 Synopsys® Technology File Cadence Innovus Tech File Cadence Virtuoso Tech File
归属工具链 Synopsys 数字后端工具链(IC Compiler II、Fusion Compiler、Zroute、PrimeTime) Cadence 数字后端工具链(Innovus、Tempus、Voltus) Cadence 定制 / 模拟 / 全定制设计工具链(Virtuoso Layout Suite)
核心应用阶段 数字 IC 后端物理实现(布局、布线、时序签核、物理验证) 数字 IC 后端物理实现(布局规划、详细布线、CTS、物理验证签核) 模拟 / 全定制 IC 版图设计(器件绘制、单元版图设计、模块布局布线)
承载的核心规则 1. 数字布线规则(最小边缘、金属间距、线宽、过孔堆叠、密度填充)2. 时序相关寄生参数(电阻、电容模型)3. 工具全局模式(栅格精度、双重图形光刻规则)4. 面向布线器的约束(优先方向、离散尺寸规则) 1. 数字后端物理实现规则(布局密度、单元摆放约束、CTS 规则)2. 布线规则(同 Synopsys,但语法不同)3. 物理验证接口规则(与 Calibre DRC/LVS 对接)4. 功耗相关规则(电源网格设计约束) 1. 工艺层物理属性 (层厚度、介电常数、光刻掩模信息)2. 器件模型关联(MOS 管、电阻、电容的版图与工艺参数映射)3. 版图编辑规则(层可见性、颜色配置、栅格捕捉)4. 基础 DRC 规则(最小线宽、间距,供版图实时检查)
语法与格式 采用 Synopsys 专属的分段式语法(Technology/Layer/ContactCode/DensityRule 段),后缀通常为 .tf 采用 Cadence 数字后端专属语法,与 Synopsys 规则参数一致但关键字不同(如 min_width 对应 Synopsys 的 minWidth),后缀多为 .tf.tech 分为两类格式:1. 工艺文件(Tech File) :描述层属性,后缀 .tf2. 工艺库(PDK):包含器件模型、版图规则、符号库,是 Virtuoso 的核心,通常为晶圆厂提供的完整包
与 PDK 的关系 依赖晶圆厂提供的 PDK 提取规则参数,但自身不包含器件模型,仅聚焦数字后端布线与物理约束 同样依赖 PDK 提取参数,与 Innovus 工具的物理实现流程深度绑定,支持电源网格、时钟树的定制化约束 本身就是 PDK 的核心组成部分,Virtuoso 的 Tech File + 器件模型 + DRC/LVS 规则 = 完整的工艺设计包(PDK),直接支撑版图绘制
规则侧重点 面向数字大规模布线,强调规则的自动化执行(如 Zroute 专属的矩形图形约束、离散线宽规则) 面向数字后端全流程,兼顾布局、布线、功耗、时序的协同优化,支持更多物理实现策略(如 hierarchical 设计) 面向手工 / 半手工版图设计,强调层的物理属性和器件的版图匹配,规则用于版图绘制时的实时校验
兼容性 仅能被 Synopsys 数字后端工具识别,无法直接导入 Virtuoso/Innovus 仅能被 Cadence 数字后端工具识别,与 Synopsys Tech File 语法不兼容,需通过转换工具(如 Cadence 的 tech2innovus)适配 可被 Virtuoso 系列工具识别,数字后端工具无法直接使用,需从中提取层规则后转换为后端 Tech File
  1. 面向的设计类型不同

    • Synopsys Tech File 和 Innovus Tech File 是数字 IC 专属 ,针对的是由标准单元、IP 核组成的大规模数字电路,规则的核心目标是支持自动化布局布线

    • Virtuoso Tech File 是模拟 / 全定制 IC 专属 ,针对的是晶体管级的手工版图设计,规则的核心目标是保证器件版图与工艺的一致性,以及版图绘制的规范性。

  2. 是否包含器件模型的区别

    • Synopsys 和 Innovus 的 Tech File 不包含任何器件模型,它们只关注金属、过孔等布线层的物理规则,器件模型由单独的时序库(.lib)、寄生参数库(TLUPlus)提供。

    • Virtuoso 的 Tech File 与器件模型深度绑定 ,例如 MOS 管的栅极对应 POLY 层、源漏对应 DIFF 层,这些层的属性直接决定器件的电学特性,是模拟版图设计的基础。

  3. 规则的可移植性 三者的规则参数(如 minWidth/minSpacing 的数值)来源于同一晶圆厂 PDK,但语法和组织形式完全不同,无法直接互相导入使用。

    • 若要在 Synopsys 和 Cadence 工具间迁移规则,需通过工艺转换工具 (如 Synopsys 的 tech_convert、Cadence 的 pdk2tech)将 PDK 中的原始规则转换为对应工具的 Tech File 格式。
  4. 规则兼容性 两者的工艺参数数值 (如 minWidth=0.08μmminSpacing=0.08μm)均来源于同一晶圆厂 PDK,但语法和组织形式完全不兼容 ,无法直接互相导入。需通过专用转换工具(如 Synopsys tech_convert、Cadence pdk2tech)将 PDK 原始规则转换为对应工具的工艺文件格式。

  5. 布线器专属规则 Synopsys 工艺文件包含大量布线器专属约束 (如 Zroute 的 hasRectangleOnlyonWireTrack 规则),专为自动化高密度布线优化;Cadence Innovus 工艺文件则更侧重布局与布线的协同约束(如单元行间距、电源网格间距)。

6. PDK 规则到 Synopsys/Cadence 工艺文件的转换步骤清单

晶圆厂提供的 PDK(Process Design Kit) 是工艺规则的原始载体,包含层属性、设计规则、器件模型、DRC/LVS 脚本等全量数据。将 PDK 转换为 Synopsys/Cadence 工艺文件的核心目标,是提取 PDK 中与工具适配的规则,转化为对应工具链可识别的语法格式 ,具体步骤分三大阶段:PDK 预处理Synopsys 工艺文件转换Cadence 工艺文件转换

阶段 1:PDK 预处理(通用步骤,所有工具链必需)

此阶段的核心是从 PDK 中提取关键数据,确保规则的完整性和一致性,为后续转换打基础。

  1. 获取并解压晶圆厂 PDK 包

    • 确认 PDK 版本与目标工艺节点匹配(如 7nm/5nm FinFET)。

    • 解压 PDK 包,查看核心文件:

      • 工艺规则文档(*.pdf):包含金属 / 过孔的最小线宽、间距、面积等关键参数;

      • 层属性文件(*.tf/*.layermap):定义层名称、编号、光刻掩模信息;

      • 寄生参数文件(*.tlup/*.cim):电阻、电容、过孔寄生模型;

      • DRC/LVS 脚本(*.rule/*.cal):物理验证规则,用于交叉核对转换后的数据。

  2. 提取核心规则参数 整理 PDK 中的关键参数,形成规则对照表 ,避免转换时遗漏,示例如下:

    规则类型 关键参数 提取来源
    金属层规则 层名、优先方向、minWidth、minSpacing、minArea、minLength 工艺规则文档 + DRC 脚本
    过孔层规则 过孔名、上下金属层、cutSize、minEnclosure、minSpacing 工艺规则文档 + 层属性文件
    寄生参数 方块电阻、单位面积电容、过孔电阻 / 电容 寄生参数文件
    密度规则 金属填充的 minDensity、maxDensity、窗口尺寸 DRC 脚本
  3. 校验参数一致性

    • 对比工艺规则文档与 DRC 脚本中的参数,确保数值一致(如 minWidth 在文档和脚本中均为 0.08μm)。

    • 确认寄生参数与层属性匹配(如 M1 层的方块电阻对应正确的层编号)。

阶段 2:转换为 Synopsys 工艺文件(适配 IC Compiler/Zroute)

目标是生成 Synopsys 工具链可识别的 .tf 文件,核心工具为 Synopsys 自带的 tech_prep 或手动编写。

  1. 选择转换方式:自动转换 vs 手动编写

    • 自动转换(推荐,适合大规模规则)

      1. 启动 Synopsys tech_prep 工具,加载 PDK 的层属性文件和规则对照表。

      2. 配置全局参数:单位(微米)、长度精度(如 1000 → 0.001μm)、栅格分辨率。

      3. 执行命令:tech_prep -pdk [PDK_PATH] -output [SYNOPSYS_TF_PATH],生成初始 .tf 文件。

    • 手动编写(适合小规模定制,或自动转换后优化)

      1. 新建文本文件,命名为 tech_synopsys.tf

      2. 按 Synopsys 工艺文件语法,依次编写 Technology 段、Layer 段、ContactCode 段等,直接填入阶段 1 提取的参数。

      3. 绑定寄生参数:通过 ResModel/CapModel 段,关联 PDK 中的 TLUPlus 文件。

  2. 配置工具专属规则根据 Synopsys 布线器特性,添加专属约束:

    • Zroute 专属规则:hasRectangleOnly = 1onWireTrack = 1

    • 双重图形规则:dpMode = 1dpMaskCount = 2

    • 全局模式开关:minLengthMode = 1minAreaMode = 1

  3. 验证 Synopsys 工艺文件

    • 使用 Synopsys 工具命令校验语法正确性:

      复制代码
      check_tech_file tech_synopsys.tf
    • 若有语法错误,根据报错信息修正(如缺失段、参数类型错误)。

    • 导入 IC Compiler 工具,加载标准单元库,执行小型布线测试,确认规则生效(如布线未出现 minWidth 违规)。

阶段 3:转换为 Cadence 工艺文件(分数字后端 / 模拟全定制两类)

Cadence 工艺文件分两种,分别适配数字后端工具(Innovus)和模拟全定制工具(Virtuoso),转换流程不同。

子阶段 3.1:转换为 Cadence Innovus 数字后端工艺文件

目标是生成 Innovus 可识别的 .tf/.tech 文件,核心是语法转换(驼峰→下划线)+ 工具专属规则配置

  1. 自动转换(推荐工具:Cadence pdk2tech

    1. 启动 Cadence Innovus 工具,加载 PDK 的规则对照表。

    2. 执行 pdk2tech 命令,指定 PDK 路径和输出路径:

      复制代码
      pdk2tech -pdk [PDK_PATH] -tech [INNOVUS_TECH_PATH] -format innovus
    3. 工具自动完成语法映射 :将 Synopsys 驼峰命名(如 minWidth)转换为 Cadence 下划线命名(如 min_width)。

  2. 手动调整工具专属规则自动转换后,需添加 Innovus 特有的物理实现规则:

    • 布局规则:配置单元行间距(row_spacing)、Tile 尺寸;

    • 电源网格规则:定义电源条宽度(pg_strap_width)、间距(pg_strap_spacing);

    • CTS 规则:设置时钟树缓冲器的摆放约束(cts_buffer_spacing)。

  3. 验证 Innovus 工艺文件

    • 执行命令校验语法:

      复制代码
      innovus -batch -command "read_tech [INNOVUS_TECH_FILE]; check_tech; exit"
    • 导入 Innovus,加载标准单元库,执行布局规划测试,确认电源网格和单元摆放符合规则。

子阶段 3.2:转换为 Cadence Virtuoso 模拟全定制工艺文件

Virtuoso 的工艺文件是 PDK 的核心组成部分 ,转换的核心是层属性配置 + 器件模型绑定,与数字后端完全不同。

  1. 配置 Virtuoso 层属性文件(.tf

    1. 新建层属性文件 tech_virtuoso.tf,编写层定义,示例:

      复制代码
      Layer POLY
      {
          layerNumber: 1;
          maskName: "poly";
          color: 3;
          lineStyle: "solid";
          minWidth: 0.06;
          minSpacing: 0.06;
      }
    2. 绑定光刻掩模信息:为每层指定 maskNumber,匹配 PDK 的光刻要求。

  2. 导入器件模型库(.oa/.model

    • 将 PDK 中的器件模型(MOS 管、电阻、电容)导入 Virtuoso 的 Library Manager

    • 建立器件 - 版图映射关系 :如 MOS 管的栅极对应 POLY 层,源漏对应 DIFF 层。

  3. 集成 DRC/LVS 脚本

    • 将 PDK 的 DRC/LVS 脚本(*.cal)复制到 Virtuoso 的 rule 目录。

    • 在 Virtuoso 中配置脚本路径:Setup → DRC/LVS → Rule File,关联对应的脚本。

  4. 验证 Virtuoso 工艺文件

    • 在 Virtuoso 中绘制测试器件(如 NMOS 管),执行实时 DRC 检查,确认 minWidth、minSpacing 规则生效。

    • 对测试器件执行 LVS 检查,确认器件版图与模型匹配。

7. 关键注意事项

  1. 参数一致性转换后的工艺文件参数必须与 PDK 完全一致,否则会导致设计违规(如 minWidth 设为 0.09μm 会引发 DRC 错误)。

  2. 工具版本兼容

    • Synopsys 工艺文件需匹配 IC Compiler 版本(如 S-2021.06-SP3);

    • Cadence 工艺文件需匹配 Innovus/Virtuoso 版本(如 Innovus 21.1)。

  3. 交叉验证 转换完成后,分别在 Synopsys/Cadence 工具中进行小范围设计验证,对比 DRC 结果,确保规则无偏差。

相关推荐
点点开心1 小时前
攻防世界WEB(新手模式)2-5-web2
前端·学习·安全·web安全·网络安全
谢尔登1 小时前
React19 渲染流程
前端·javascript·架构·ecmascript
我是伪码农1 小时前
Vue 1.29
前端·javascript·vue.js
css趣多多1 小时前
Vue动态组件以及keep-alive的使用
前端·javascript·vue.js
盐真卿1 小时前
python第五部分:文件操作
前端·数据库·python
晚霞的不甘2 小时前
Flutter for OpenHarmony《智慧字典》英语学习模块代码深度解析:从数据模型到交互体验
前端·学习·flutter·搜索引擎·前端框架·交互
qq_336313932 小时前
javaweb-Ajax
前端·javascript·ajax
豆约翰2 小时前
句子单词统计 Key→Value 动态可视化
开发语言·前端·javascript
步达硬件2 小时前
【Matlab】修改视频尺寸
前端·matlab·音视频