第1章:PDK目录结构解析

各位同学,咱们今天聊聊PDK的目录结构。说实话,我刚入行那会儿,拿到一个PDK压缩包,第一反应就是直接解压,然后满世界找文件。结果呢?浪费了大半天时间,最后发现原来人家目录结构是有规律的。

PDK,全称是Process Design Kit,工艺设计套件。说白了,就是晶圆厂给我们设计师准备的一套工具包。你想想看,没有PDK,你连个管子都画不出来,更别提仿真了。

1.1 PDK根目录长什么样?

我习惯把PDK解压后,先看一眼根目录。以SMIC 0.18μm工艺为例,典型的根目录结构是这样的:

smic18mmrf_1.0/
├── doc/           # 文档目录
├── lib/           # 库文件目录
├── models/        # 模型文件目录
├── pdk/           # PDK核心文件
├── rules/         # 规则文件目录
├── tech/          # 技术文件目录
└── tools/         # 工具脚本目录

嗯,这里要注意:不同版本的PDK,目录名可能略有差异。比如有的叫documents而不是doc,但核心内容是一样的。

我的小技巧: 拿到PDK后,先看doc目录下的READMErelease_notes文件。那里通常会写明版本号、支持的EDA工具、已知问题等。我曾经因为没看这个,用了一个不兼容的版本,折腾了两天。

1.2 库文件(lib)详解

库文件,这是PDK里最核心的部分之一。它包含了所有标准单元、IO单元、存储器等数字库的信息。

lib目录下,你通常会看到:

  • 数字标准单元库:比如smic18_sc,里面是各种逻辑门、触发器等
  • IO库:比如smic18_io,包含输入输出缓冲器
  • 存储器库:比如smic18_sram,SRAM等存储器宏单元

每个库文件通常有多个视图:

视图类型 文件后缀 用途
逻辑视图 .lib 综合用,包含时序、功耗信息
物理视图 .lef / .gds 布局布线用,包含版图信息
仿真视图 .v / .vhdl 功能仿真用,Verilog/VHDL模型
避坑指南: 我曾经遇到过一个问题——用错了库文件的版本。数字库有TT(典型)、FF(快)、SS(慢)三种corner。如果你综合时用了SS库,但仿真时用了TT模型,结果就是时序对不上。所以,一定要保持一致。

1.3 技术文件(tech)详解

技术文件,说白了就是告诉EDA工具:你这个工艺有哪些层、每层的颜色、最小线宽、间距规则等等。

tech目录下,常见的文件有:

  • .tf文件:技术文件,用于Virtuoso等版图工具
  • .techlef文件:技术LEF,用于数字后端工具
  • .map文件:层映射文件,用于GDS导入导出

举个例子,一个典型的.tf文件片段:

layer {
  name "M1"
  layerNumber 31
  datatype 0
  color "blue"
  pattern "solid"
  minWidth 0.23
  minSpacing 0.23
}

你看,这里定义了金属层M1的编号、颜色、最小宽度和间距。我刚开始学的时候,总觉得这些参数是固定的。后来有一次做项目,发现M1的最小间距其实是0.23μm,但我的版图里画了0.2μm,结果DRC报错。嗯,这就是不看技术文件的后果。

1.4 规则文件(rules)详解

规则文件,包括DRC(设计规则检查)和LVS(版图与原理图一致性检查)规则。

rules目录下,你通常能找到:

  • DRC规则文件:比如smic18_drc.cal(Calibre格式)或smic18_drc.drc(Assura格式)
  • LVS规则文件:比如smic18_lvs.calsmic18_lvs.lvs
  • 天线规则文件:用于检查天线效应

重点: 规则文件是晶圆厂最核心的技术资料之一。它包含了工艺的所有设计约束。我建议你每次流片前,至少跑三遍DRC:第一遍快速检查,第二遍仔细检查,第三遍用不同的规则文件交叉验证。

为什么会这样?因为有时候规则文件本身也有bug。我记得有一次,我用SMIC的DRC规则文件,发现有个规则总是报假错。后来联系FAE,才知道是规则文件版本问题,更新后就正常了。

1.5 模型文件(models)详解

模型文件,这是仿真用的核心文件。它描述了MOS管、电阻、电容等器件的电学特性。

models目录下,常见的文件有:

  • SPICE模型.lib.model文件,用于HSPICE、Spectre等仿真器
  • Verilog-A模型.va文件,用于行为级建模
  • 统计模型.stat文件,用于蒙特卡洛分析

一个典型的MOS管模型定义:

.MODEL nmos_1p8 NMOS (
+ LEVEL = 49
+ VTH0 = 0.45
+ U0 = 350
+ TOX = 4.0E-9
+ ...)

这里LEVEL=49表示使用BSIM4模型。你想想看,如果没有这些模型参数,你拿什么去仿真?

个人经验: 我建议你把所有模型文件放在一个固定的目录下,然后在仿真脚本里用相对路径引用。这样换机器、换项目时,不用改来改去。我曾经见过有人把模型文件路径写死,结果换了个服务器,所有仿真都跑不了。

1.6 各目录之间的关系

说了这么多,你可能觉得这些目录是孤立的。其实不是,它们之间是相互关联的。

举个例子,你做一个反相器的版图:

  1. 库文件里调用标准单元
  2. 技术文件定义版图层
  3. 画完版图后,用规则文件做DRC/LVS检查
  4. 提取寄生参数后,用模型文件做后仿真

你看,一个完整的流程,需要用到PDK里几乎所有的目录。所以,理解目录结构,不是让你背下来,而是让你知道:遇到问题该去哪个目录找答案。

好了,这一章就讲到这里。下一章我们聊聊如何搭建PDK环境,包括环境变量设置、库文件安装等实操内容。到时候我会手把手带你走一遍。