ARTICLE DETAIL

资讯详情

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

TSMC65nm下LC振荡器设计全流程:从原理图到GDSII

TSMC65nm下LC振荡器设计全流程:从原理图到GDSII 前段时间在TSMC65nm工艺下做一个LC振荡器从原理图一路推到GDSII中间和Virtuoso、Pcell反复斗智斗勇光是在Pcell参数和ADE仿真设置上就耗费了不少时间。很多问题翻遍官方文档也找不到直接答案全靠反复试验和找老同事请教才解决。这篇内容把这条流程完整走一遍从Virtuoso的原理图搭建、ADE仿真里的工艺角设置、PWL波形文件导入到Pcell的使用与参数显示问题再到EMX嵌入、DRC/LVS/PEX验证最后Stream Out导出GDSII全程记录我踩过的坑和最终能跑通的方案。如果你正在做模拟或混合信号相关项目尤其是用TSMC65nm或类似工艺节点做振荡器、PLL这类模块这篇内容应该能帮你少走不少弯路。1. 项目整体设计与思路拆解1.1 为什么选VirtuosoPcell这套组合先直接回答一个很多人会问的问题65nm算不上特别先进的节点为什么做版图时一定要强调Virtuoso配合Pcell而不是像做标准数字流程那样靠APR工具全自动推原因在于模拟前端和数字后端的工作模式完全不同。65nm工艺下核心MOS器件的物理栅长已经缩小到五十几纳米单纯靠手动绘制polygon来搭一个管子根本不现实。DRC通过的难度只是一方面更难受的是你画完一个W10u、L120n的MOS管之后如果后面性能仿真发现需要把W改成12u那整个图形结构几乎要全部重来最要命的是LVS对照时容易层层报错。Pcell解决的就是这个痛点。你在原理图里放一个nmos管设定好W和L版图里的Pcell会根据参数自动生成完整的扩散区、poly、gate、contact、阱、金属走线等几何图形。当参数改变时版图跟着自动更新LVS的器件识别也符合PDK规则。TSMC65nm的PDK里包括MOS管、电阻、电容、电感、二极管、ESD器件在内几乎全部以Pcell形式提供。坚持不用Pcell等于放弃了foundry验证过的器件骨架在量产面前风险极高。Virtuoso则把这些环节串成一个完整闭环Schematic Editor负责前端原理图ADE L/ADE XL负责仿真环境配置Layout Editor负责版图编辑PVS或者Calibre负责物理验证最后通过Stream Out把版图数据导出成GDSII。题目里说的“从原理图到GDSII”本质上就是把这条工具链上的每一个环节都走通并确保数据一致。1.2 振荡器在65nm工艺下的设计目标以LC振荡器为例在TSMC65nm工艺下通常使用厚度为1.2V的薄栅氧核心器件同时可以选择SVT、HVT、LVT等不同阈值电压版本。LC振荡器核心指标包括振荡频率、相位噪声、功耗、调谐范围以及起振时间。原理图阶段更关注振荡条件和相位噪声优化但到了版图阶段核心矛盾逐渐变成寄生电阻、器件失配、走线电感、电流密度以及ESD保护结构是否符合要求。如果采用的是环形振荡器版图关注点又会不同。环形振荡器对各级反相器之间的延迟对称性很敏感所以要重点保证每一级的负载电容匹配P管和N管路径上的寄生尽量均衡。如果你用一根很长的绕线把某一级信号连接到下一级很可能因为额外的寄生电容导致各级延迟不一致最终表现为jitter恶化。无论是LC振荡器还是环形振荡器中间步骤再多最终交付给foundry的就是一份包含所有版图图层信息的GDSII文件。整个流程中仿真设置不对、Pcell参数显示不清、LVS连不上、Stream Out出错任何一个环节都能让你白耗几天时间。2. 原理图设计与仿真环节的关键细节2.1 在Virtuoso里搭振荡器原理图新建原理图前先确认你已经在Library Manager里建好了自己的设计库并且把TSMC65nm的PDK库正确attach到设计库上。如果这一步没做对你会发现调用器件时很多Pcell不在列表里或者调用出来的device属性不完整。搭建LC振荡器原理图时核心模块包括交叉耦合的NMOS管对、PMOS电流源或者尾电流源、LC谐振腔片上电感和可变电容、偏置电路以及输出缓冲级。每个器件都可以从PDK库中直接调出。放置器件时注意使用Instance属性里的CDF parameters窗口来填写参数而不是直接双击符号上显示的文本修改。实际项目中我遇到过直接在原理图上改文字结果版图调用时参数没同步的情况最后LVS对不上排查了很久才发现原因是CDF参数根本没更新。Virtuoso中搭建原理图的合理顺序是先放核心器件把连接关系理清楚后再补偏置和buffer。连接线建议用Create Pin先定义好需要对外连接的信号端口再在顶层用short连接。这样后面做symbol和仿真提取时端口保持一致可以减少很多网表不一致的报错。另外一个小建议振荡器这种有正反馈特性的电路在原理图刚搭完时不要急着跑tran先用DC仿真看工作点。如果某些节点的DC电压明显不对比如本该在电源中间附近的振荡节点电压被拉死到地或电源多半是连接关系错误或器件参数填错。2.2 ADEL仿真如何设置工艺角在Virtuoso里做振荡器仿真最常用的两个工具是ADE L和ADE XL。ADEL这个叫法其实是历史上从ADE L沿用下来的习惯很多人嘴里说的ADEL就是启动仿真环境后的那个窗口。做简单工艺角仿真时ADE L够用如果要做工艺角加失配的组合扫描建议直接用ADE XL。设置工艺角前先要弄清楚PDK的模型文件结构。TSMC65nm PDK通常提供tt、ss、ff、sf、fs等工艺角文件这些模型文件的位置由PDK的cds.lib和model_file定义。在ADE L里可以通过Setup - Environment查看当前的model libraries确认是否已经把tt设置为默认模型。最直接而稳妥的做法是把所有工艺角的模型文件路径全部加入model libraries然后在Variables或Corners菜单里设置一个corner变量通过不同的变量取值来切换模型。比如在ADE L中设置一个名为corner的变量取值分别为tt、ss、ff然后在Setup - Model Libraries中通过$corner这样的变量引用对应的模型段名。这样做比手动去更换模型文件路径要可靠得多既避免出错也能批量跑仿真。如果使用ADE XL操作会更直观一些在Test setup中定义工艺角名称并为每个工艺角指定对应的model file或model section然后直接启动多个corner并行仿真。实测下来LC振荡器在ss角下起振速度可能变慢振荡幅度也会降低所以如果ss角都能满足指标通常tt和ff也不会有大问题。这里特别提醒一下做振荡器tran仿真时仿真时间步长不要设得太大。LC振荡器频率如果是2GHz左右一个周期只有500ps如果你的仿真步长只有100ps波形会严重失真相位噪声和振荡幅度都会算错。建议把maxstep设置成振荡周期的十分之一量级甚至更小例如maxstep20p。同时因为振荡器起振需要时间tran仿真时长要足够长从一开始的启动瞬态到稳定振荡至少需要覆盖几十到上百个周期。2.3 Virtuoso中如何导入PWL波形文件在振荡器验证阶段有时需要给电路注入一个特定时序的激励信号比如模拟电源上的噪声扰动或外部注入信号这时用理想脉冲源不够贴近真实场景最佳方案是直接导入PWL波形文件。PWL全称Piecewise Linear即分段线性波形文件本质上就是一个包含时间-电压采样点的文本文件。Virtuoso中常用的器件是analogLib里的vsource或isource这里以电压源为例。在Schematic中放置vsource打开它的属性窗口在DC value旁边找到Source type选择PWL随后会看到PWL file或者File相关的参数栏在这里填入PWL文件的绝对路径。文件格式很简单每一行是一对时间值 电压值中间用空格或Tab隔开。需要特别注意的是PWL文件里不要包含单位后缀直接填数字例如0 0 100p 0 101p 1.2 10n 1.2 10.1n 0 20n 0这里第一个数字是时间单位是秒第二个数字是电压单位是伏特。Virtuoso读文件时不强制要求时间递增但如果时间点乱序或重复最终的波形会非常诡异所以建议先确认数据格式无误。如果属性窗口里找不到PWL选项原因是vsource有多种模型类型可选你可以先在Component Browser里选analogLib - sources - vdc然后在实例属性中把Type改为pwl再指定文件路径。实际使用中我遇到过这样一个坑PWL文件路径中包含了中文目录或者空格Virtuoso读不了提示文件不存在。后来统一把PWL文件放在仿真工作目录下用相对路径或者无空格的英文路径引用问题就没再出现过。另外补充一点如果你需要生成复杂的PWL波形比如带抖动的时钟信号直接手写文本效率低且容易出错。建议先用MATLAB或者Python生成时间序列再写出一个纯文本文件供Virtuoso读取。这一步其实也呼应了热词里提到的“matlab gdsii”场景也就是很多人在GDSII和仿真数据之间处理时习惯用脚本工具辅助MATLAB在早期数据预习阶段确实很方便不过最终交付时还是以Virtuoso和foundry工具链为准。3. Pcell实战从参数化单元到版图之路3.1 Virtuoso中电阻不显示阻值怎么办这个问题是模拟设计初学者最常见的疑问之一。我在TSMC65nm的PDK里放了一个rppoly电阻设置好R值结果在版图或原理图symbol上完全不显示阻值。其实这大概率不是PDK有问题而是显示参数配置没到位。Virtuoso里的Pcell是否显示“名字”或者“参数值”是由显示设置和CDF参数共同决定的。原理图阶段要看阻值最简单的办法是在Schematic Editor里选中电阻实例按Q打开属性窗口看Property选项卡里的R值是否存在。如果属性窗口里R值是空的说明你填的参数名不对需要回去检查PDK的CDF参数名。另外Virtuoso的显示是由display resource控制的。如果是版图阶段电阻不显示阻值可以在版图窗口中按ShiftF或者通过Display - Layer Display打开layer设置窗口查看label和device text层的显示开关是否打开。TSMC65nm PDK通常在prBndry和pin等层会标注器件信息如果这些层的purpose被隐藏了自然看不到。如果上述都没问题还有一种情况是Pcell参数并没有同步到版图此时要把原理图和版图的CDF参数做一次更新。具体操作是在版图中选中电阻Pcell右键选择Update Symmetry或Update Instance强制刷新Pcell。这里分享一个我自己的排查习惯电阻不显示阻值优先查三件事一是原理图CDF参数是否已填并保存二是Viewer层的显示属性是否隐藏了label三是否选错了symbol或abstract视图。前两个占了九成的故障原因。3.2 Pcell参数化单元的核心逻辑Pcell的核心思想是把版图的几何结构抽象成一组参数。拿TSMC65nm PDK里的poly电阻为例W和L是核心可变参数。你改变W和L时Pcell会自动调整poly矩形长度、宽度同时保持接触孔、端头间距、冗余孔位置等细节符合设计规则。理解Pcell逻辑后你在版图交互时就会少踩很多坑。比如调整MOS管指针方向时不要用普通编辑工具去拉伸这样会破坏Pcell结构导致DRC和LVS报错。正确做法是选中Pcell后右键选择Edit in Place在参数窗口中调节或者直接按Q修改属性值。我遇到过这样一个场景一个电感Pcell需要调整圈数结果我在版图里用拉伸方式改了一条走线原本一个完整的螺旋电感Pcell直接退化成普通shape电磁提取结果全乱了。后来只能重新调用电感Pcell并把参数重置。经验是Pcell就像一个打包好的“智能积木”它有它的规则边界。你可以在积木上面连接金属或者放置via但不要试图去修改积木内部的结构。如果PDK自带的Pcell不满足需求正确做法是查看有没有提供Pcell Editor或Skill接口基于原型Pcell做二次开发而不是在版图里硬改。3.3 EMX嵌入Virtuoso做无源验证LC振荡器的片上电感和变压器通常对寄生非常敏感。TSMC65nm工艺下的电感模型如果不做电磁提取只依赖PDK的近似模型仿真结果和实际流片结果很容易出现偏差。EMX是一款可以嵌入Virtuoso的电磁仿真工具它专门针对RFIC设计中的无源器件提取场景。在Virtuoso里嵌入了EMX后可以直接选中有源版图中的电感或传输线结构在版图窗口内触发EMX仿真得到包含频率相关的S参数或等效RLGC模型再以子电路形式带回仿真环境。使用EMX的整体流程大致如下先在版图里把电感Pcell和周围需要保留的走线全部画好然后把EMX仿真域设置为包含这些金属层的地平面和信号路径。EMX会自动从Virtuoso中提取多层金属版图数据设置好仿真的频率范围和端口后运行最后生成一个可以用于Spectre仿真调用的模型单元。实际使用中要注意EMX结果的准确性跟你设置的参考地连接方式关系很大。如果电感周围应该有一个完整的ground ring但没有画好EMX会由于回流路径缺失给出偏高或者偏低的有效电感值。另外尽量保留电感下方的ground plane和patterned ground shield这会影响电感的Q值和自谐振频率。举个例子我在一个2.4GHz LC振荡器中最初把电感放在没有任何特殊ground plane的区域EMX提取出来的Q值只有6左右后续通过增加地平面的开槽和加宽回流路径把Q值提升到了12以上相噪改善明显。这些在原理图阶段用PDK模型很难发现但通过EMX嵌入Virtuoso做版图级提取就能暴露出来。4. 版图绘制与验证DRC、LVS与PEX4.1 从原理图到版图映射原理图验证通过后就进入版图阶段。在这里强烈建议不要直接在Layout Editor里空手起家画版图而是用XL版图工具做一致性继承。做法是打开Layout Editor XL把原理图打开通过Launch - Layout XL进入版图环境。这时工具会读取原理图的schematic信息左侧会显示所有器件的netlist。使用Generate Selected from Source功能可以框选原理图中所有器件批量place到版图中。XL流程带来的最大好处是器件之间的连接关系在工具内部是已知的画完某一根金属线后LVS验证时能够自动判定连接关系避免自己手工创建标号和错误连线。放置完所有Pcell器件后再进行布局布线。振荡器的核心版图注意事项包括差分对管要严格对称尾电流源和放大级回路尽可能短LC谐振腔的高频信号走线远离数字控制线电源线和地线根据电流密度加宽并且在必要位置放置滤波电容。另外Pcell在XL环境下默认是经过“reference”方式生成的如果原理图里修改了W/L回到版图XL时会出现“out of date”提示选择Update即可同步。不要直接去改版图中的Pcell文本这样同步时会被覆盖。4.2 DRC和LVS的揪错过程DRC是版图物理规则的检查LVS是版图与原理图一致性的检查两者侧重点完全不同。在Virtuoso中跑DRC可以直接调用PVS或Assura也可以调用外部Calibre。以PVS为例启动方式是Launch - PVS然后选择DRC运行目录和rule deck点击运行。如果DRC报错通常是间距、面积、密度、天线效应等问题。这时要把错误高亮打开逐条修正建议先处理大面积的错误类型遗漏的情况会越来越少。LVS报错则是另一套逻辑。常见的LVS错误包括端口不匹配、实例缺失、实例多余、节点短路或断路。查LVS时我习惯先看报告摘要如果显示Incorrect Instances说明原理图和版图之间的器件类型、参数或数量对不上。比如MOS管的W/L在版图和原理图不一致就会报instance mismatch。这时建议检查Pcell参数是否同步特别要注意串联和并联电阻的表示方式。有些PDK在LVS时会把两个串连的电阻合并成一个电阻而报告显示不一致时并不代表真的有错。需要对照PEX和LVS的reduce选项来判断。如果对RSD电阻的合并逻辑不熟悉最直接的办法是打开LVS的报告中的expanded netlist看它如何识别电阻的网络连接。我见过不少人在LVS时报端口数量不匹配检查半天发现是顶层pin层的text忘记打上比如VDD、VSS和输出端口没有用对应metal pin层标识导致整个网表少端口。在XL流程里如果从原理图generate的pin没有合理摆放到指定金属层就会有这个问题。4.3 PEX提取与后仿通过LVS之后还要做PEX提取寄生参数后再进行后仿真。这一步对于振荡器来说极其重要因为互连线的寄生电容和电阻会直接改变振荡器频率严重的甚至导致无法起振。在Virtuoso中PEX可通过PVS的Parasitic Extraction功能实现或者用Calibre xRC。提取同时需要配置顶层金属层、耦合电容的提取方式、是否需要提取衬底电阻等。对振荡器而言建议开启耦合电容提取并且要包含主要的信号线和电源/地之间的电容。后仿时会把提取出的寄生网表重新带回ADE环境。有两种常见做法一种是直接替换原来的testbench中的电路模块使用提取出的calibre view或者av_extracted view另一种是把寄生子电路单独作为激励源的一部分加入原网表然后进行仿真。实际操作时发现LC振荡器后仿频率和pre-sim差异通常在百分之几范围内但相位噪声差异可能达到几个dB。如果寄生提取后相噪劣化严重优先检查LC谐振回路的走线是否过长以及varactor两端的寄生电容是否引入了过多不对称。如果你用的是EMX模型这时需要在后仿网表中把EMX生成的子电路模型和一版图完整的PEX结果合并仿真这样才能同时考虑有源器件的寄生和无源器件的电磁特性。整个过程比较繁琐建议用ADE XL跑多个corner和多个寄生提取的组合一次性拿到可靠的后仿数据。5. 导出GDSII的完整操作与常见疑问5.1 GDSII文件格式和为什么foundry要它GDSII是一种历史悠久的二进制版图数据格式由Calma公司提出后来成为整个半导体行业默认的标准交换格式。无论是TSMC65nm还是更先进的FinFET节点foundry最终接受的掩膜数据基本都是基于GDSII或OASIS格式。GDSII的核心概念是层级化的cell引用。一个GDS文件包含多个结构Struct每个结构内部由基本几何元素boundary、path、sref、aref等组成。版图层次之间通过sref引用关系实现嵌套这样顶层cell可以多次引用底层cell大幅减少数据量。理解了这一点你就能明白为什么在Virtuoso里建立cell hierarchy时要有意识地管理层次。如果所有版图图形都平铺在一个顶层cell中GDS文件会变得巨大且foundry的DRC和掩膜处理时会非常吃力。保持合适的hierarchy结构不仅Stream Out导出流畅后续foundry的DFM分析也更友好。5.2 Virtuoso中Stream Out导出GDSII操作指引在Virtuoso版图界面中选择File - Export - Stream打开Stream Out对话框。这里要填写几个关键参数Output File路径、Top Cell Name、Library Name、Run Directory、以及必要的Stream Out Map文件。其中最重要的就是Map文件。由于Virtuoso内部的layer/purpose pair和foundry的GDSII layer number并不一定是一一对应关系Map文件负责完成这一层数转换。TSMC65nm PDK通常会提供一个官方map文件你要确保用的是PDK附带且与当前工艺版本匹配的版本。如果Map文件配错导出的GDSII在导入foundry的物理验证环境后会大量报错甚至出现金属层对应颠倒的灾难性问题。另外在Stream Out时勾选Limit to Current Cellview或指定Export Scope要选择正确范围。如果只想导出顶层cell及其中引用的所有子cell就选择当前顶层cellview如果你不小心选中了别的cell导出数据会不完整。我建议在导出完成后立刻做一次Stream In回读验证。打开一个新的空库或者临时库执行File - Import - Stream将刚导出的GDSII重新导入然后检查cell结构和图形数量是否与原始版图一致。这种“导出再导入”验证是一次性检查数据完整性的高效手段。5.3 GDSII数据检查与常见疑问经常有朋友问导出的GDSII文件能不能直接用文本编辑器打开查看。GDSII是二进制格式直接打开会看到乱码。如果你只想快速预览图形可以用KLayout等免费工具打开GDSII。但最终在foundry侧是否采用还是要以foundry指定的验证环境为准。也有人习惯用MATLAB来解析GDSII做一些形状面积统计或数据预处理。GDSII格式相对反直觉但因为高度结构化用脚本去遍历库、结构和几何元素是完全可行的。工业界很多数据处理脚本就是通过调用公开的GDSII解析库来完成的。这里我不推荐在所有场景下都用MATLAB去读GDSII大部分时候KLayout或Virtuoso自带的功能更高效。GDSII导出时另一个高频问题是“layer purpose pair无法识别”这通常说明Map文件里的purpose名称与当前库中的purpose定义不一致。解决办法是检查map文件中purpose的拼写是否和.tf文件里的对应一致。如果你发现GDS导入后部分图形出现在错误的purpose中基本可以断定是map文件映射语句丢失或错位。5.4 多层金属与hierarchy命名规范65nm工艺通常有6到10层金属可供使用振荡器版图里高频信号走线会选择较上层金属以减小到衬底的寄生电容偏置和地线则走底层金属同时保持完整的回流地平面。在导出GDSII前建议检查所有cell的命名是否符合foundry要求。不要包含特殊符号、空格或过长的字符串。虽然Virtuoso允许cell名中包含很多字符但GDSII处理流程中的file名限制非常严格。我见过一个项目因为cell名里带了一个“/”符号导致处理后端脚本直接崩溃。为了稳妥建议整个库都使用字母、数字和下划线不要使用其他特殊字符。6. 问题速查表与避坑技巧6.1 常见问题速查表我把实际工作中最常见的问题整理成了一张速查表方便直接对照处理。问题现象可能原因排查与解决办法原理图电阻不显示阻值CDF参数未填或显示层被隐藏按Q检查instance属性确认CDF参数名正确在Display Options中把device text层打开版图Pcell拉伸后变形破坏了Pcell内部结构不要用普通编辑工具拉伸Pcell改用Q修改参数或使用Edit in PlaceADEL仿真启动后模型全无model library未加载在Setup - Environment中检查model libraries放入正确的工艺角模型PWL文件无法读取路径含中文或空格改用纯英文路径文件里不写单位只用数字LVS报告实例数量不一致串联电阻被合并或Pcell参数未同步查看LVS报告中的Reduce选项可去掉reduce再次比对DRC报天线效应大面积poly或metal未打跳线根据DRC提示位置插入diode或调整layer jump后仿频率偏差大关键高频路径寄生过大在版图中缩短高频走线增加地平面重新提取PEXStream Out后GDS导入多出图形Map文件层映射不正确检查map文件中layer/purpose映射改用PDK自带mapEMX提取结果和PDK模型相差很大参考地不完整检查电感周边是否铺满完整地回路必要时加patterned ground shield这张表不是万能的但覆盖了振荡器项目中最常见的几个坑位。遇到类似问题时按表格先自查一轮解决率至少能到八成以上。6.2 我的三句话避坑原则第一句话拿不准的参数先不填也让PDK来提示你。不要凭记忆去填一个看似合理的W/L值在TSMC65nm里有些电阻或电容Pcell对最小尺寸、最大尺寸都有严格限制超出范围DRC或LVS就会出现各种奇怪的报错。第二句话目录和文件路径保持英文在整个项目周期里坚持贯彻。PWL文件、模型文件、Stream Out输出路径每一处因为中文路径而导致工具读取失败的问题都会让你花掉远超预期的调试时间。第三句话每一个验证步骤都不能省略。原理图仿真再漂亮没有PEX后仿的振荡器频偏风险仍然很大EMX提取再准若不落实在完整PEX流程里也可能因为忽略有源器件寄生而失真。从原理图到GDSII每个节点都是交付质量的一部分。我个人在实际操作中的体会是TSMC65nm做振荡器的流程本质上并不复杂但每一步都有一些藏在文档角落里的“潜规则”。这些规则不会主动出现在你面前只有当你亲手踩过坑才会真正记住。把这份指南里的每个检查点过一遍也许不能保证你一次流片成功但至少能让你的验证流程少一些低级错误把精力留给真正影响性能的电路优化上。
返回列表