背景

TSMC N5(5nm)是台积电的先进 FinFET 工艺节点,其 PDK 体积庞大、文件类型繁多,并且对 Cadence Virtuoso 的版本有明确要求。本文整理一份 N5 PDK 的标准安装与 Virtuoso 导入流程,覆盖从解压、运行 pdkInstall.pl、添加库到 Library Manager 验证的完整步骤,便于 EDA/IT 人员在新机房落地一套先进工艺环境时参照执行。

适用范围:TSMC 5/6/7/12/16/22nm 系列 FinFET PDK 在 Cadence Virtuoso 上的部署。Calibre 平台对应的 DRC/LVS/PEX 配置文件随 PDK 一同分发,本文只涉及在 Virtuoso 端的设计库导入。


1. PDK 文件清单与目录结构

以一个典型的 TSMC N5 iPDK 包为例,正式名称为 TSMC 5 NM CMOS LOGIC FINFET (FF) HKMG 0.75/1.2V PDK(版本号:iPDK_CLN5_v1.2_2p2a_20211227,其中 CLN5 表示 CMOS Logic N5,2p2a 表示对应的 metal stack 选项,发布日期 2021/12/27),解压后的根目录下能看到如下文件:

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
[root@eda iPDK_CLN5_v1.2_2p2a_20211227_all]# ll
drwxr-xr-x   15 root tsmcadm      4096 Jun  4  2024 .
drwxr-xr-x    5 root tsmcadm      4096 Apr 13  2022 ..
drwxr-xr-x    5 root tsmcadm      4096 Dec 20  2021 Calibre
drwxr-xr-x    4 root tsmcadm      4096 Dec 20  2021 CCI
-rwxr-xr-x    1 root tsmcadm       223 Jan 10  2022 cds.lib
-rwxr-xr-x    1 root tsmcadm    285430 Jun  4  2024 display.drf
-rwxr-xr-x    1 root tsmcadm 122713924 Jan  9  2022 DOC_iPDK_CLN5_v1.2_2p2a_20211227.tar.gz
drwxr-xr-x    3 root tsmcadm      4096 Dec 20  2021 iDeck
-rwxr-xr-x    1 root tsmcadm 952415917 Dec 25  2021 iPDK_CLN5_v1.2_2p2a_20211227.tar.gz
drwxr-xr-x   12 root tsmcadm      4096 Apr 13  2022 iPDK_Patch_CLN5_v1.2_2p2a1_20220311
-rwxr-xr-x    1 root tsmcadm 137547456 Apr 13  2022 iPDK_Patch_CLN5_v1.2_2p2a1_20220311.tar.gz
drwxr-xr-x   10 root tsmcadm      4096 Dec 29  2022 iPDK_Patch_CLN5_v1.2_2p2a2_20221220
-rwxr-xr-x    1 root tsmcadm        96 Dec 20  2021 lib.defs
drwxr-xr-x    8 root tsmcadm      8192 Dec 29  2022 models
drwxr-xr-x    3 root tsmcadm      4096 Dec 23  2021 PDK_doc
-rwxr-xr-x    1 root tsmcadm      6188 Dec 25  2021 pdkInstall.cfg
-rwxr-xr-x    1 root tsmcadm     92150 Dec 24  2021 pdkInstall.pl
-rw-r--r--    1 root tsmcadm        12 Dec 29  2022 prjname.rve
drwxr-xr-x    4 root tsmcadm      4096 Dec 20  2021 QCI
-rwxr-xr-x    1 root tsmcadm     21055 Dec 27  2021 readme
-rwxr-xr-x    1 root tsmcadm      1267 Dec 29  2022 Recommended_tool_version_number.txt
-rwxr-xr-x    1 root tsmcadm     94990 Dec 29  2022 ReleaseNote.txt
-rwxr-xr-x    1 root tsmcadm     17242 Dec 29  2022 REVISION
-rwxr-xr-x    1 root tsmcadm      2203 Dec 29  2022 setup.loc
drwxr-xr-x    5 root tsmcadm      4096 Dec 29  2022 skill
drwxr-xr-x    4 root tsmcadm     53248 Aug 30  2022 Tcl
-rwxr-xr-x    1 root root      1529037 Jun  4  2024 techfile
drwxr-xr-x    5 root tsmcadm      4096 Dec 20  2021 Techfile
drwxr-xr-x 1342 root tsmcadm    274432 Jun  4  2024 tsmcN5

主要内容解读

名称 类型 用途
pdkInstall.pl 文件 顶层 Perl 安装脚本,用于按需展开各子模块
pdkInstall.cfg 文件 安装脚本读取的组件清单/默认选项
cds.lib 文件 安装后的样例 Cadence 库索引,可作为模板复制到工作目录
lib.defs 文件 OA 库的层级定义文件(与 cds.lib 配合)
display.drf 文件 Virtuoso 显示资源文件(颜色、stipple 等)
techfile 文件 Virtuoso tech file(与目录 Techfile/ 区分)
Techfile/ 目录 安装程序所需的临时文件集合(used for install program)
tsmcN5/ 目录 PDK 主库(PCell、symbol、layout 等 OA cellview)
models/ 目录 HSPICE/Spectre 模型 (.lib.scs.inc)
Calibre/ 目录 Calibre DRC/LVS/XRC command files
CCI/ 目录 Calibre Star-RCXT CCI flow technology files
QCI/ 目录 Calibre QRC QCI flow technology files
skill/ 目录 PDK 提供的所有 callback 与实用工具(SKILL)
Tcl/ 目录 包含 iPDK 所使用的 callback 与实用工具的 Tcl 目录
iDeck/ 目录 iPDK Deck,存放跨工具兼容性配置
PDK_doc/ 目录 所有 PDK 文档(使用前务必查阅 ReleaseNote)
Recommended_tool_version_number.txt 文件 TSMC 官方推荐的 EDA 工具版本号清单
ReleaseNote.txtREVISIONreadme 文件 PDK 详细信息、版本更新记录、快速指引

关键提示:根目录里同时存在 techfile(小写、文件)和 Techfile(首字母大写、目录)两份。前者是 Virtuoso tech file,后者包含安装程序所需的临时文件。在 Linux 大小写敏感的文件系统上互不冲突,但拷贝到 Windows / 不区分大小写的存储上会冲突——这是先进节点 PDK 在跨平台传输时的一个典型坑,建议始终在 Linux 文件系统上落地。

首要查看的两个文件

  1. Recommended_tool_version_number.txt —— 在动手安装前先读这一份,确认本地的 Virtuoso、Calibre、StarRC、HSPICE 是否落在 TSMC 推荐版本范围内。
  2. ReleaseNote.txt —— 列出当前版本相对前一版的差异、已知 issue 与 patch 列表。

QCI 与 CCI 目录详解

QCI/CCI/ 分别对应两套寄生参数提取(RC Extraction)流程,二者内部结构相似但工具链不同,Calibre LVS rule 也各自独立。

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
QCI
├── online
│   ├── 1P11M_1X1Xb1Xe1Ya1Yb3Y2R
│   ├── 1P12M_1X1Xb1Xe1Ya1Yb2Y2Yy2R
│   ├── 1P12M_1X1Xb1Xe1Ya1Yb4Y2Z
│   ├── 1P13M_1X1Xb1Xe1Ya1Yb5Y2R
│   ├── 1P13M_1X1Xb1Xe1Ya1Yb5Y2Z
│   ├── 1P14M_1X1Xb1Xe1Ya1Yb4Y2Yy2R
│   ├── 1P14M_1X1Xb1Xe1Ya1Yb4Y2Yy2Z
│   ├── 1P15M_1X1Xb1Xe1Ya1Yb5Y2Yy2R
│   ├── 1P15M_1X1Xb1Xe1Ya1Yb5Y2Yy2Z
│   ├── 1P16M_1X1Xb1Xe1Ya1Yb4Y2Yy2Yx2R
│   ├── 1P16M_1X1Xb1Xe1Ya1Yb4Y2Yy4Z
│   ├── 1P16M_1X1Xb1Xe1Ya1Yb6Y2Yy2R
│   ├── 1P17M_1X1Xb1Xe1Ya1Yb5Y2Yy2Yx2R
│   ├── 1P17M_1X1Xb1Xe1Ya1Yb5Y2Yy2Yx2Z
│   └── common_file
└── QCI_decks
    ├── calibre_qci.lvs
    ├── capgen.cmd
    ├── DFM
    │   ├── dfm_device
    │   ├── dfm_nmos_macro_file.encrypt
    │   ├── dfm_pmos_macro_file.encrypt
    │   ├── logic_operation2.encrypt
    │   ├── logic_operation.encrypt
    │   ├── odSpace.encrypt
    │   └── variable_file
    ├── hcell_qci
    ├── icellmap.yaml
    ├── layer_setup
    ├── lpe_confile
    ├── qci_qrc_cmd.ccl
    ├── query.cmd
    └── source.added

CCI
├── CCI_decks
│   ├── calibre_cci.lvs
│   ├── dfii_layer_map.txt
│   ├── DFM
│   │   ├── dfm_device
│   │   ├── dfm_nmos_macro_file.encrypt
│   │   ├── dfm_pmos_macro_file.encrypt
│   │   ├── logic_operation2.encrypt
│   │   ├── logic_operation.encrypt
│   │   ├── odSpace.encrypt
│   │   └── variable_file
│   ├── icellmap.yaml
│   ├── pin_file.txt
│   ├── query_cmd
│   ├── source.added
│   ├── star_cmd
│   ├── starrcxt_mapping
│   └── xcell
├── online
│   ├── 1P11M_1X1Xb1Xe1Ya1Yb3Y2R
│   ├── 1P12M_1X1Xb1Xe1Ya1Yb2Y2Yy2R
│   ├── 1P12M_1X1Xb1Xe1Ya1Yb4Y2Z
│   ├── 1P13M_1X1Xb1Xe1Ya1Yb5Y2R
│   ├── 1P13M_1X1Xb1Xe1Ya1Yb5Y2Z
│   ├── 1P14M_1X1Xb1Xe1Ya1Yb4Y2Yy2R
│   ├── 1P14M_1X1Xb1Xe1Ya1Yb4Y2Yy2Z
│   ├── 1P15M_1X1Xb1Xe1Ya1Yb5Y2Yy2R
│   ├── 1P15M_1X1Xb1Xe1Ya1Yb5Y2Yy2Z
│   ├── 1P16M_1X1Xb1Xe1Ya1Yb4Y2Yy2Yx2R
│   ├── 1P16M_1X1Xb1Xe1Ya1Yb4Y2Yy4Z
│   ├── 1P16M_1X1Xb1Xe1Ya1Yb6Y2Yy2R
│   ├── 1P17M_1X1Xb1Xe1Ya1Yb5Y2Yy2Yx2R
│   ├── 1P17M_1X1Xb1Xe1Ya1Yb5Y2Yy2Yx2Z
│   └── common_file
└── SNPS_SETTING_CCI

两个目录的核心区别如下:

维度 QCI/(Calibre QRC QCI) CCI/(Calibre Star-RCXT CCI)
提取工具 Cadence Quantus(QRC) Synopsys StarRC / Star-RCXT
Calibre LVS rule QCI_decks/calibre_qci.lvs CCI_decks/calibre_cci.lvs
工具命令文件 qci_qrc_cmd.cclcapgen.cmdquery.cmd star_cmdquery_cmd
单元映射 icellmap.yaml(QRC 用) icellmap.yaml(StarRC 用)、starrcxt_mappingxcell
层定义 layer_setuplpe_confile dfii_layer_map.txt
Synopsys 设置 SNPS_SETTING_CCI(顶层目录,StarRC 专属)
online/ 子目录 按 metal stack 命名,存放对应的 online 提取文件 同左,metal stack 子目录完全对应
共用文件 online/common_file(各 metal stack 共享部分) 同左

online/ 命名规则解读:每个子目录名如 1P11M_1X1Xb1Xe1Ya1Yb3Y2R 描述一种 metal stack 组合,1P = 1 层 poly,11M = 11 层金属,后缀字母组合表示各层金属的方向与类型(X/Y/Z/R 等)。使用时需按设计所采用的 metal stack 选取对应子目录。

重要QCI_decks/calibre_qci.lvsCCI_decks/calibre_cci.lvs 是两份独立的 Calibre LVS rule deck,分别服务于 QRC 和 StarRC 提取流程,不可互换。在配置 PEX 环境时,务必确认当前流程使用的提取工具,并指向对应 *_decks/ 下的 LVS rule。


2. 执行 pdkInstall.pl 安装

TSMC PDK 自带的 pdkInstall.pl 是一个交互式 Perl 脚本,封装了组件选择、目标路径设置与解压等动作。

重要:使用前必须同时解压以下两个 tar.gz 包,缺少任何一个都无法正常使用 PDK:

1
2
tar -xzf iPDK_CLN5_v1.2_2p2a_20211227.tar.gz
tar -xzf DOC_iPDK_CLN5_v1.2_2p2a_20211227.tar.gz

基本用法如下:

1
2
3
cd <PDK 解压根目录>
chmod +x pdkInstall.pl
./pdkInstall.pl

脚本启动后会依次询问:

  1. 目标安装路径(Target Install Directory)—— 推荐放在共享存储,例如 /eda/pdk/tsmc/N5/<version>,便于多用户访问。
  2. 模块选择(Component Selection)—— 包括 Front-End View、Back-End View、Calibre Decks、StarRC Mapping、SPICE Models 等。
  3. 工艺选项(Process Option)—— 不同的 metal stack 需要按设计目标勾选。
  4. 校验阶段—— 安装结束后脚本会比对文件数量与 checksum,并打印 Installation Completed Successfully 之类的成功信息。

注意:先进节点 PDK 体积大(往往 50–200 GB 起步),建议在 NFS上部署,并保证至少 2× PDK 体积的额外可用空间用于解压和临时文件。


3. 安装完成后的目录验证

pdkInstall.pl 执行成功后,目标安装目录的整体形态应与第 1 节列出的”原始包”基本一致——iPDK 的特点就是大部分文件在分发时已经按工具维度组织好,安装脚本主要做:路径替换、cds.lib 中绝对路径的重写、按所选 metal stack 安装对应工艺文件、以及生成 tsmcN5/ 库的 OA 索引。

关键验收点

  • tsmcPdkInstall.log 日志文件会生成。
  • tsmcN5/ 下应包含 cdsinfo.tagdata.dm 与每个 cell 的子目录(<cell>/<view>/master.tag + 二进制 cellview)。1199 个 entry 的目录大小是正常的(FinFET 节点 PCell + Symbol + Layout 数量本身就很多)。
  • Calibre/ 子目录下应能看到针对当前 metal stack 的 DRC/LVS/XRC command files。
  • models/ 下应至少有一份顶层 Spectre .scs,其中通过 include/section 串联起 corner 文件;HSPICE 风格的 .lib 也按 corner 划分好。
  • Recommended_tool_version_number.txtReleaseNote.txt 是否随本次安装更新——iPDK 在补丁版(minor patch)中常常只更新部分目录,但这两个文件一定会刷新。

4. 启动 Virtuoso 并打开 Library Path Editor

版本兼容性提醒:TSMC 5/6/7/12/16/22nm 等先进 FinFET 工艺库只能在以下 Virtuoso 版本中正常工作:

  • ICADVM 20.1(Advanced Node Multi-mode 版本)
  • IC 23.1
  • IC 25.1

标准的 IC 6.1.8(IC618)不支持 这些先进节点的 PDK,原因在于 5nm 引入的 Color/Multi-Patterning、FinFET 器件 PCell、以及 Layout XL 高级特性需要 ICADVM 内核才能解析。在 IC618 中尝试打开 N5 库会出现 unknown techfile constructsPCell evaluation failed 等错误。

启动 Virtuoso 之前先准备一个干净的工作目录(避免与旧 cds.lib 冲突):

1
2
3
mkdir -p ~/work/n5_demo && cd ~/work/n5_demo
module load cadence/ICADVM201   # 或 IC231 / IC251,按本地 module 命名调整
virtuoso &

Virtuoso 启动后,从 CIW(Command Interpreter Window)顶栏选择:

1
Tools → Library Path Editor...

即可打开 Library Path Editor,它的本质是一个对当前工作目录下 cds.lib 进行编辑的 GUI。


5. 通过 Library Path Editor 添加 TSMC N5 库

在 Library Path Editor 主界面中:

  1. 在已有的库列表区域空白处 右键 → 选择 Add Library...,弹出 Add Library 对话框。
  2. Library 字段填入要在 cdsLibMgr 中显示的库名(建议与 PDK 提供的库名保持一致,例如 tsmcN5tsmcN5_iotsmcN5_sram 等)。
  3. Path 字段通过 Browse 浏览到 PDK 安装目录下的 tsmcN5/ 目录(或对应的 IO/SRAM/Standard Cell 库,例如 library/ 下的子库)。
  4. 勾选 Lib Path 区段中需要写入的 cds.lib(默认是当前工作目录下的 ./cds.lib)。

对应到底层 cds.lib 文件,Library Path Editor 实际是在添加这样的一行:

1
DEFINE tsmcN5  /eda/pdk/tsmc/N5/<version>/tsmcN5

6. 选择库所在路径并完成添加

每一个 PDK 子库(数字标准单元、IO、Memory Compiler 输出、模拟参考库)都需要重复一次第 5 步。常见的 N5 子库包含:

  • tsmcN5 —— 工艺主库(PCell、Symbol、tech.db)

为减少手工点击,也可以直接编辑 cds.lib

1
2
SOFTINCLUDE $CDS_INST_DIR/share/cdssetup/cds.lib
DEFINE tsmcN5         /eda/pdk/tsmc/N5/<version>/tsmcN5

7. 保存库列表

回到 Library Path Editor,选择菜单 File → Save(或 Save As...)将更改写入磁盘。如果工作目录下没有 cds.lib,系统会自动创建一个;如果已有,则会原地更新。

小技巧:保存前可以先 File → Save As... 备份原有 cds.lib,便于回滚。

保存完成后,可以在 CIW 看到类似下面的提示:

1
Saved cds.lib at /home/<user>/work/n5_demo/cds.lib

8. 在 Library Manager 中验证

执行 Tools → Library Manager...,进入 Library Manager 界面:

  • 在左侧库列表里应能看到刚添加的 tsmcN5 等库名。
  • 选中 tsmcN5,右侧 Cell View 列表会列出该库提供的器件(如 nch_macpch_macnch_lvtpch_lvtnmos_dumpmos_dum 等 PCell)。
  • 右键任意 cell,选择 Opensymbollayout 验证是否能正常打开,没有 Cannot read techfile / PCell evaluation failed 等错误提示。
  • 双击器件 layout 视图后,应看到完整的 FinFET 版图、正确的层颜色(依赖 display.drf)和 Color decoration(多重曝光着色)。

如果在 Library Manager 里某个库下面看不到任何 cell,多半是以下原因:

现象 可能原因
库可见但无 cell cds.lib 路径不对 / 缺少 OpenAccess 索引
库可见,cell 可见但打开报 PCell 错 当前 Virtuoso 版本不支持(如误用 IC618)
打开 layout 后颜色全错 display.drf 未通过 tech.db 关联,或 .cdsenvviewerColors 设置干扰
unknown technology library 没有把 tsmcN5 设为 attached tech library

9. 后续配置:Calibre DRC/LVS

PDK 在 Virtuoso 中可见仅是第一步,要完成 DRC/LVS 流程还需要:

  1. ~/.cdsinit 中加载 PDK 提供的 Calibre 集成 SKILL(一般是 calibre.sklmgc_rve.il 等)。
  2. 设置环境变量:
    1
    2
    3
    
    export CALIBRE_HOME=/eda/mentor/calibre/<version>
    export MGC_HOME=$CALIBRE_HOME
    export PATH=$CALIBRE_HOME/bin:$PATH
    
  3. 在 Calibre runset 中指向 PDK 自带的 rule deck(具体子目录以本地解压结果为准):
    1
    2
    
    *drcRulesFile: /eda/pdk/tsmc/N5/<version>/Calibre/<rule_deck>.drc
    *lvsRulesFile: /eda/pdk/tsmc/N5/<version>/Calibre/<rule_deck>.lvs
    
  4. 在 Virtuoso 中通过 Calibre → Run nmDRC / Run nmLVS 调起,确认能识别 PDK 的 svrf rule deck 而无 unknown rule 报错。

10. 经验总结

  • 版本是先进节点 PDK 安装的第一道闸:在动手安装前先确认 Virtuoso 是 ICADVM201 / IC231 / IC251;IC618 在 N5/N7 等节点上几乎不可用。
  • pdkInstall.pl 不是一次到位:先进节点 PDK 经常会发布 patch(hotfix、ECO PDK),后续也会通过 pdkInstall.pl --update 或单独的 patch 脚本叠加,建议把 PDK 主版本与 patch 版本合并到目录命名中(如 N5/v1p0_p2),避免覆盖原版导致回归困难。
  • 库要分级别 attach:标准单元、IO、SRAM 各自有独立的 attached tech,而工艺主库 tsmcN5 才是 tech.db 的根。建库时务必把这层关系理清楚。
  • 校验落在 Library Manager:能在 Library Manager 里成功打开 layout 并显示正确颜色,是 PDK 安装“能用”的最低门槛;进一步要跑通 DRC/LVS/PEX 才算端到端可用。

参考资料

  • TSMC Open Innovation Platform® Design Reference Flow & N5 PDK Release Note
  • Cadence Virtuoso ICADVM 20.1 / IC 23.1 / IC 25.1 Advanced Node Support Matrix
  • Cadence Virtuoso Library Manager User Guide
  • Mentor Calibre Verification User’s Manual