ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

tsmc18rf工艺库在Cadence Virtuoso中安装配置全攻略

tsmc18rf工艺库在Cadence Virtuoso中安装配置全攻略 先说个很多新手都容易撞上的场景你把 tsmc18rf 工艺库压缩包拷到 Linux 机器里解压一看几十个文件夹和文件名字又长又像cds.lib、display.drf、tsmc18rf.tf、models、calibre……当下就懵了。好一点的情况是网上搜到一段 cds.lib 写法填进去还是打不开差一点的情况是 Virtuoso 里库列表全是灰的或者 DRC/LVS 菜单根本没加载出来。这些话听着很耳熟吧这篇东西就把 tsmc18rf 工艺库安装这件事从头到尾讲清楚包括每个文件是干什么的、为什么要那样配置、报错之后按什么顺序排查以及我这些年踩过之后觉得最值得写下来的几个坑。需要先说清楚tsmc18rf 是 0.18um RF CMOS 工艺的 PDK主要用在 Cadence Virtuoso 环境下做射频/模拟电路设计也会有部分人在 ADS 里用到它的模型。安装它本身不复杂但流程里的细节非常多而且很多问题跟硬件无关纯粹是文件路径、库格式、显示资源这些基础配置没对齐。下面按实际操作的顺序来。1. 拿到 PDK 后先不要急着解压环境和文件清单确认1.1 tsmc18rf 压缩包里通常有哪些内容tsmc18rf 的发行包常见命名是tsmc18rf_xxx.tar.gz或tsmc18rf_xxx.zip不同版本、不同渠道拿到的包内容会有一点差异但核心目录基本一致。解压之后一般会看到这些目录/文件用途cds.libCadence 库路径定义文件声明了库名到目录的映射tsmc18rf.tfTechnology File版图层次、layer number、电学规则都靠它display.drf显示资源文件决定版图里每一层用什么颜色、线型、填充图案layers.mapGDSII 导入/导出时用的图层映射表cdslib/或cdslib/里面放着 tsmc18rf、tsmc18rfAnalog、tsmc18rf_RF 等可加载的设计库models/仿真模型通常再分 spectre、hspice、ads 几个子目录calibre/Calibre 规则文件DRC/LVS/PEX 相关skill/或tsmc18rf.ilPcell 和菜单用的 Skill 脚本docs/工艺文档、模型说明、安装说明你不需要全部看懂但至少要能在里面找到两个东西一是tsmc18rf.tf二是包含tsmc18rf目录的库文件夹。后续配置都是围绕这两个核心展开的。不同发行包的库名可能略有不同比如有的叫tsmc18rfDig_6M有的叫tsmc18rfDig_6M_4X还有tsmc18rf_RF、tsmc18rf_RF2这种区分。不要死记名字安装的时候要以你实际解压出来的目录名为准。1.2 检查 Cadence 工具版本与库格式很多人在这一步跳过去直接配 cds.lib结果库列表里全是灰色或者提示 “Unable to open technology library”回过来查半天其实根子在库格式上。tsmc18rf 是个老资历 PDK最早的版本面向 IC5141、IC610 这一代工具设计库格式可能是 CDBA也可能是 OpenAccessOA。在 IC6.1.8、IC23.1 这些较新的 Virtuoso 里默认启动模式是 OA如果库本身是 CDBA就需要用virtuoso -cdba方式启动或者在 OA 模式下先做库格式转换。启动 Virtuoso 之前可以在终端确认一下版本which virtuoso virtuoso -version如果是老版本指令icfb对应的启动命令可能是icfb -cdba新版本 Cadence 通常已经移到virtuoso指令下启动参数大同小异。检查库格式可以直接看压缩包里有没有oa开头的目录或.cdslib标记。更直接的办法是解压后看cdslib/tsmc18rf目录下有没有tech.db这种 OA 文件如果有说明是 OA 库如果是一堆cell、layer目录且没有 OA 标记大多就是 CDBA。这步不确认后边会反复踩坑。我自己装过不下五次 tsmc18rf至少两次卡在这个库格式问题上所以多说一句启动 Virtuoso 时的库模式必须和 PDK 库格式匹配否则加载阶段就断了。1.3 安装目录规划的三条原则安装目录的选择直接关系到后续几个月、几年里会不会频繁出问题。总结三条原则路径不要有中文、不要有空格。很多学生用户 home 目录是/home/张三Virtuoso 这种老牌 EDA 工具对非 ASCII 路径支持很差可能在加载 Pcell 时莫名失败。建议统一放到类似/data/EDA/PDK/tsmc18rf这种纯英文路径下。固定在一个所有设计项目都能访问的位置。不要解压到某个临时目录也不要跟着某个项目走。PDK 是基础设施不是项目资源。如果多人共用处理好权限。建议解压后统一chmod -R 755保证其他成员可读可执行。如果之后还要跑 Calibre 这类外部工具要确保工具有权限读取规则文件。规划完目录才开始正式安装。2. 正式安装解压、放置、注册库定义2.1 解压并固定安装路径这里给出一个我习惯用的标准步骤假设你拿到的压缩包叫tsmc18rf_PDK.tar.gz最终安装目录是/data/EDA/PDK/tsmc18rf。mkdir -p /data/EDA/PDK cp tsmc18rf_PDK.tar.gz /data/EDA/PDK/ cd /data/EDA/PDK tar -xzvf tsmc18rf_PDK.tar.gz ls -l如果是 zip 格式就用unzip tsmc18rf_PDK.zip -d /data/EDA/PDK/解压之后先把权限处理一下chmod -R 755 /data/EDA/PDK/tsmc18rf这里解释一下为什么要chmod -R 755PDK 里有很多 Skill 脚本、模型文件、规则文件Virtuoso 进程需要读它们Calibre 需要执行某些脚本。755 表示文件所有者可读写执行同组和其他用户可读执行既满足共享需求又不会让所有人都能改你的 PDK。如果你用 root 解压过记得用chown -R 你的用户名:你的组把属主改回来否则普通用户启动 Virtuoso 会碰到权限报错。这一步完成之后可以先用tree或者find快速看一下实际目录结构记下几个关键路径工艺文件路径通常叫tsmc18rf.tf库目录路径通常是cdslib/tsmc18rf模型文件路径可能在models/spectre/下Skill 脚本路径通常叫tsmc18rf.il有时候是skill/目录2.2 在 cds.lib 里写入库定义可直接复制Cadence 不认识系统里自动安装的 PDK它只认cds.lib里定义的库名和路径。每个 Virtuoso 工程目录下都需要有一个cds.lib启动时被读取并加载。如果你在某个目录下启动 Virtuoso它首先在当前目录找cds.lib找不到就找用户 home 下的~/.cdsinit这是后话再找不到就只剩自带库。把下面的内容手动写进你自己的cds.lib注意路径改成你实际的DEFINE tsmc18rf /data/EDA/PDK/tsmc18rf/cdslib/tsmc18rf DEFINE tsmc18rfAnalog /data/EDA/PDK/tsmc18rf/cdslib/tsmc18rfAnalog DEFINE tsmc18rfDig_6M /data/EDA/PDK/tsmc18rf/cdslib/tsmc18rfDig_6M DEFINE tsmc18rf_RF /data/EDA/PDK/tsmc18rf/cdslib/tsmc18rf_RF DEFINE tsmc18rf_RF2 /data/EDA/PDK/tsmc18rf/cdslib/tsmc18rf_RF2如果发行包里自带cds.lib也可以直接用INCLUDEINCLUDE /data/EDA/PDK/tsmc18rf/cds.lib但我要提醒你很多版本的 PDK 自带cds.lib内部写的是DEFINE tsmc18rf ./cdslib/tsmc18rf这种相对路径。这种相对路径只有在当前工作目录恰好是 PDK 根目录时才有效一旦你在项目目录启动 Virtuoso就全废了。所以我的建议是优先用手动DEFINE绝对路径不要过度依赖INCLUDE。另外DEFINE后面跟的库名要和 Library Manager 里显示的名字一致大小写也要一致。Linux 区分大小写tsmc18rf和Tsmc18rf是两个完全不同的名字报错时最容易忽略的就是这里。写完cds.lib后再检查一件事确保里面对应的目录真实存在。可以用ls /data/EDA/PDK/tsmc18rf/cdslib/如果你的版本里目录名不同比如多了个tsmc18rf_RF3就一并加上。2.3 启动 Virtuoso 并确认库能打开准备工作做完进入你的工程目录启动cd /data/EDA/work virtuoso 如果前面判断出库是 CDBA 格式而你的工具是 IC6 以上版本启动时加上-cdbavirtuoso -cdba 启动后CIWCommand Interpreter Window会刷一堆日志正常情况下能看到类似Loading tsmc18rf.cxt tsmc18rf menu loaded接着打开 Library Manager如果cds.lib写对了应该能看到tsmc18rf、tsmc18rfAnalog等库。可以双击展开一个库比如打开tsmc18rfAnalog里的nmos_rfcell如果能弹出 cellview说明最基本的库注册成功了。到这里只完成了 60%剩下的显示文件、仿真模型、Skill 菜单配置如果没做版图和仿真依然会出问题。继续往下看。3. 显示文件和其他 PDK 资源的加载版图工具才不闹脾气3.1 display.drf 与 tf 文件的关系很多刚接触版图的人分不清tsmc18rf.tf和display.drf以为两个文件都是“图层配置”其实分工完全不同。tsmc18rf.tf是 Technology File定义的是版图工具底层的工艺信息layer number、purpose pair、电学规则、via 定义、设计规则约束等。它决定你这个库能画哪些层、这些层之间有什么关系。display.drf是显示资源文件决定的是视觉呈现每一层用什么颜色、线型、填充图案、是否可被选中。只加载 tf 不加载 display.drf最典型的表现是版图编辑器能打开但所有图层看起来都一样或者很多层是灰的、不可选择的画一个矩形甚至分不清画在哪一层。所以安装 PDK 时这两个文件必须配套加载。在 Virtuoso 里图层显示并不是全局自动生效的。如果你启动后发现版图里 layer 全是默认的青色方块那大概率就是 display.drf 没有自动加载。3.2 通过 .cdsinit 与环境变量自动加载最省事也最稳定的方案是在用户 home 目录或工程目录下维护一个.cdsinit文件启动 Virtuoso 时它会自动执行。在.cdsinit里加上 display.drf 的加载语句load(/data/EDA/PDK/tsmc18rf/display.drf)这样每次启动 VirtuosoCIW 日志里会出现类似Loading display resource file /data/EDA/PDK/tsmc18rf/display.drf如果你不想用.cdsinit也可以把display.drf复制到启动 Virtuoso 的工作目录。Cadence 默认会读取当前目录下的display.drf但我不推荐这个方式多项目切换时每个目录都放一份后面 PDK 升级了你得挨个项目替换极易出现新旧显示文件混乱。另一个容易混淆的点是DISPLAY环境变量。在 Linux 里DISPLAY通常指向 X Server例如:0.0它跟版图显示文件没有直接关系。所以网上有些帖子说“设置 DISPLAY 环境变量指向 display.drf”这种说法会误导人至少不能让它覆盖原有的 X 显示配置。正确的自动加载方式就是.cdsinit里的load或者使用envSetVal把 layout 显示的默认文件指定好envSetVal(layout display string /data/EDA/PDK/tsmc18rf/display.drf)两种方法都可以我通常会把load和envSetVal同时写上双保险。注意.cdsinit里如果已经加载了别的工艺库 display 文件后加载的会覆盖先加载的同名 layer 设置所以多个 PDK 并存时要留意顺序。加载完成后你可以打开一个版图 cellview按E进入 display options随便点几个 layer 看看颜色和 fill pattern 是否分得开。如果还是全长得差不多就在 CIW 里手动执行一次load(/data/EDA/PDK/tsmc18rf/display.drf)然后选择需要更新的图层基本就能恢复正常。3.3 layers.map 在 GDS 导入导出里的作用layers.map是另一个容易被人忽略的文件。它的作用是把 GDSII 文件里的层号和 Virtuoso 里的层名对应起来。比如流片时掩膜厂给的 GDS 里layer 31是 M1而 Virtuoso 里 M1 的 layer number 也是 31但有时候因为不同 PDK 定义不同GDS 导入后图层会错位M1 变成 M2或者 via 跑到 metall 上去了。layers.map通常在启动 Virtuoso 后执行File - Import - GDS时在 Layer Map 那一栏选择。也有一些版本支持在.cdsinit里预先设置。如果只是画版图和做 LVS这个文件不紧急但如果你要从外部拿 GDS 进来做比对或者自己导 GDS 给加工厂一定要确认它被正确指定。常见的做法是把 PDK 里的layers.map作为模板再按项目需要微调。4. 仿真模型文件配置不止是要把路径填进去4.1 模型文件分布在 models 目录下的规律库能打开只是第一步真正跑仿真时你还会遇到“找不到模型”的报错。原因往往出在模型文件没加载或者 section 选错。tsmc18rf 的模型文件一般放在models/spectre/、models/hspice/、models/ads/这些子目录里文件名带工艺角信息常见的是crn18rf_3v3_6lm.scs或.pmSpectre 格式模型crn18rf_3v3_6lm.libHSpice 格式模型库个别版本还带.ahdl文件用于某些射频器件.scs和.lib这类文件里通常用.section或.lib定义多个工艺角corner比如typical、ss、ff。安装时不要只把整个文件路径填进去还得把 section 名选对否则你会得到一组默认值或直接报模型不存在。可以先看一下模型文件里定义了哪些 sectiongrep -i section /data/EDA/PDK/tsmc18rf/models/spectre/crn18rf_3v3_6lm.scs以实际版本输出的 section 名为准不同发行包差异很大。4.2 Spectre 仿真器下 Model Library 的正确写法在 Virtuoso 的 ADE L / ADE XL / ADE Explorer 中添加模型库的路径是固定的Setup - Model Libraries弹出的表格里通常有两列需要填Model File 的绝对路径和 Section。以我常见的一个配置为例Model File: /data/EDA/PDK/tsmc18rf/models/spectre/crn18rf_3v3_6lm.scs Section: typical_3v3填完后直接跑一遍 DC 仿真如果模型正常加载netlist 里会自动生成类似simulator langspectre include /data/EDA/PDK/tsmc18rf/models/spectre/crn18rf_3v3_6lm.scs如果你不想通过界面操作也可以在 netlist 里手动加这段include。不过手动加的时候要注意spectre 的include路径必须用绝对路径且不要出现空格。之前有个朋友把 PDK 放在/Users/xxx/My PDK/...里spectre 每次都在路径带空格那儿卡死最后把目录改名才解决。另外如果库名里带了RF后缀比如你在 schematic 里用的是tsmc18rf_RF库里的器件那么对应的射频模型也要加载。有些人只加载了普通 MOS 模型结果电感、变压器这些器件在仿真里没有任何模型定义输出结果自然是不对的。检查方法是在 ADE 的 Simulation - Netlist 里看看生成的网表确认 RF 器件对应的include文件是否都在。4.3 在 HSpice/ADS 环境里引用模型的补充说明部分人会把它用在 HSpice 或 ADS 里。HSpice 的模型库引用方式比较传统网表顶部加.lib /data/EDA/PDK/tsmc18rf/models/hspice/crn18rf_3v3_6lm.lib tt这里tt是工艺角名具体叫什么要以文件里的.lib行定义为准。HSpice 对路径同样敏感建议用加引号的绝对路径。ADS 的用法会麻烦一点因为 ADS 本身不是基于 Cadence 的 PDK 体系tsmc18rf 的模型在 ADS 里要用的话通常是在 Schematic 里用类似pspice或spectre的模型组件或者直接导入模型文件到 Workspace。这个流程不同 ADS 版本差异较大如果你主要用 Cadence可以先跳过这块如果你就是要在 ADS 里用建议重点查一下模型文件里有没有ads子目录有的话优先用那个目录下的版本而不是拿 Cadence 的.scs硬套函数支持和参数映射都会有差别。5. 安装过程中最常见的报错和逐条排查链路5.1 库是灰的/打不开分类检查 cds.lib遇到最多的问题就是 Library Manager 里tsmc18rf库是灰色的点开没有 cell或者报 “The library tsmc18rf does not exist in the library search path”。先别急着怀疑压缩包坏了绝大多数是路径问题。按这个顺序排查确认cds.lib里DEFINE的库名和你 Library Manager 里看到的库名完全一致包括大小写。确认DEFINE后面的路径是绝对路径且目录真实存在。用ls验证不要相信压缩包里的提示。确认你启动 Virtuoso 时所在的目录确实读到了这份cds.lib。CIW 窗口底部会显示Loading cds.lib file ...的路径看一下是不是你想的那份。确认目录权限。执行ls -l /data/EDA/PDK/tsmc18rf/cdslib/看用户能否进入目录。如果库图标是灰色的但能展开那更可能是库格式或 Pcell 加载问题。右键库 - Properties看看库类型是不是cdb。如果是而在 IC6 的 OA 模式下打不开回到启动命令加-cdba或者做 OA 转换。这里不推荐立刻做转换因为 tsmc18rf 的某些老 Pcell 在转换后可能出现参数框错乱先用-cdba启动最简单。5.2 Skill 脚本报错或菜单不出现版本兼容性有的 PDK 解压后库能打开但 Virtuoso 菜单栏里没有出现 tsmc18rf 相关的菜单或者打开 Pcell 时提示*Error* load: cant access file /data/EDA/PDK/tsmc18rf/skill/tsmc18rf.il这种情况十有八九是.cdsinit里没有加载 Skill 脚本。tsmc18rf 的菜单、部分 Pcell 回调函数都写在 Skill 脚本里没有加载这些脚本库里的 cell 能显示但行为不完整。在.cdsinit里补上load(/data/EDA/PDK/tsmc18rf/tsmc18rf.il)如果发行包的 Skill 脚本在子目录比如skill/tsmc18rf.il就把路径写成对应的。还有一类情况是 IC 版本太新老 PDK 的 Skill 脚本有不兼容调用了。报错可能是一堆*Error* undefined function。这种要具体看报错信息优先检查是否有针对新版 Cadence 的补丁脚本。如果找不到一个无奈但有效的方案是用虚拟机装一个旧版 Cadence 来跑这套 PDK这也是为什么很多学校实验室里 IC6.1.8 还在一线服役的原因。5.3 启动时报 Cannot open display resource fileCIW 启动日志里出现WARNING: Cannot open display resource file /users/xxx/display.drf这个警告说明 Virtuoso 没能在当前工作目录找到 display 文件或者显示环境配置指向了不存在的路径。它不会让 Virtuoso 崩溃但会让你的版图体验很差。解决方法就是在.cdsinit里用绝对路径加载 PDK 自己的display.drf或者把display.drf软链接到你的类库目录ln -s /data/EDA/PDK/tsmc18rf/display.drf /data/EDA/work/display.drf软链接比复制好维护。以后再更新 PDK只要指向不变新内容会自动生效。5.4 仿真提示 model 未定义仿真报错类型很多比如 Spectre 提示ERROR (SFE-23): The model n18 is not defined in the model file.或者WARNING (SPECTRE-16922): The model n_rf does not exist in the model file.先别急着怀疑 PDK 坏了按这个思路检查Model Library 里添加的路径是否正确尤其是文件名后缀。有的版本是.scs有的版本把.scs和.pm混着放填错了文件自然找不到模型。Section 是否选对。很多网表里模型名是n18但只有typicalsection 下才定义它如果你的 section 写成了ss模型定义名可能变成了n18_ss之类自然找不到。确认你要用的器件到底属于哪个库。tsmc18rfAnalog和tsmc18rf_RF下同名的器件可能对应不同的模型比如普通 MOS 和 RF MOS它们的模型名和加载路径都不一样。排查时可以打开模型文件直接搜索grep -n ^subckt n18 /data/EDA/PDK/tsmc18rf/models/spectre/crn18rf_3v3_6lm.scs grep -n n18 /data/EDA/PDK/tsmc18rf/models/spectre/crn18rf_3v3_6lm.scs | head -20看到真实的模型定义名再跟刚才报错提示里的名字对比基本就能定位。6. 安装完成后的收尾与多项目使用技巧6.1 把常用设置写进 .cdsinit 和 .bashrc安装成功不是终点而是起点。我见过太多人装完当天能打开库第二天换个终端、换个工程又起不来了。原因就是所有配置只在“当时那个终端”或“当时那个目录”生效没有固化下来。建议在~/.cdsinit里把以下东西固定住let(( ) load(/data/EDA/PDK/tsmc18rf/tsmc18rf.il) load(/data/EDA/PDK/tsmc18rf/display.drf) )再把启动流程写进~/.bashrcalias cds18/opt/cadence/IC6.1.8/tools/bin/virtuoso -cdba export PDK_ROOT/data/EDA/PDK/tsmc18rf以后每次进 Virtuoso 直接敲cds18在当前目录生成或者在工程目录里维护一份cds.lib不需要每次手动输一大串启动参数。这种“一条命令进入设计环境”的习惯在多项目并发时尤其省事。6.2 多版本工艺库共存时的管理方法很多设计环境里不止一套 PDK。有的项目用 tsmc18rf有的项目用 tsmc180还有 65nm、40nm 的库。如果所有这些库都写进同一个全局cds.lib很容易出现同名冲突。比如两套 PDK 都定义了一个叫analogLib的库名后加载的会把先加载的顶掉最终 Library Manager 里只显示其中一个甚至两个都异常。我的做法是每个项目目录维护各自的cds.lib不搞“一份 cds.lib 全局通吃”。项目需要哪套 PDK就在该项目的cds.lib里DEFINE那几套库。这样不会互相污染也好管理。如果确实需要在一个环境里同时用多套 PDK那就用INCLUDE把各自的 cds.lib 引进来并且注意不要重复DEFINE同一个库名不同 PDK 的 technology file 如果都叫tsmc18rf.tf在同一个 Virtuoso session 里可能冲突尽量每个项目单独启动多个 PDK 同时加载还有一个严重隐患display.drf会互相覆盖。A 库的 display 文件在后加载可能把 B 库的图层显示全部改成 A 的风格最终 B 库的版图看起来一团糟。所以多 PDK 环境下显示文件也要按库分开管理使用.cdsinit里按项目切换或者干脆每个工艺库配套独立的.cdsinit模板。6.3 验证安装成功的最小测试流程装完之后不要急着画正式电路我习惯先跑一个“最小测试”把各个模块都验证一遍不然等到关键节点才发现 Pcell 参数框是空的那才叫头疼。最小测试建议做三步库和 Pcell 验证在 Library Manager 打开tsmc18rfAnalog新建一个 schematic cellview拉一个nmos_rf和一个res进去。双击器件如果参数框正常弹出说明 Skill 脚本和 Pcell 回调加载成功。版图和显示验证打开一个 layout cellview随便画一个 M1 矩形按shiftf放大看颜色和填充确认 M1、M2、POLY、NWELL 这些 layer 都能明显区分。再用Create - Via打一个 via如果 via 定义齐全说明 technology file 加载正确。仿真验证在 schematic 里搭一个最简单的 MOS 二极管接法跑 DC 仿真确保模型能正常加载MOS 管工作在预计的饱和区。如果 DC 结果为零或者报 model 未定义立刻回到第四步检查模型路径。这三个测试不花多少时间但能把安装流程中最大的三个坑——库注册、显示文件、仿真模型——全部覆盖到。我个人的习惯是在做完这三步之后把启动命令、cds.lib和.cdsinit一起备份到项目文档里下次换电脑、换服务器照着这份记录十分钟就能把环境重新搭起来。安装 tsmc18rf 这件事本身不难难的是让它在你的工作流里稳定工作而稳定工作的前提就是这些平时不起眼的细节都落在实处。
返回列表