SMIC 55nm RF PDK在Virtuoso中的安装与实战指南
简介中芯国际55nm CMOS工艺PDK设计套件面向基于Cadence平台的模拟、射频与混合信号IC设计工程师与研究人员。包内含器件模型、DRC/LVS规则文件、RC提取配置、StarRC相关工具及RF专用模型等能够支撑从原理图仿真到版图验证的完整设计流程。压缩包共2000个文件主要类型包括tag、oa、png、dm、dat等其中oa为Cadence数据库文件png为版图截图便于查看dat为规则或模型数据整体约810MB。内容预览中可见SMIC_CalDRC与LVS规则、mosfets.Cat模型、release_note等关键文件目录模块划分清晰如XRC_ORI、models、emxkit、DRC_ORI、LVS_ORI等便于设计者按需取用。已有5284人学习下载适合需要快速搭建55nm RF PDK设计环境、进行工艺验证与仿真的进阶用户。 上周帮团队在Cadence Virtuoso里折腾一个PDK挂载问题他们手里就握着这样一串文件名smic55ll_ulp_rf_09121825_oa_cds_v1.16_0.zip。说实话这名字第一眼看过去像随机字符串但干这行久了扫一眼基本就能判断出这是SMIC 55纳米低漏电超低功耗射频工艺的PDK基于OAOpenAccess数据库格式专门给Cadence工具链用的。很多刚入门的模拟射频工程师拿到这种zip包后第一反应是直接解压然后往cds.lib里加路径结果一堆Pcell错误、图层丢失、模型找不到最后只能找前辈或代工厂FAE救火。这篇文章就从文件名拆解开始把这类工艺PDK的安装、目录结构、RF器件使用和新版本兼容问题一次讲透适合正在做射频前端、低功耗模拟链路以及被Virtuoso库里各种诡异报错折腾到头秃的版图工程师们参考。1. 文件名里藏着的工艺平台信息smic55ll_ulp_rf 逐段拆解代工厂的PDK通常不叫“55nm_pdk_v1.zip”这种通俗名字而是用一串由工艺节点、器件选项、数据库格式、工具平台、版本号拼接成的代号。看懂这串代号相当于在安装之前就知道了这个包里是什么类型的东西以及该往哪个工具链上挂。1.1 55LL与ULP不只是“低功耗”三个字55ll指SMIC 55纳米工艺里的LLLow Leakage变体主要优化目标是降低静态功耗和漏电流适合IoT、可穿戴设备里那些对电池续航极其敏感的芯片。ulp一般对应Ultra Low Power和LL可能同时存在也可能指额外的超低功耗器件选项。不管具体定义如何核心就是这包不是普通数字逻辑工艺PDK而是面向低功耗模拟/射频混合信号设计的版本里面会带低阈值、高阈值、耗尽型等不同Vt类型的晶体管参数还会配套相应的spectre/hspice模型文件。我在实际项目里看到过不少人忽略ll和ulp的区别随手拿一个普通逻辑PDK的techfile直接attach到新库上结果版图图层映射完全错乱DRC/LVS跑出来的错误根本无法解释。原因很简单不同工艺变体在well注入、氧化层厚度、器件几何约束上都会有差异PDK里的图层定义、design rule deck、模型corner都不通用。1.2 RF、09121825、oa_cds和版本号的真实含义rf可能是整个文件名里最能区分定位的字段。它不是指“射频封装”或“射频板级”而是指代工厂在PDK里专门加入了RF器件模型和物理验证deck比如RF LDMOS虽然55nm不一定有、MIM电容、电感、片上传输线、变容器、射频MOS管的大信号模型等。如果你的项目只是做低频模拟这个字段用处不大但如果你在画射频开关、LNA、PA或VCO没有RF模型库仿真结果基本是空中楼阁。09121825这串数字常见格式是日期戳比如2018年9月12日或2018年9月25日也可能是产品批次/代码。它告诉我们这个包是什么时候从代工厂发布的对追溯已知问题很有用。曾经有个团队拿着一个老版本PDK连spectre模型都出现了器件参数缺失最后查出来是日期戳对应的早期版本发布记录里明确写了一个已知bug升级到后续版本就解决了。oa_cds指的是OpenAccess数据库加Cadence Design System环境。简单理解OA是Cadence工具链使用的标准数据库格式cds则代表面向Cadence Virtuoso系列平台而不是Synopsys的Pcell或Mentor的某套环境。v1.16_0是PDK版本号每次代工厂发布新版本都会改这里使用前最好去官网或FAE渠道确认一下release note。2. 解压之后别急着用PDK目录结构与安装前的关键认知很多工程师拿到zip包以后习惯性双击解压看到一堆文件夹就开始迷茫。其实PDK目录结构是高度规律化的花五分钟扫一眼就能判断这个包全不全、该不该继续装下去。2.1 PDK目录里的常见面孔techfile、pcell、skill、lib.defs一个合格的代工厂PDK解压后至少能看到以下几类内容类型典型文件/目录作用工艺文件techfile.tf、display.drf、layer.map定义图层、颜色、层次映射参数化单元pcells/、pcellPcell/Pcell源码和编译后的单元用于生成可变尺寸的MOS、电阻、电容Skill脚本skill/、pcellSetup.il、libInit.il在Cadence里加载PDK环境、初始化Pcell模型文件models/、spectre/、hspice/各corner下的器件模型供仿真器调用物理验证calibre/、assura/、qrc/DRC/LVS rule deck和寄生参数提取文件库定义cds.lib、lib.defs告诉工具哪些库存在以及库路径拿到包之后先看techfile.tf和pcellSetup.il是否存在这两个文件是Virtuoso识别工艺和生成Pcell的关键。如果缺了后期大概率会出现PDK库能打开但器件全部“无法创建”的情况。2.2 OA与CDS版本为什么这个包要叫oa_cds老工程师应该记得早期的SMIC PDK还会提供oa_cds和oa_synopsys等不同版本甚至同一个工艺会出现CDS和SNPS两个安装包。选择依据很简单你的主流程是Cadence Virtuoso还是Synopsys Custom Compiler。oa_cds意味着它是按Cadence的OA数据库规范打包的Pcell用Cadence的Skill/CDF框架实现工具链解析时会直接识别。这里特别提醒不要以为有了oa_cds就万事大吉。OA本身也有版本差异——IC615、IC6.1.8、IC23.1Virtuoso Studio对OA的API兼容性不完全相同。有的老PDK里包含的Pcell是用老版本Skill写的在新版Virtuoso Studio里直接load会报nil或函数未定义。遇到这种情况先检查PDK官方文档里写的支持版本再检查工具链版本不要改PDK脚本硬刚不然改到最后都不知道是模型错了还是脚本错了。3. Virtuoso里挂载这个PDK的完整流程与实测记录知道结构以后真正开始操作。这里记录一套从解压到跑通Pcell的完整流程以及我在多个版本Virtuoso里实测踩过的问题。3.1 环境变量与cds.lib挂库之前的准备工作先找个安静、没有特殊字符的绝对路径解压比如/home/work/tech/smic55ll_ulp_rf_v1160。我见过有人把PDK直接放在桌面带空格和中文的目录里结果Cadence启动时路径解析直接崩掉这种低级错误排查起来非常费时间。解压命令比较简单mkdir -p /home/work/tech cd /home/work/tech unzip smic55ll_ulp_rf_09121825_oa_cds_v1.16_0.zip然后检查解压出来的目录权限。PDK里的Skill脚本和Pcell文件如果没有读权限Virtuoso加载时会静默失败最典型的症状是pcellSetup.il执行完但没有产生任何菜单。建议统一给目录加上可读和可执行权限chmod -R arX /home/work/tech/smic55ll_ulp_rf_09121825_oa_cds_v1.16_0接下来是环境变量。不同的PDK对环境变量的要求不一样最通用的是设置PDK根路径export SMIC_PDK_DIR/home/work/tech/smic55ll_ulp_rf_09121825_oa_cds_v1.16_0如果PDK自带的skill脚本里写死了这个变量名不设的话加载后会找不到techfile.tf。项目启动Virtuoso时还要在项目的cds.lib里引用PDK库。简单做法INCLUDE /home/work/tech/smic55ll_ulp_rf_09121825_oa_cds_v1.16_0/cds.lib3.2 从解压到跑通Pcell逐步操作记录启动Virtuoso后基本流程是这样的在CIW窗口的File菜单里找到Load执行PDK自带的初始化脚本。命名通常是pcellSetup.il、init.il或libInit.il。执行命令等价于CIW输入load /home/work/tech/.../pcellSetup.il。检查Library Manager里是否出现了PDK库比如S55LLULP_RF或S55LLULP_Base。如果没出现多半是cds.lib里的路径没写对。新建一个自己的Library并attach到PDK工艺库上。操作路径是Library Manager → Edit → Library Properties → Attach选择PDK库作为参考工艺库。在Create Instance里输入器件名比如nch、pch、rnpos、电容等看看能否自动弹出CDF参数表单。我是建议先建一个Testbench库只放一个最小的nch器件然后立刻跑一次spectre仿真确认model library找到了、DC工作点正常。这一步后面所有复杂电路的基础基础通了后面LNA、VCO的仿真才有意义。3.3 那些年我们都踩过的权限和路径坑PDK这类东西最大的特点是目录路径、权限、环境变量组合不对报错不会马上出现而是等你画完版图或者跑仿真时才猛然冒出来。最常见的坑是csh和bash环境变量不兼容。老一代PDK的安装脚本很多是csh写法如果你在bash里执行source会出现一堆无法识别命令。我自己的习惯是看文件头如果里面写的是#! /bin/csh就老老实实用csh执行或者在bash里先切换到csh再source。路径坑也值得说。有人喜欢把PDK目录软链到/home/designer/pdk这种短路径下理论上不影响但有的PDK脚本会调用getcwd或系统库解析真实路径软链会导致找不到相对路径下的模型文件。所以我在团队里统一规定PDK解压路径必须使用真实物理路径不搞软链。还有一个常见问题是Permission denied但你不是root也没法直接改PDK目录所有权限。这时请检查目录及其上层目录是否有x权限有时是父目录没有执行权限导致工具无法进入次级目录。4. 射频PDK不只是多几个器件真正要留意的RF特性与仿真链路如果只是要做个低功耗运放普通模拟PDK就够了。但这个包的名字里带了rf说明它要服务的是射频链路设计。这部分内容不是简单多几个电感符号而是整套仿真和验证方法的差异。4.1 RF器件与电感模型这个PDK区别于普通数字PDK的地方RF PDK里最有特色的通常是这几类内容RF MOSFET除了常规的宽长比、指条数参数外还会提供栅电阻、寄生电容、版图相关性的优化选项方便搭建片上LNA、混频器输入级。片上电感通常有八边形、方形、对称差分式等几种结构PDK会给出电感值、Q值、自谐振频率的仿真模型甚至支持调用EM仿真工具提取电磁特性。MIM电容和变容器在射频匹配网络里用得很多PDK对这些器件的寄生和温度系数会有更详细的模型定义。用这些器件的时候要注意Pcell里生成的instance默认带一些寄生态比如电感的底层metal pattern和中间抽头。这些在低频仿真里可能看不出来但在谐波平衡或S参数仿真里影响很大。我看过有人直接在Virtuoso里调用一个电感symbol然后一股脑把其他模型全设成理想结果仿真出来LNA增益和实际芯片差了快5dB。后来发现是PDK的电感模型需要关联一个专门的model library而项目的spectre.ini里根本没include进去。所以射频仿真前请重点确认PDK release note里提到的三个东西corner模型文件、电感EM模型文件、QRC寄生提取文件。4.2 与Cadence Virtuoso Studio等新环境的兼容问题近年Cadence已经用Virtuoso Studio作为新版本的统称很多老工程师发现自己手里的旧PDK包在新版本里装不上了。这不是PDK坏了而是Skill API版本和OA版本有代差。比如在Virtuoso Studio基于IC23.1上加载老版本PDK的pcellSetup.il可能报unbound variable或function undefined。遇到这种情况第一选择是去代工厂官网找对应新版本PDK如果没有新版本再考虑用兼容模式启动工具比如指定老版本的skill编译器。千万不要自己去改PDK源码PDK里的Pcell脚本上千行改一个函数名可能引起连锁报错。我之前在用某个老版本SMIC 55RF PDK时就是因为它只支持到IC6.1.8团队最后直接在服务器上多部署了一套IC6.1.8专门用来做老库维护。虽然工具版本低一点但至少不会被Pcell问题卡住。顺带提一句有些同事会把rfsoc47dr rf convert这类数据转换任务和模拟PDK一起混着做。如果工作流里既有射频采样SoC的数字/射频数据转换又需要搭模拟前端建议在项目初始化时就把PDK版本和数据转换流程隔离开避免两套工具链的环境变量互相污染。5. 误操作恢复与日常维护主目录rm -rf之后的补救思路在Linux下搞设计rm -rf大概是最刺激的命令之一。网上也经常有人问“主目录rm rf了怎么办”。这种事我在实验室里见了好几次包括有人手滑在$HOME目录下敲了带递归的删除命令结果整个PDK环境和项目文件一起消失了。5.1 当你在主目录手滑执行了rm -rf先说最坏情况下的应急思路。如果你刚刚删除了文件且还有进程占用该文件比如Virtuoso还开着那么文件其实还没完全从磁盘上释放。在Linux下可以通过/proc/PID/fd路径找回已被打开但被删除的文件。步骤大概是# 找到占用PDK文件的进程PID lsof L1 | grep smic55ll_ulp_rf # 查看该进程打开的文件描述符对应的删除文件 ls -l /proc/PID/fd # 将对应的fd复制回来 cp /proc/PID/fd/17 /home/work/tech/recover_file.tf这个方法只能找回那些正被进程占用的文件如果文件已经彻底关闭并且没有备份恢复难度极大。所以相比恢复我更建议从源头预防# 给rm设置交互或保险别名 alias rmrm -i alias rmrfrm -rfI5.2 防止PDK重装的快捷备份手法PDK本身是可以通过zip重新下载的真正麻烦的是你在PDK上做的自定义pcell参数、display资源修改、以及自己写的工艺attach记录。所以日常维护时别去动PDK原始目录里的东西把自己修改过的配置单独放一目录。最简单的备份是打包PDK目录但PDK体积动辄几个GB天天打包不现实。我会在项目里维护一个pdk_custom/目录存放自己修改过的display.drf自定义的cds.lib片段常用的 model library include 配置每次PDK升级前导出的Pcell清单这样即使PDK目录被误删重新解压官方zip后把自定义内容放回去就能快速恢复工作环境不用靠记忆去重做每一步配置。6. 版本升级与多项目环境的避坑清单PDK版本升级是个系统工程不能只在旧项目里解压新包后直接换库。v1.16_0这个版本号听起来只是小版本变化但放到一个新项目里你可能要重新接受整套rule deck和模型corner。6.1 v1.16相比旧版本的变化点代工厂一般会随PDK发布一个release_note里面写了相比前一版本的变更。这些变更可能包括更新了某些RF器件的寄生模型参数也许会让仿真结果更好看也可能让原设计裕量不足。修复了之前Pcell在特定工艺角下的CDF参数错误。更新了calibre rule deck导致原有版图在某些图层上多出新的DRC违例。所以升级版本后我建议不要直接在老项目里刷新PDK。正确做法是在新目录下解压新包挂载到测试库跑一遍最小设计规则验证、一次DC仿真、一次Pcell实例生成确认没问题后再把工作环境切过去。6.2 一个项目的标准PDK检查清单每次替新项目初始化PDK环境时我都会按这个清单走techfile.tf能否被Virtuoso正常加载图层显示是否和PDK文档一致。新建library并attach后能否从PDK库里调用至少3种器件普通逻辑管、射频管、电感。对普通管做DC仿真确认model library包含且模型名能正确解析。对电感受一个SP仿真确认输出S参数不是零或断点。跑一次DRC确认rule deck路径没有报错。跑一次LVS确认版图和原理图能正常对应。备份一份cds.lib和display.drf到项目目录避免下次启动时找不着。这套清单看着无聊但能救命。我见过一个项目跑了一个月最后发现模型corner一直用的旧作废文件整个仿真的功耗和增益曲线都偏乐观问题就出在安装PDK时没有做第3步检查。最后分享一个我自己的小习惯每次解压完PDK先不急着重装系统用find . -name *.il把PDK目录下所有Skill脚本列出来快速扫一遍。很多时候Pcell无法创建、菜单不出现的根因其实藏在某个脚本的加载路径里。提前知道这些东西能省掉后面大量的试错时间。本文还有配套的精品资源点击获取