ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

SMIC 40nm PDK中PMOS器件识别与版图层次分析

2026/9/2 22:42:57 拓冰建站 浏览量
SMIC 40nm PDK中PMOS器件识别与版图层次分析 SMIC 40nm 工艺节点的 PDK 用起来并不复杂真正花时间的往往是第一步在库里找到正确的 PMOS 器件看清它的层次结构确认模型、版图和参数是否对得上。很多新手不是不会跑仿真而是被器件识别卡住了——打开 PDK 库看到一堆 Cell不知道哪个是 PMOS打开版图看到一堆层分不清哪一层是注入、哪一层是有源区LVS 报错后更是一头雾水。这篇文章以 PMOS 为例把 SMIC 40nm PDK 中器件识别的完整思路讲清楚。内容覆盖 PDK 目录结构、Library Manager 中定位 PMOS 器件、版图层次拆解、Cross-Section 剖面分析、参数批处理脚本以及常见排错方法。全程基于 Cadence Virtuoso 环境适合刚接触模拟版图设计、需要做器件级仿真或者正在学习 PDK 用法的工程师。1. PDK 器件识别的核心能力速览能力项说明工艺节点SMIC 40nm具体器件分为普通逻辑器件、IO 器件、RF 器件等PDK 主要作用提供器件模型、版图层次定义、PCELL、DRC/LVS 规则文件目标器件类型PMOS包含基础 PMOS、阱内器件、不同耐压器件等设计工具Cadence Virtuoso IC 6.1.8 或更高版本配合 MMSIM/Spectre 仿真器层次查看方法Library Manager 定位 Cell - 打开 Layout View - LSW 层次拆解 - Cross-Section 剖面观察结构分析重点NWELL、DIFF、PIMP、POLY、CO、M1 等层次的关系参数识别重点W、L、Finger、Multiplier、Model Name批量辅助可通过 Skill 脚本批量导出 CDF 参数通过 Ocean 脚本批量仿真适合读者模拟电路设计、版图设计、PDK 学习、工艺器件分析人员有一点要提前说明不同 PDK 版本和不同器件类型具体 Cell 名称、层次名称、CDF 参数命名会有差异。本文给出的是通用识别方法遇到具体库时以 PDK 文档和 Library 中的实际内容为准。2. 适用场景与使用边界PDK 器件识别不是一个单独的动作而是一套方法。它在下面几个场景中非常有用模拟电路设计前期需要从 PDK 中选一个合适的 PMOS 器件并进行参数扫描。版图设计阶段需要确认 PMOS 的版图层次结构与设计规则是否匹配。电路与版图联合验证时需要通过 LVS 确认电路中使用的 PMOS 与版图中画出来的 PMOS 是同一个器件。学习半导体工艺时通过 PDK 版图层次反推器件剖面结构理解 PMOS 为什么需要在 N 阱里做。同样这个方法也有边界。它解决的是“识别和查看”的问题不适合用来替代 DRM 规则手册。所有尺寸、间距、包裹关系必须以 PDK 提供的 Design Rule 文档为准。PDK 本身属于 Foundry 授权的设计资料使用时要注意授权范围不要把 PDK 文件扩散到未授权环境也不要在公开渠道贴出完整 PDK 内容。3. SMIC 40nm PDK 环境准备在开始识别器件之前先确认环境是完整的。一个可正常工作的 PDK 环境至少包括下面几部分Linux 工作站建议使用 RHEL/CentOS 或 Ubuntu 等常用版本。Cadence Virtuoso版本取决于 PDK 支持的 IC 版本。SMIC 40nm PDK 安装包包含 library、model、layer 规则等。仿真器如 Spectre用于后续验证器件电气特性。合理的磁盘空间PDK 库和 model 文件通常有几个 GB 到十几 GB。PDK 安装完成后目录结构大致如下具体名称以实际解压结果为准# 查看 PDK 目录结构注意替换为实际路径 tree -L 2 ~/smic40_pdk常见的子目录包括model、pcell、layer、doc、calibre等。其中model目录存放器件模型文件doc目录存放 DRM 和 PDK 使用手册layer目录定义 GDS 层次映射。建议先阅读 PDK 自带的 README 和安装说明确认环境变量是否配置好。在 Virtuoso 中识别器件前要确认 PDK 库已经加载到 Library Manager 中。如果打开 Library Manager 后看不到 SMIC 40nm PDK 库通常是cds.lib文件中没有包含 PDK 库路径。检查当前工作目录下的cds.libgrep -i smic cds.lib如果没有任何输出需要在cds.lib中追加 PDK 库路径。路径要写实际安装位置。环境准备完成后下一步就是从库里定位 PMOS 器件。这一步最有价值的地方在于你要能够区分 PDK 中不同后缀、不同前缀的 Cell而不是靠猜。4. 从 PDK 库中定位 PMOS 器件打开 Library Manager展开 SMIC 40nm PDK 对应的库会看到大量 Cell。PMOS 器件的 Cell 命名通常有规律比如以pch、pmos、p_开头NMOS 则对应nch、nmos、n_开头。RF 器件、高压器件、IO 器件通常有不同的后缀比如pch_rf、pch_25等。定位 PMOS 的具体步骤在 Library Manager 中确定 PDK 库名称。在 Cell 列表中筛选名称包含p和mos的 Cell。打开 Cell 的 CDF 参数查看modelName和type字段。打开 Schematic View确认器件符号和连接关系。打开 Layout View确认版图层次和尺寸。CDF 参数中的modelName是最可靠的识别依据。比如一个 PMOS 器件的modelName可能是pch或pmos这类名称type字段会显示为p。如果只看 Cell 名称不确定就打开 CDF 确认。这里要特别提一点SMIC 40nm PDK 里的 PMOS 和 NMOS 在版图层次上最核心的区别在于 N WellN 阱和注入类型。PMOS 本身是一个放在 N 阱里的器件源漏区是 P 注入NMOS 则放在 P 型衬底或 P Well 中源漏区是 N 注入。这个物理结构决定了版图中你必须能找到明显的 NWELL 层次。5. PMOS 器件的层次查看5.1 打开 PMOS 版图与 LSW在 Library Manager 中选中目标 PMOS Cell右键选择Open打开LayoutView。进入版图编辑器后左侧或右侧会显示 LSWLayers Select Window。LSW 中列出当前工艺的所有可用层次包括显示层和物理层。先做一步操作在 LSW 的过滤框中输入“DIFF”、“POLY”、“NWELL”、“PIMP”把关键层次单独调出来。这样可以避免屏幕上其他层次干扰视线。Smic40nm PDK 的层次名称可能与标准层次略有不同但不管叫什么名字PMOS 版图的核心层次一般包括层次名称作用判断要点NWELL / N阱PMOS 的衬底区域PMOS 必须被 NWELL 包裹DIFF / 有源区源漏有源区形成沟道和源漏区域PIMP / P 注入PMOS 源漏掺杂识别 PMOS 的关键注入层POLY / 栅多晶硅栅极跨在有源区上形成沟道CO / 接触孔连接有源区和金属层识别源漏金属连接M1 / 金属一层内部互连区分不同端子的走线打开版图后先关闭所有层次再逐个打开这样可以更清楚地看到每一层在器件中承担的角色。5.2 逐层拆解 PMOS 结构选中版图窗口按ShiftF可以全屏显示。在 LSW 中只打开 NWELL你会看到器件底部有一个大块的 N 阱区域。PMOS 整个器件体都在这块 N 阱里。然后打开 DIFF有源区会显示为有源区的图形。在 PMOS 中有源区被 P 注入覆盖。打开 PIMP 后P 注入层覆盖了源漏有源区但通常不会覆盖整个 NWELL。打开 POLY多晶硅栅跨过有源区把有源区分成源区和漏区。此时可以观察栅极与有源区边界的关系确认沟道长度方向。接着打开 CO 和 M1查看源、漏、栅极的金属连接关系。这个逐层拆解的过程本质上是在心里建立起一个三维剖面图。PMOS 的纵向结构自下而上大致是P 型衬底 - NWELL - P 源漏区 / P 型沟道区 - POLY 栅极 - 接触孔 - 金属层。5.3 使用 Cross-Section 查看器件剖面Cadence Virtuoso 提供了 Cross-Section 功能可以直接在版图上切出剖面图。操作方法是在版图编辑器中选中 PMOS 器件区域然后在菜单栏找到Verify-Cross-Section或者使用对应的快捷键。如果 PDK 中定义了剖面层次映射工具会自动生成剖面图。剖面图的价值在于它把二维版图还原成三维结构。你可以在剖面图上看到NWELL 和 P 型衬底的边界。P 注入与 NWELL 的关系。POLY 栅极下方是否有薄栅氧。接触孔是否落到有源区表面。金属层与接触孔的对准关系。如果 Cross-Section 没有生成完整剖面通常是层次映射不完整。这个时候不要强行依赖工具回到 LSW 逐层查看关键层次结合 DRM 文档中的截面图一样能完成结构分析。6. PMOS 结构分析与参数解读层次查看完成后接下来是通过参数理解器件结构。Virtuoso 中选中 PMOS 器件按Q打开属性窗口或者通过 CDF 查看详细参数。对 PMOS 来说最核心的参数是W沟道宽度。L沟道长度。Finger指状栅的个数。Multiplier器件并联个数。Model Name对应的器件模型名称。Total Width总宽度通常等于W × Finger × Multiplier。从结构分析角度这些参数和版图层次是一一对应的版图中一个 POLY 栅条跨过有源区就是一个 Finger。多个 Finger 并联版图上会看到多条 POLY 平行跨过同一个有源区条。Multiplier 则对应多个独立的器件有源区可能通过金属连接并联在一起。W决定了有源区在沟道宽度方向的延伸长度而L对应 POLY 栅条在有源区上的宽度。在分析源漏关系时PMOS 的源漏在物理上是对称的。识别哪个是源、哪个是漏更多是看电路连接关系而不是版图结构本身。如果强行在版图上区分往往会把对称器件搞反。正确做法是回到 Schematic确认源端和漏端的连接再回到版图中通过金属走线和层次连接确认。结构分析完成后建议做一次 LVS 验证。LVS 会把电路中的 PMOS 器件参数和版图中的 PMOS 器件参数自动比对。如果 W、L、Finger 不匹配LVS 会直接报错。这是判断器件识别是否正确的最权威手段。7. 批量提取参数与脚本辅助分析当只查看一个 PMOS 器件时用 GUI 操作就够了。但如果需要从 PDK 中批量提取多个 PMOS 器件的参数或者对不同尺寸的 PMOS 做特性扫描建议用脚本。7.1 使用 Skill 脚本批量读取 CDF 参数Cadence Virtuoso 支持 Skill 脚本。下面的脚本可以遍历当前库中所有 Cell读取 PMOS 器件的 CDF 参数并打印出来; 批量读取当前库中所有 PMOS 的 CDF 参数 ; 将 libName 替换为实际 PDK 库名 libName Smic40PDK cellList ddGetObj(libName)~cells~name foreach( cell cellList if( rexMatchp(pch.* cell) then dbCDF cdfGetCDF( ddGetObj(libName cell) ) modelName dbCDF~modelName~value wVal dbCDF~w~value lVal dbCDF~l~value printf(%s model%s W%f L%f\n cell modelName wVal lVal) ) )这段脚本会筛选名称以pch开头的 Cell输出模型名、W、L 参数。实际使用时需要根据 PDK 中的 CDF 参数命名调整。不同 PDK 的 CDF 参数名可能是w、width、l、length也可能是别的名称。打开 CDF 看一眼真实参数名再进行匹配。7.2 使用 Ocean 脚本批量仿真 PMOS 特性参数确认后用 Ocean 脚本批量跑 PMOS 的 I-V 特性扫描比较方便。以下脚本假设已经有 testbench需要替换为实际电路和模型路径; 批量仿真 PMOS 不同 W/L 的 I-V 曲线 simulator( spectre ) design( ~/sim/pmos_iv_test/input.scs ) modelFile( ~/smic40_pdk/model/pmos_model.scs ) ; 设置 W 扫描范围 W_list list( 1u 2u 4u ) L_list list( 40n 80n ) foreach( wVal W_list foreach( lVal L_list ; 这里需要替换为 testbench 中实际参数名 desVar( w wVal ) desVar( l lVal ) tempRun sprintf( nil pmos_W%f_L%f wVal lVal ) run( tempRun ) ; 打印仿真结果摘要 printf(Done: W%f L%f\n wVal lVal) ) )Ocean 脚本可以直接在 Virtuoso 的 CIW 中执行也可以通过命令行工具批量运行。实际仿真时间取决于电路规模和扫描点数。这个脚本的核心意义在于把器件尺寸枚举和仿真执行自动化减少手动操作。7.3 使用 Python 解析模型文件中的 PMOS 模型名如果你更熟悉 Python也可以直接从 PDK 的模型文件中提取器件信息。模型文件一般是以.scs、.lib或.mdl结尾的文本文件PMOS 模型名有规律可循import re # 读取模型文件提取 PMOS 模型名 model_file pmos_model.scs pmos_models [] with open(model_file, r, encodingutf-8, errorsignore) as f: for line in f: # 以 p 开头、包含 mos 的行通常是模型定义行 if re.search(r\b(pch|pmos|pfet)\b, line, re.IGNORECASE): pmos_models.append(line.strip()) print(找到的 PMOS 模型定义行) for m in pmos_models[:50]: print(m)用 Python 解析模型文件的好处是可以在不启动 Virtuoso 的情况下快速了解 PDK 提供了哪些 PMOS 模型。不过要注意PDK 模型文件通常是加密或经过特殊处理的解析出来可能只有模型名看不到内部参数。这个时候不要强行解密或修改文件直接用 PDK 文档里提供的说明即可。8. 仿真与验证中的资源观察PMOS 器件识别完成后通常要跑一轮仿真来验证器件特性。这里的资源观察重点放在三件事上仿真时间、内存占用和输出文件体积。仿真时长单个 PMOS 的 DC 扫描即使扫描点数很多通常也很快。但如果使用 Ocean 脚本批量仿真多种 W/L 组合总时间是单次仿真时间乘以组合数量。建议先用少量组合跑通流程再扩展到全量扫描。内存占用Spectre 仿真器在跑瞬态仿真或大尺寸 RF 器件仿真时内存占用会明显上升。SMIC 40nm PDK 的模型精度较高遇到大器件阵列时可以在仿真设置中关闭不必要的寄生提取或者降低精度选项来减少内存消耗。输出文件体积批量仿真会产生大量.psf或.raw文件。建议在仿真目录下按日期和参数组合建立子目录避免所有输出堆积在同一个目录中。另外环境变量也会影响 PDK 工具链的运行。常见做法是在启动 Virtuoso 前检查PATH、LD_LIBRARY_PATH、CDS_LIC_FILE等变量。如果 PMOS 模型文件路径配置错误仿真时会直接提示找不到模型这是典型的环境变量问题而不是器件识别问题。9. 常见问题与排查方法PDK 器件识别过程中最容易遇到的问题基本集中在库加载、层次显示、模型匹配三个方面。下面这个表格整理了几种高发问题问题现象可能原因排查方式解决方案Library Manager 中看不到 PDK 库cds.lib缺少库路径检查cds.lib内容在cds.lib中添加 PDK 库路径打开 PDK Cell 时报错PDK 安装不完整或环境变量未配置查看报错日志确认 PDK 安装目录重新安装或修正环境变量LSW 中看不到 NWELL、PIMP 等层层次映射文件未加载检查 PDK 的 TF 文件是否被正常加载在 Virtuoso 中重新加载 PDK TF 文件分不清 PMOS 和 NMOS 版图NMOS 没有 NWELL 包裹PMOS 有 NWELL分别打开两者的版图关闭其他层只开 NWELL用 NWELL 和注入层次做区分Cross-Section 剖面图空白层次映射不完整或未选中有效区域在版图中框选完整的 PMOS 器件改为逐层查看 LSW 层次结合 DRM 做分析LVS 报 PMOS 尺寸不匹配CDF 参数与版图实际尺寸不一致检查 CDF 中的 W/L/Finger 参数修正版图或 CDF 参数保证一致仿真时找不到 PMOS 模型模型文件路径没写对查看仿真日志确认 model file 是否加载成功修正 model 文件路径或在仿真设置中添加相应模型库批量脚本报 CDF 参数为 nil参数名拼写错误打开 CDF 窗口确认真实参数名修改脚本中的参数名版图显示层次颜色混乱多个 PDK 或旧 TF 文件冲突检查当前加载的 TF 文件是否为 SMIC 40nm PDK统一使用 PDK 自带的 TF 文件Ocean 批量仿真卡住扫描范围过大或仿真模型精度太高查看仿真日志确认当前跑到哪个参数组合缩小扫描点或降低仿真精度选项如果遇到不在列表中的错误通用排查思路是先看日志再看模型文件最后看环境变量。不要一上来就重装 PDK。大多数问题都是路径和配置问题重装解决不了根本原因。10. 最佳实践与总结PDK 器件识别这件事做一次容易做规范难。结合日常经验给你几条建议第一次接触 SMIC 40nm PDK 时先把 NWELL、DIFF、PIMP、POLY、CO、M1 这六个层次的显示方式固定下来。把所有层次的显示颜色调成容易区分的颜色并把其他不常用层次隐藏。这样一个 PMOS 的版图形状就能很快筛出来。把 PMOS 的 CDF 参数截图保存到一个固定的设计笔记目录。这样后续做仿真、画版图、跑 LVS 时可以直接对比参数不用反复打开 PDK 库翻找。遇到不确定的器件结构不要只看版图一定要结合 Cross-Section 剖面图和 DRM 文档截面图。版图是二维的剖面图才能显示阱、注入层、栅氧的纵向关系。批量仿真和批量提取参数时强烈建议用脚本。手工改参数做 20 组仿真很容易出错而且出错后不好定位。用 Skill 脚本或 Ocean 脚本可以把参数枚举和结果记录统一管理。建立自己的器件识别清单。我自己的清单里包含这些字段Cell 名称、Model Name、器件类型、W/L 范围、所在库、备注。这样后面做电路设计选型时直接在清单里找比在 Library Manager 里一个 Cell 一个 Cell 打开效率高很多。回到标题本身以 PMOS 为例的层次查看与结构分析核心其实就三句话。第一在 PDK 库中找到 PMOS 器件用 CDF 的 modelName 确认身份。第二在版图里逐层拆解 NWELL、DIFF、PIMP、POLY理解 PMOS 的剖面结构。第三用 LVS 和仿真验证参数与结构是否一致。把这三步练熟SMIC 40nm PDK 里其他器件的识别方法也就是换汤不换药。下次再打开一个新的 PDK 库建议用一个 PMOS 器件先走一遍这个流程能少走很多弯路。