在先进工艺节点(如 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 Palette 在 MPT Support 模式下的图层选择是基本形状创建(如矩形)颜色分配的首要来源。
启用 MPT Support


- 在 Layer Palette 上右键点击,选择 MPT Support
- 启用后可一键选择图层颜色和锁定状态,该颜色即为绘制形状的颜色
[!WARNING] 如果用户选择了不同的 mask 颜色并创建了与现有锁定形状相邻的锁定形状,可能会产生颜色短路(color short)。
Compact MPT 模式

通过 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 来指示。
其他设置方式

| 方法 | 说明 |
|---|---|
| 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 轨道等)获得颜色时,着色引擎使用此设置
设置选项:

| 选项 | 说明 |
|---|---|
layerDefault |
实际上被忽略,因为 layerDefaultColor 总是更早应用 |
Random |
类似 layerDefaultColor 的 alternating,但仅在没有其他颜色来源时应用 |
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] 推荐工作流程:
- 在创建/编辑设计时,使用未锁定的颜色
- 允许颜色传播和自动调整以满足设计规则
- 当所有形状都已着色后,使用 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) |
锁定默认颜色 |