在先进工艺节点(如 7nm 及以下),多重图案技术(Multi-Patterning Technology, MPT)是版图设计的核心挑战之一。本文详细解析 Virtuoso Layout Suite 中形状颜色的控制机制,帮助 CAD 工程师和版图设计师理解并掌握颜色分配的逻辑。

本文内容参考 Cadence 官方知识库 Article


问题背景

在 Virtuoso Layout Suite XL 或类似的颜色感知环境中进行版图绘制时,您可能会遇到以下困惑:

  • 手动创建的形状颜色发生意外变化
  • 不清楚是哪个设置驱动了颜色变化
  • Layer Palette、WSP 轨道、layerDefaultColor、动态着色引擎之间的关系不明

本文将逐一解析这些控制因素及其优先级。


颜色控制的四个层次

Virtuoso 环境中有多个设置控制形状的颜色分配,按优先级从高到低排序:

1
2
3
4
1. Layer Palette 选择
2. WSP 轨道(或调整 Palette 的 Tap)
3. Layer Default Color (layerDefaultColor)
4. 动态着色引擎:传播 / unclusteredShapeColor

1. Layer Palette 选择

Layer PaletteMPT Support 模式下的图层选择是基本形状创建(如矩形)颜色分配的首要来源。

启用 MPT Support

image-20260105180504451

image-20260105180513014

  • 在 Layer Palette 上右键点击,选择 MPT Support
  • 启用后可一键选择图层颜色和锁定状态,该颜色即为绘制形状的颜色

[!WARNING] 如果用户选择了不同的 mask 颜色并创建了与现有锁定形状相邻的锁定形状,可能会产生颜色短路(color short)。

Compact MPT 模式

image-20260105180544536

通过 Layer Palette Options 表单可启用 Compact MPT 模式

  • Palette 外观类似非 MPT 模式(每个 LPP 一行)
  • 颜色和锁定状态作为下拉菜单显示在 Active 图层旁边

2. Layer Default Color (layerDefaultColor)

在 Compact MPT 模式下,当选择一个 LPP 时,layerDefaultColor 用于设置 Palette 的颜色选择。

技术文件配置

layerDefaultColor 在技术文件的约束组(constraint group)中定义:

1
2
3
4
5
6
7
8
constraintGroups(
    ( "virtuosoDefaultMPTSetup" nil "virtuosoMPTSetup"
     spacings(
        ( layerDefaultColor "M1" "mask2")
        ( layerDefaultColor "M2" "mask2")
     )
    )
)

上例中,M1 和 M2 的默认颜色设置为 mask2,Palette 会显示数字 2 来指示。

其他设置方式

image-20260105180612513

方法 说明
SKILL 函数 mptSetLayerDefaultColor
GUI 表单 MPT 工具栏 → Multiple Patterning Layer Default Color

mptSetLayerDefaultColor 函数详解

函数语法:

mptSetLayerDefaultColor(tfID "LayerName" "ColorType")

参数说明:

参数 类型 说明
tfID dbId 技术库 ID,通过 techGetTechFile() 获取
"LayerName" string 目标图层名称,如 "M1""M2"
"ColorType" string 颜色类型,如 "mask1""mask2""alternating"

获取技术库 ID 的方法:

; 方法 1:从当前版图单元视图获取
tfID = techGetTechFile(geGetEditCellView()~>lib)

; 方法 2:从已知技术库名称获取
tfID = techGetTechFile(ddGetObj("MY_TECH_LIB"))

示例:将 M0 到 M4 全部设置为 alternating

以下 SKILL 代码可将 M0 至 M4 图层的默认颜色设置为 alternating 模式:

; 定义设置 M0-M4 默认颜色的程序
procedure(CCSmptSetM0toM4Alternating()
    let((tfID)
        ; 获取当前版图单元视图所属技术库的 ID
        tfID = techGetTechFile(geGetEditCellView()~>lib)
        
        ; 设置各层默认颜色为 alternating
        mptSetLayerDefaultColor(tfID "M0" "alternating")
        mptSetLayerDefaultColor(tfID "M1" "alternating")
        mptSetLayerDefaultColor(tfID "M2" "alternating")
        mptSetLayerDefaultColor(tfID "M3" "alternating")
        mptSetLayerDefaultColor(tfID "M4" "alternating")
        
        printf("MPT default colors for M0-M4 have been set to alternating.\n")
    )
)

; 可选:将此功能绑定为快捷键(例如在 Layout 窗口按 Ctrl+Shift+J)
hiSetBindKey("Layout" "Ctrl<Key>J" "CCSmptSetM0toM4Alternating()")

在 .cdsinit 中自动加载

如果希望在启动 Virtuoso 或打开设计时自动应用此设置,可将以下代码添加到 .cdsinit

procedure(CCSmptColorAutoload()
    let((tfID)
        ; 替换 <TECHLIBNAME> 为您的实际技术库名称
        tfID = techGetTechFile(ddGetObj("<TECHLIBNAME>"))
        when(tfID
            mptSetLayerDefaultColor(tfID "M0" "alternating")
            mptSetLayerDefaultColor(tfID "M1" "alternating")
            mptSetLayerDefaultColor(tfID "M2" "alternating")
            mptSetLayerDefaultColor(tfID "M3" "alternating")
            mptSetLayerDefaultColor(tfID "M4" "alternating")
            printf("MPT alternating colors applied for M0-M4.\n")
        )
    )
)
; 执行初始化
CCSmptColorAutoload()

打开 Layout Editor 时自动加载

在 .cdsinit 里加载下面代码,或者放到一个文件然后被 .cdsinit 调用。就能实现打开 Layout Editor 时自动应用设置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
procedure(CCSMptColorOnOpen(arg)
    let((cv tfID layers)
        ; 触发器传入的是结构体,通过 ->cellView 获取
        cv = or(arg->cellView geGetEditCellView())
        
        when(cv
            tfID = techGetTechFile(cv~>lib)
            when(tfID
                layers = '("M0" "M1" "M2" "M3" "M4")
                foreach(layer layers
                    when(techFindLayer(tfID layer)
                        mptSetLayerDefaultColor(tfID layer "alternating")
                    )
                )
                printf("MPT: Alternating colors applied for %s\n" cv~>cellName)
            )
        )
    )
)

; 覆盖所有常见的 Layout 编辑器模式
let((viewTypes)
    viewTypes = '("maskLayout" "maskLayoutXL" "maskLayoutEXL" "maskLayoutGXL")
    foreach(vt viewTypes
        deRegUserTriggers(vt nil nil 'CCSMptColorOnOpen)
    )
)

; 打开 Color Engine,使得前面设置的 mptSetLayerDefaultColor 能自动生效
mptActivate(t)

[!TIP] 参考文档:How can I set default color for layers in MPT through SKILL?

Compact MPT 模式下的行为

  • 由于只选择输入图层,layerDefaultColor 决定初始 maskColor 选择
  • 可在创建对象前手动更改 Palette 中的 mask 编号下拉菜单
  • 如果新选择的图层没有设置 layerDefaultColor,它将继承上一个活动图层的颜色和锁定状态

alternating 模式

如果 layerDefaultColor 设置为 alternating

  • 新形状的 mask 颜色将在该图层可用的 mask 之间交替
  • 除非在 Palette 中启用了特定 mask
  • 切换到灰色可让工具考虑先前创建形状的 mask 颜色,并在不同 mask 上生成下一个形状

锁定默认颜色

可通过以下方式锁定 layerDefaultColor

mptSetLockDefaultColors(t)

或通过 Multiple Patterning Layer Default Color 表单设置。

[!NOTE] 锁定选项仅在设置了 MPT_GUI_SHOW_LOCK_DEFAULT 环境变量时才在表单中显示,但不推荐使用


3. 动态着色引擎 (Dynamic Coloring Engine)

激活状态

SKILL 调用 效果
mptActivate(t) 激活动态着色引擎,颜色从现有形状传播
mptActivate(nil) 禁用动态着色引擎,无颜色传播,可能产生颜色短路

Default Shape Assignment (unclusteredShapeColor)

这是 .cdsenv 中的设置,影响新创建的形状:

  • 当形状没有从其他来源(如 layerDefaultColor、Palette 选择、WSP 轨道等)获得颜色时,着色引擎使用此设置

设置选项:

image-20260105180754566

选项 说明
layerDefault 实际上被忽略,因为 layerDefaultColor 总是更早应用
Random 类似 layerDefaultColoralternating,但仅在没有其他颜色来源时应用
gray Connected shapes 模式下,灰色将传播到所有连接的形状

处理锁定形状

动态着色引擎不会改变锁定形状的颜色

要允许着色引擎移动新创建形状的颜色以避免颜色短路(通常用于非锁定形状),需在 .cdsinit 或 CIW 中设置:

envSetVal("mpt" "_resolveCreatedDefaultLockedObject" 'boolean t) ;; 默认值为 nil

4. Wire Editor 和 WSP 轨道

对于 pathSegs,Wire Editor 操作于 WSP 轨道。当您在分配了颜色的 WSP 轨道上创建导线时,Palette 选择将自动调整以匹配 WSP 轨道颜色。

WSP 轨道的优势

  • 推荐使用 WSP 轨道颜色,因为它可以减少动态着色引擎的工作负载

矩形吸附到 WSP 网格

可通过以下设置让矩形吸附到 WSP 轨道:

envSetVal("layout" "snapRectToWSPGrid" 'boolean t)

最佳实践建议

[!IMPORTANT] 推荐工作流程:

  1. 在创建/编辑设计时,使用未锁定的颜色
  2. 允许颜色传播和自动调整以满足设计规则
  3. 当所有形状都已着色后,使用 MPT 工具栏中的 Lock All 提交所有颜色

颜色分配总结流程图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
新创建形状
    │
    ▼
┌─────────────────────┐
│ 1. Palette 选择?   │ ──是──▶ 使用 Palette 颜色
└─────────────────────┘
    │否
    ▼
┌─────────────────────┐
│ 2. WSP 轨道颜色?   │ ──是──▶ 使用 WSP 轨道颜色
└─────────────────────┘
    │否
    ▼
┌─────────────────────┐
│ 3. layerDefaultColor│ ──有──▶ 使用默认颜色
│    已设置?         │
└─────────────────────┘
    │否
    ▼
┌─────────────────────┐
│ 4. 动态着色引擎     │ ──▶ 颜色传播 / unclusteredShapeColor
└─────────────────────┘

相关环境变量和 SKILL 函数

类型 名称 说明
环境变量 MPT_GUI_SHOW_LOCK_DEFAULT 显示锁定默认颜色选项
cdsenv mpt unclusteredShapeColor 未聚类形状的默认颜色
cdsenv layout snapRectToWSPGrid 矩形吸附到 WSP 网格
SKILL mptActivate(t/nil) 激活/禁用动态着色引擎
SKILL mptSetLayerDefaultColor 设置图层默认颜色
SKILL mptSetLockDefaultColors(t) 锁定默认颜色

参考资料