40纳米工艺PDK中PMOS器件层次查看与结构识别方法
2026/9/1 11:49:09 网站建设 项目流程

刚接触模拟IC设计时,很多人拿到一个新的工艺PDK,第一反应是直接打开 Virtuoso,新建一个 Library,拖一个 PMOS 进去,开始跑 DC 仿真。等仿真结果不对,再回头去查器件模型、查版图层次,才发现自己对 PDK 的理解只停留在“会调用器件”这一层。

真正的问题在于:会调用器件,不代表会识别器件。尤其是 Smic40nm 这类工艺节点,PDK 里一个 PMOS 不仅仅是一个 schematic 符号,它背后包含 CDF 参数、Pcell 版图、模型文件、物理验证规则和层次定义。如果不懂层次查看与结构分析,你很可能在电路设计阶段用了错误的宽长比,在版图阶段画错了器件方向,甚至在 LVS 阶段反复报错却找不到原因。

这篇文章以 Smic40nm PDK 中的 PMOS 器件为例,完整梳理一套“从 Library 到 Cellview、从 Schematic 到 Layout、从参数到层次”的识别方法。读完你会知道:PDK 器件到底由哪些部分组成、在 Virtuoso 里如何逐层展开查看、Pcell 打散后能看到什么、以及如何通过层次结构分析确认一个 PMOS 的真实实现。

1. 这篇文章真正要解决的问题

很多工程师使用 PDK 的方式是“黑盒式”的。Symbol 放在原理图上,L 和 W 填进去,仿真能跑通就完事。但遇到下面这些场景,黑盒式用法会立刻失效:

  • 电路需要特殊尺寸的 PMOS,比如很大的 W,你直接填入 100u,但 PDK 中的 Pcell 是否支持?
  • 版图阶段要对 PMOS 做 finger 拆分、dummy 添加,但你不清楚 Pcell 内部结构,只能手动画,结果 LVS 报错。
  • 后仿提取寄生参数时,发现器件识别错误,根本原因是 PDK 层次和提取文件不匹配。
  • 你需要把 Schematic 中的 PMOS 参数设置同步到 Symbol 上,却不知道参数在哪个层定义。

这背后是一个共性痛点:很多人没有建立“PDK 器件 = 符号 + 参数 + 版图 + 模型 + 规则”的完整映射关系

这篇文章要解决的,正是这个映射问题。以 Smic40nm PDK 的 PMOS 为例,逐步拆解每个层次视图,讲清楚每个层次存储什么信息,以及在实际工程中怎么用。读完你能做到三件事:

  • 快速定位 PDK 中某个器件的所有相关文件与视图;
  • 通过 Virtuoso 的层次查看功能,分析 PMOS 的 Pcell 内部结构和参数定义;
  • 在 Layout 中识别 PMOS 的有源区、栅、阱、金属层连线以及寄生结构,避免 LVS 和寄生提取阶段踩坑。

2. PDK 是什么,以及 Smic40nm PDK 的特殊性

2.1 PDK 的本质

PDK(Process Design Kit,工艺设计套件)是晶圆厂提供给设计者的“接口层”。它把工艺制造信息翻译成 EDA 工具能够识别的格式。一个完整 PDK 通常包含:

  • 原理图符号库(Schematic Symbol)
  • 参数化单元(Pcell)
  • 工艺文件(tf、display 文件)
  • 模型文件(Spectre、HSPICE、ELDO 格式)
  • 物理验证规则(DRC、LVS、RC extraction)
  • 回调函数(Callbacks)与 CDF 参数定义

可以这样理解:PDK 是工艺厂和设计者之间的“翻译器”。工艺厂知道每一层怎么制造,设计者只知道电路怎么画,PDK 把这两者的语言统一起来。

2.2 Smic40nm 节点关注点

Smic40nm 是 SMIC 的 40nm 逻辑工艺节点,在消费电子、物联网、射频前端等领域的流片量都很大。相比更小节点(如 28nm、16nm、7nm),40nm 的物理效应没那么极端,但仍然存在几个需要认真对待的问题:

  • 栅氧厚度变薄,器件的开启电压和漏电需靠模型准确描述;
  • 阱和阈值电压调节注入的层次规划复杂,版图阶段如果层次用错,LVS 会在杂质层次上反复报警;
  • 金属层数多,PMOS 的源漏接入方式直接影响寄生电阻。

因此,在 40nm PDK 中,识别器件不能只看“这个符号是不是 PMOS”,还要关注它的阱类型、阈值类型、偏置条件以及匹配结构。

2.3 PMOS 和 NMOS 的核心区别

PMOS 和 NMOS 都是 MOS 晶体管,但导电机制、载流子类型、阱结构、模型参数完全不同。

对比维度NMOSPMOS
载流子类型电子空穴
导电沟道在 P 型衬底上形成的 N 型沟道在 N 阱中形成的 P 型沟道
阈值电压方向正阈值,增强型 NMOS 的 Vth 为正值负阈值,增强型 PMOS 的 Vth 为负值
导通条件Vgs 大于 VthVgs 小于 Vth(绝对值超过阈值)
阱类型P 阱或 P 衬底N 阱
寄生二极管从衬底到源漏的 PN 结从 N 阱到源漏的 PN 结,方向相反

在版图上看,PMOS 器件的外围通常会被一圈 N 阱包围,并且 N 阱的接触孔需要接到最高电位(通常是 VDD)。这也是我们在层次查看时判断一个器件是 PMOS 还是 NMOS 的重要依据。

3. 环境准备与前置条件

要完成后续操作,需要一套可用的模拟 IC 设计环境。

3.1 软件环境

  • 主流 EDA 工具:Cadence Virtuoso IC6.1.8 或更新的版本,用于原理图、版图和 Pcell 查看;
  • 仿真工具:Cadence Spectre 或 MMSIM,用于器件特性验证;
  • 物理验证工具:Siemens Calibre,用于 DRC/LVS/PEX,部分项目也用 Assura 或 PVS;
  • PDK 版本:Smic40nm PDK,版本以项目实际使用的为准。

这里不强调具体版本号,因为不同代工厂、不同 PDK 版本在安装路径、文件和配置方式上会有差异。本文的通用思路是:先确认 PDK 的安装目录结构和配置文件位置,再决定如何在 EDA 工具中加载

3.2 关键配置文件

在 .cdsinit 或 .cdsenv 中,通常需要包含:

# 加载 PDK 初始化文件示例 setenv SMIC40_PDK_PATH /path/to/smic40_pdk load(strcat(SMIC40_PDK_PATH "/libInit.il"))

具体路径以你本机的 PDK 安装位置为准。加载成功后,Virtuoso 的 Library Manager 中会出现 PDK 基础库,通常包含smic40lsmic40ll之类的工艺库,以及analogLibbasic等通用库。

3.3 打开 PDK 器件的视图

以 PMOS 为例,在 Virtuoso Library Manager 中,进入包含 PMOS 器件的库,选择某个名为pmospch的单元,右键可以看到以下视图:

  • schematic:晶体管的原理图符号与管脚定义;
  • symbol:用于原理图调用的图形符号;
  • layout:Pcell 对应的版图视图;
  • spectre:如果 PDK 额外提供了子电路模型,可能也会有;
  • extracted:从版图提取的视图,通常在后仿阶段出现。

右键打开这些视图,就开始了真正的层次查看。

4. 核心流程拆解:PMOS 层次查看五步法

4.1 第一步:看 Schematic,建立电气连接认知

打开 PMOS 的schematic视图,先不要急着看版图,而是观察管脚。一个标准 PMOS 至少有四个端口:

  • D(Drain)
  • G(Gate)
  • S(Source)
  • B(Bulk)

在 Smic40nm PDK 中,PMOS 的 Bulk 通常连接到 N 阱。有些 PDK 还会提供五个端口的版本,即把源和衬底分别引出,方便做深 N 阱隔离。实际使用时,需要根据电路要求选择合适的器件类型。

4.2 第二步:打开 Symbol,理解 CDF 参数

Symbol 视图只是图形,关键信息在 CDF 参数里。双击原理图中的 PMOS 符号,或者打开 CDF 编辑器,可以看到以下核心参数:

参数名含义典型设置
Model name模型名称pch_25udl20 或类似命名,表示低漏电器件
W沟道宽度根据电路实际设置
L沟道长度根据电路实际设置
Fingers叉指数量默认 1
Multiplier器件倍增数原理图级并联
Dummy是否添加虚拟器件影响匹配精度

这些参数不是随意填写的。Pcell 在实例化时,会根据 W、L、Fingers 自动生成对应的版图。如果看到某个参数是灰色的,说明它受 PDK 回调函数控制,你改不了,或者改了也不生效。

4.3 第三步:打开 Layout,识别版图层次

在 Virtuoso 中打开 PMOS 的layout视图。这是 Pcell 动态生成的结果,你看到的不是固定图形,而是由工艺层组成的实际物理结构。需要重点识别以下层次:

  • 有源区层(Active / OD)
  • 多晶硅层(Poly)
  • N 阱层(NWELL)
  • 注入层(NIMP/PIMP,决定 Vth 调节)
  • 接触孔(Contact / CT)
  • 金属层(M1、M2 等)

以 PMOS 为例,它的版图结构通常是:NWELL 覆盖整个器件区域,Poly 横跨有源区形成沟道,有源区在 Poly 两侧分别形成 Source 和 Drain,P+ 注入层覆盖源漏区域。查找 NWELL 层是确认 PMOS 的最快方法。

4.4 第四步:打散 Pcell,查看内部真实结构

很多工程师不敢打散 Pcell,担心打散后无法恢复。实际上,在 Virtuoso 中打散是安全的,只要不开保存并写回原库,就不会破坏 PDK 库文件。推荐的做法是:先在 PDK 库中选中 PMOS,点击Edit -> Hierarchy -> Flatten Pcell,只打散当前实例,并把打散后的结果存到自己的 work library 中。

打散后你会看到:

  • Pcell 实际上是多层图形堆叠的集合;
  • 每一层图形都有明确的 Layer Name 和 Layer Number;
  • 孔、金属连线、器件边界都是由程序生成的;
  • 一旦打散,这些图形就失去了参数联动能力,所以不要用打散后的 Pcell 做最终版图。

这一步的意义是让你看懂 Pcell 的生成逻辑,而不是让你替代 Pcell。

4.5 第五步:结合剖面图验证理解

PDK 通常附带 Process Cross-section 文档,展示器件的纵向剖面结构。把 Layout 顶视图和剖面图对照起来看,就能建立“哪一层出图形,对应制造中的哪一步”的认知。

举例来说,PMOS 栅氧下方是 NWELL,沟道区域有多晶硅栅,Poly 两侧的源漏区有高浓度 P 型注入。剖面图上这部分看得非常清楚。

5. 完整命令与代码示例

下面提供几个常用 Skill 脚本,可以在 Virtuoso CIW 中直接执行,提高层次查看效率。

5.1 批量打开 Pcell 并读取 CDF 参数

; 文件路径:CIW 或 Skill Load 后执行 ; 功能:遍历指定库中所有 pmos cell,打印 CDF 参数名称和值 libName = "smic40l" cellName = "pmos" libId = ddGetObj(libName) cellId = libId->cells foreach(cell cellId if(cell->name == cellName then cdfId = cdfGetBaseCell(cellId) foreach(param cdfId~>parameters printf("Parameter: %s Default: %s\n" param->name param~>defValue) ) ) )

这段代码读取 Smic40nm PDK 中 PMOS 的 CDF 参数定义。修改libNamecellName后可以用于其他器件。

5.2 打开 Layout 并列出所有层次

; 文件路径:CIW ; 功能:打开当前设计中的 layout,列出所有图形对象对应的层 cvId = geGetEditCellView() if(cvId~>layout then foreach(shape cvId~>shapes printf("Shape type = %s, Layer = %s, Purpose = %s\n" shape~>objType shape~>layerName shape~>purpose) ) else printf("当前 cellview 不是 layout,请先打开发版图。\n") )

这个脚本对于检查 Pcell 打散后的层次非常有效。运行后你会看到 Poly、Active、NWELL、IMP、CT、M1 等层名以及它们的 purpose(drawing、pin、label等)。

5.3 查看当前所用技术文件的层次列表

; 文件路径:CIW ; 功能:打印技术文件中所有 layer 名称与编号的对应关系 techId = techGetTechFile(geGetEditCellView()) layers = techGetLayerMap(techId) foreach(layer layers printf("LayerName: %s Number: %d\n" layer~>name layer~>layerNum) )

这个命令特别适合排查“为什么我在 Layout 里看不到某层”的问题。如果技术文件里本来就有该层,但 Layer 窗口没显示,就是显示文件的问题,而不是数据缺失。

5.4 检查版图中 PMOS 的识别结果

在 LVS 前后,我们常常想确认被识别出的器件数量。用 Calibre 的 RVE 工具可以查看,也可以用 Skill 检查:

; 文件路径:CIW ; 功能:检查当前版图中被 LVS 识别的 p_mos 子电路数量(依赖 LVS 输出) ; 说明:以下函数仅为示意,实际需结合 calibre 的 execute 结果 ; 使用 calibre -rve 查看结果文件,或直接在 virtuoso 中加载 svdb 报告

更可靠的方式是在calibre -lvs跑完后,打开.lvs.report文件,查看:

pmos 器件识别数量:xx nmos 器件识别数量:xx

6. 运行结果与效果验证

6.1 CDF 检查结果

执行 5.1 的脚本后,CIW 窗口会输出大量参数名。正常情况下你应该能看到:

  • model:指向 PDK 提供的 Spectre 模型名;
  • wl:默认为工艺最小或一个保守值;
  • fingermultiplier:默认 1;
  • dummy:可能有nonesourceDrain等选项。

如果输出的参数列表很少,或根本没有 PMOS 相关参数,说明 PDK 加载有问题,应检查.cdsinit是否成功执行。

6.2 Layout 层次显示验证

执行 5.2 的脚本时,如果当前打开的是打散后的版图,输出中应包含多行 Layer 名称和 Purpose。例如:

Shape type = rect, Layer = NWELL, Purpose = drawing Shape type = rect, Layer = ACTIVE, Purpose = drawing Shape type = path, Layer = POLY1, Purpose = drawing Shape type = rect, Layer = PIMP, Purpose = drawing Shape type = rect, Layer = CONT, Purpose = drawing

出现 NWELL 和 PIMP,基本可以确认这是 PMOS。如果只看到 ACTIVE 和 POLY 而没有注入层,说明 LVS 可能没有正确识别源漏区域。

6.3 判断是否成功的方法

  • 如果已经加载 PDK 并成功打开 Pcell,说明环境配置正确;
  • 如果打开 Layout 后能通过 Layer 窗口切换各层,并能看到清晰的器件图形,说明显示文件正常;
  • 如果做一次 LVS 后 PMOS 和 NMOS 识别数量正确,说明模型、层次、规则文件三者匹配。

如果上述任何一步失败,优先检查 PDK 安装是否正确,而不是改设计。

7. 常见问题与排查思路

问题现象可能原因排查方式解决方案
Library Manager 中看不到 PDK 库.cdsinit 未加载 libInit.il检查 CIW 启动日志手动 load 对应 libInit.il
打开 Layout 后只有框没有图形显示文件(display.drf)未加载输入dfSetDisplayDrf检查当前显示文件正确加载 PDK 的 display.drf
Pcell 打散后无法恢复在 PDK 原库中保存了打散结果不要在原库保存;确认是否备份从 PDK 重新调用或从备份恢复
CDF 参数修改后版图不变回调函数未触发检查 CDF callback 是否有报错重新打开 cellview 或执行回调刷新
LVS 识别出的 PMOS 数量为 0层次映射文件 layers.map 缺失查看 LVS 报告中的 layer mapping 段在 Calibre 规则中正确设置 layers.map
器件方向或 Source/Drain 不一致版图接线方式导致 PDK 源漏自动交换检查 LVS 报告中的 connectivity手动指定 S/D 或调整 layout 接线
金属层太多,看不清 PMOS 本体显示层开关未设置好使用 Layer 窗口关闭高层金属只显示 Active、Poly、NWELL、IMP 等层
打散后 LVS 通过,但参数提取异常Dummy 或 Base 层次缺失在 LVS 结果中查看器件参数避免直接用打散结果做最终提取

8. 最佳实践与工程建议

8.1 永远保留一份 Pcell 原样件

不要直接在 PDK 库中修改或打散 Pcell。建议把 PDK 库设为只读,所有实验在 Work Library 中进行。

8.2 建立器件参数记录表

使用脚本批量提取 PDK 参数,并人工核对几个关键参数(如 W、L、finger、dummy)后,记录到项目文档中。这样做有两个好处:

  • 多人协作时避免参数被随意修改;
  • 做仿真前能快速确认 PDK 版本和器件类型是否匹配。

可以用 Python 读取 PDK 参数记录表,做批量对比:

# 文件路径:check_pdk_params.py # 功能:读取导出的 PDK 参数表,输出关键参数摘要 import openpyxl wb = openpyxl.load_workbook("pdk_params.xlsx") ws = wb.active headers = [cell.value for cell in ws[1]] print("表头:", headers) for row in ws.iter_rows(min_row=2, values_only=True): print(row)

这里的重点是工程可追溯性,参数表需要随 PDK 版本一起维护。

8.3 用 LVS 作为最终验证标准

层次查看只是手段,LVS 通过才是识别的最终验证。跑 LVS 时,关注器件数量、器件宽长比、连接关系三类结果。如果 LVS 报告中 PMOS 数量与原理图一致,且 W/L 比值符合预期,说明你对 PDK 层次的认知是正确的。

8.4 注意工艺文档中的保密要求

PDK 文件、工艺剖面图、层定义文档通常都有保密要求。分析结果分享给同事时,只保留必要信息,不要大范围扩散完整的 PDK 文件结构。

8.5 在 Schematic 与 Symbol 之间同步参数

有些项目需要把 Schematic 中的 PMOS 参数同步到 Symbol 上,方便原理图阅读。可以在 CDF 中查看参数是否绑定到 instance,如果没有,可以通过 callback 或 Skill 脚本同步,但不要手工改 Symbol 上的文本,否则一旦参数更新,文本不会自动更新。

9. 总结与后续学习方向

本文围绕 Smic40nm PDK 的 PMOS 器件,梳理了一套完整的层次查看与结构分析方法。核心是五步法:看 Schematic 建立连接认知、看 Symbol 理解 CDF 参数、打开发 Layout 识别工艺层、打散 Pcell 查看内部结构、结合剖面图对照验证。这个方法不局限于 Smic40nm,任何 PDK 都可以用同样思路拆解,只是层次名称和文件结构不同。

进一步深入学习,可以从几个方向展开:

  • 研究 PDK 中提供的 Skill callback 代码,理解 W、L、Finger 参数如何自动驱动版图更新;
  • 阅读 PDK 自带的 LVS rule deck,理解器件识别时用到了哪些层;
  • 在 Calibre 中做一次完整的 PEX 提取,观察寄生参数如何随器件层次和走线变化;
  • 尝试用 Skill 脚本批量检查整个 library 中的器件参数,建立项目级参数审计流程。

建议收藏这篇思路,等下次拿到新工艺 PDK,按照五步法走一遍,会比直接翻文档效率高很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询