ARTICLE DETAIL

资讯详情

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

Cadence Virtuoso单级OTA前仿真实战:从指标拆解到AC/瞬态调试

Cadence Virtuoso单级OTA前仿真实战:从指标拆解到AC/瞬态调试 说实话第一次用 Cadence Virtuoso 画单级 OTA 的时候我把绝大多数精力都花在了怎么把管子摆得漂亮上结果仿真一跑开环增益只有 15dB相位曲线乱得像是心电图。后来才明白前仿真真正考验人的根本不是画原理图的手速而是你能不能把指标、手算和仿真平台串成一条完整的链路。这篇就把我跑通整套流程的经验摊开讲从指标推导到 Virtuoso 原理图绘制再到前仿真调试全程按我的实际操作为主线。适合刚接触模拟 IC 设计、准备做课程项目或者第一次准备流片前仿真的同学也适合已经能跑通基础仿真但总觉得流程不系统的工程师当作查漏补缺的参考。1. 为什么选单级 OTA这道题的真正价值不在画电路1.1 单级 OTA 到底覆盖了哪些核心能力单级 OTA 通常是教学和项目里最常见的入门题但很多人把它想简单了。它虽然只有五六个管子却把模拟 IC 设计最核心的能力都串起来了从指标拆解到器件尺寸手算从 DC 工作点检查到 AC 频响分析从 PVT 考虑到版图前的最基本验证。换句话说你把这个电路练熟了给一个 spec设计一个电路用前仿真证明它满足要求这条基本职业路径就算入门了。更关键的是单级 OTA 可以让你在一张原理图上同时看到增益、带宽、摆率、功耗、摆幅之间的相互制约。加电流gm 变大、GBW 变大但功耗也变大加大 Lro 变大、增益变高但面积和寄生也跟着上来。这种按下葫芦浮起瓢的平衡感只靠背公式是学不来的必须自己亲手在 Virtuoso 里调过几个来回才会有体感。1.2 标题里的前仿真指的是什么边界这里必须先说清楚前仿真的边界。在模拟 IC 流程里前仿真是指只有原理图、还没有版图寄生参数的仿真阶段验证的是电路原理和器件尺寸是否合理。这时候你用的器件模型是工艺厂提供的 SPICE 或 Spectre 模型连线是理想导线所以仿真结果通常比流片后要好不少。等画完版图做 PEX 寄生提取后跑的仿真才叫后仿真那时候才会看到寄生电阻电容对带宽、相位裕度、噪声带来的真实影响。所以前仿真的目标不是追求数字好看而是给后续版图设计留出足够的裕量。举个例子如果前仿真在 TT corner、25°C、1.8V 条件下增益刚好 50dB我建议你最好做到 55dB 以上因为后仿里寄生一上来增益和带宽都会往下掉你总得给自己留点折腾的余地。这个思维很多初学者完全没意识到。2. 指标拆解与手算推导先把管子尺寸算明白再打开 Virtuoso2.1 示例指标与工艺假设我这次用一个非常典型的五管 OTA 作为例子NMOS 输入差分对、PMOS 电流镜负载、PMOS 尾电流源单端输出。工艺假设是 0.18μm CMOS电源 1.8V。设计目标这样定低频开环增益≥ 50dB单位增益带宽 GBW≥ 50MHz负载电容 CL 1pF相位裕度≥ 60°尾电流50μA 左右功耗控制在 180μW 以内压摆率由尾电流和负载电容决定目标 ≥ 40V/μs这些指标不是乱拍的。0.18μm 工艺下做一个 50MHz、50dB 左右的单级 OTA 正好处于有点挑战但完全能实现的区间适合拿来练手。如果你用的是更小的工艺节点比如 65nm 或 28nm相同功耗下带宽能做得更高但手算逻辑和流程是完全一样的。2.2 手算顺序从 GBW 到 gm从增益到 Rout确定尺寸的起点不是直接猜 W/L而是从指标反推。单级 OTA 的主极点通常在输出节点主极点频率近似为 1/(2π * Rout * CL)所以单位增益带宽主要由输入管的跨导 gm1 和负载电容 CL 决定GBW gm1 / (2π * CL)把 GBW 50MHz、CL 1pF 代进去gm1 2π * 50MHz * 1pF ≈ 314μS我一般会给 gm1 留 10% 左右的余量取 350μS。然后根据 gm 和电流的关系算过驱动电压。工作在饱和区的 MOS 管gm 2 * ID / Vov这是设计师最常用的估算公式。如果每条输入差分支路电流 ID 25μA尾电流 50μA 对半分那么Vov 2 * ID / gm1 2 * 25μA / 350μS ≈ 0.14V这个过驱动电压很合理既不会太小导致匹配变差也不会太大导致输出摆幅和 headroom 紧张在 0.18μm 工艺下是常用区间。再看增益。开环增益 Av gm1 * Rout要满足 50dB约 316 倍那么输出电阻必须满足Rout ≥ 316 / 350μS ≈ 900kΩ五管 OTA 的输出电阻是输入管 M2 的输出电阻 ro2 和负载管 M4 的输出电阻 ro4 并联后的结果。要达到约 900kΩro2 和 ro4 本身都得到 1.8MΩ 以上。在 0.18μm 工艺下这要求把输出相关管子的 L 拉得比较大通常 L 要到 1μm 甚至 2μm因为 ro 约等于 1/(λ * ID)而 λ 与沟道长度 L 近似成反比。这个约束在初算时很容易被忽略很多人用最小沟长画完仿真发现增益只有 30 多 dB再回头改就慢了。2.3 确定 W/L 与电流的实用原则确定 W/L 用的是平方率模型虽然实际工艺有短沟道效应但作为初始值足够用W/L (2 * ID) / (μ * Cox * Vov²)假设 0.18μm 工艺下 NMOS 的 μCox 约 360μA/V²PMOS 的 μCox 约 90μA/V²PMOS 空穴迁移率低这很正常。那么输入管 M1/M2ID 25μAVov 0.15VW/L ≈ 50 / (360 * 0.0225) ≈ 6.2。如果 L 取 0.5μmW 约 3.1μm如果 L 取 2μm 来保增益W 就要到 12.4μm面积会明显变大。负载管 M3/M4ID 25μAVov 可以适当给大一些比如 0.25V因为负载管对匹配的要求高但也不要大到占用输出摆幅。W/L ≈ 50 / (90 * 0.0625) ≈ 8.9。L 和输入管一样如果取 2μmW 约 17.8μm。尾电流源 M5ID_total 50μAVov 0.2VW/L ≈ 100 / (90 * 0.04) ≈ 27.8。L 取 0.5~1μm主要保证电流源输出电阻够高因为尾电流源的非理想性会带来共模增益问题。这里我不建议你拿着这些数字就直接认定一定对。手算的定位是拿到一组可以放进 Virtuoso 的初始值让仿真器帮你去收敛。真正的设计迭代是先手算粗定再仿真微调最后回到手算去理解为什么调。你会发现只要手算逻辑清晰仿真调试时你会比那些拍脑袋定尺寸然后靠蒙参数碰运气的人快得多。3. Virtuoso 画图实战库、原理图与 symbol 的完整创建过程3.1 建库与选工艺打开 Virtuoso 后先看到的窗口叫 CIWCommand Interpreter Window所有库管理、工具启动都从这里开始。第一次做事先建 LibraryFile → New → Library填上库名比如 my_ota_lib然后选择 Attach to an existing technology library选你手上工艺库对应的 tech file。这一步很多人会跳过但如果不 attach后面放器件时会报错或者模型完全对不上回头补起来非常麻烦。建完库之后再新建 cellviewFile → New → CellviewLibrary 选 my_ota_libCell 名字填 ota_coreTool 选 Schematic Editor。进入原理图编辑器后用 Create Instance 或者快捷键 i 调出器件浏览器。在 analogLib 里可以找到理想器件但真正设计要用工艺库里的管子比如 tsmc18rf 下的 nmos4、pmos4或者你库里的 nch、pch。四端器件比三端器件好用因为衬底电位可以独立控制仿真结果更接近实际。电流源 M5 用 pmos4负载电流镜 M3/M4 也用 pmos4输入差分对 M1/M2 用 nmos4这样一个典型的五管 OTA 就凑齐了。3.2 摆放器件与连线要点摆放器件时不用一开始就追求美观但有几个习惯最好养成输入对管左右对称放负载电流镜也对称放并保持相同的方向电源和地线分清PMOS 的源端朝向 VDDNMOS 的源端朝向 GND每个管子都要注意 bulk 端的接法PMOS bulk 接 VDDNMOS bulk 接 GND否则衬底偏置效应会悄悄改变阈值电压仿真结果不准。连线时用快捷键 w 或连线菜单把各端点按电路图连好。关键节点最好打上名字特别是输入、输出和偏置节点。用 Create Pin 或者快捷键 p 给电路加上引脚VINP、VINN、VOUT、VDD、VSS、IBIAS。引脚命名要和后续仿真、测试平台对应一致否则 symbol 化之后你很可能会在 testbench 里接错线。我见过有人把引脚名写成小写后面的表达式里用大写结果查了半小时纯粹是给自己找事情。连线完成后按 s 保存然后 Design → Create Cellview → From Cellview 生成 symbol。弹窗里一般保持默认就行用 Generate Symbol 生成一个方框形的 symbol引脚会自动带出来。如果引脚排列比较乱可以在 symbol 编辑器里手动挪动但注意连线名不要改。这个 symbol 是后面搭建测试平台的基础OTA 会被当做一个器件放到 testbench 里。3.3 生成 symbol 与常用快捷键Virtuoso 原理图编辑器里我常用的快捷键不多但每个都能省不少时间i添加器件实例p添加引脚w连线c复制选中的器件或线s保存原理图u撤销x下钻到子单元CtrlE打开选中器件的属性面板初次画图不需要去记成百上千个快捷键先把 i、p、w、c 这几个玩熟。等你要大量修改电路时会发现 c 复制比重新摆器件快得多x 下钻在调 W/L 时也特别实用直接从上一层点进管子所在子单元里改尺寸省得来回开 schematic。加器件后双击器件或者 CtrlE 打开属性面板把 W、L、fingers、multiplier 这些参数填进去。设计里如果单个 W 很大往往用 fingers 拆成多根并联比如 W12μm 的管子可以设 fingers4每根 3μm版图匹配会更好。这个习惯要尽早养成因为后续画版图时你会感谢自己当时没有用一根超宽管子。4. 测试平台搭建很多新手前仿真翻车都在这一步4.1 OTA 的 testbench 到底要接什么原理图画完验证工作是在 testbench 里做的不是直接对 ota_core 这个 cell 仿真。新建一个 cell比如 tb_ota把 ota_core 的 symbol 调进来然后在这个顶层 schematic 里接上你想要的所有测试源和负载。测试平台至少要有这几样东西电源 VDD 接 1.8V 的直流电压源VSS 接地输入共模电压源VINP、VINN 各接一个 0.9V 的 vdc让输入差分对工作在合适的共模点差分 AC 激励用于 AC 分析输出负载电容 CL 1pF接到 VOUT 和地之间偏置电压源给尾电流源 M5 的栅极接一个 DC 电压源初始值可以设 1.1V 左右很多人第一次搭 testbench 只接了输入、输出、电源但漏了输入共模电压结果 DC 仿真直接报错或者工作点完全不对。还有人不加负载电容AC 仿真增益曲线看起来像一条平线因为输出节点阻抗全由管子电阻决定主极点位置和真实工作条件对不上。这些都是前仿真阶段极常见的翻车原因。4.2 差分 AC 激励怎么设置AC 仿真里最关键的设置是激励方式。五管 OTA 是差分放大器测增益时应该给差分 AC 信号而不是只给一边。我的做法是让 VINP 的 vdc 源里填上 AC magnitude 0.5V、AC phase 0让 VINN 的 vdc 源里填上 AC magnitude 0.5V、AC phase 180。这样两个源合起来的差分输入等效为 1V测到的输出幅度就直接等于差分增益不需要再额外换算。如果你只给一边加 AC 1V另一边不加仿真得到的其实是单端驱动响应数值会偏低很多新手在这里对着结果一头雾水。Spectre 的交流源设置里AC magnitude 是峰值幅度phase 用度表示。Phase 填 180 就表示反相。也可以用负数 AC magnitude 实现反相但我更推荐显式填 phase 180因为可读性更好后续看波形时不容易混乱。4.3 为什么必须挂负载电容模拟电路的仿真必须反映真实工作条件。OTA 在实际芯片里的输出端会接下一级的栅极、走线寄生以及用于频率补偿的电容这些都是容性负载。如果不挂 CL输出节点的主极点会跑到非常高的频率AC 曲线在目标频段内看起来几乎是平的相位裕度也难以分析。但芯片里的负载电容绝不是 0所以这样的仿真结果没有参考价值。我的经验是前仿真的负载电容一定要根据实际应用定。如果下一级是后级器件的栅极输入可能只有 100fF 到 300fF如果输出要驱动片外引脚或者较大的走线可能要 5pF 甚至更重。这里我取 1pF属于一个比较折中的教学选择。改变 CL 会直接改变 GBWCL 翻倍则 GBW 减半所以你不要在仿真前拍脑袋决定负载最好先把负载模型想清楚。这也是很多同学做前仿时指标达标、流片回来却整个偏离预期的原因之一。5. 前仿真执行与指标读取DC 工作点、AC 增益、相位裕度5.1 仿真环境配置模型库、分析类型、保存选项在 Virtuoso 里启动 ADE LLaunch → ADE L第一步不是急着设 analysis而是检查仿真器和模型库。Setup → Simulator/Directory/Host选择 spectre这是 Virtuoso 自带的仿真器也是现在最主流的选择。然后 Setup → Model Libraries把工艺库对应的模型文件加进来并选好 corner section初始用 tt典型 corner。这一步如果漏了仿真会直接报错提示找不到模型定义或者某些模型不被当前仿真器支持。接着在 Analyses → Choose 里设置分析类型。做前仿真我一般同时开 DC 和 ACDC 分析不设扫描保留 operating point 求解AC 分析sweep type 选 Log频率范围 1Hz 到 1GHz点数给 1000 点或者 100 points/decade精度足够AC 的频率范围要覆盖目标 GBW 的 10 倍以上比如目标 GBW 50MHz扫到 1GHz 才能看清高频滚降和次极点位置。如果只扫到 100MHz相位裕度根本没法看全。5.2 从 DC 工作点判断电路是否健康仿真跑完后先别急着看 AC 曲线先看 DC 工作点。Results → Print → DC Operating Point然后在原理图上点选器件或节点会弹出每个管子详细的直流参数重点看 Vgs、Vds、Vth、region。饱和区是 MOS 管放大器正常工作的前提。对 NMOS 输入管和负载管Vds 都要大于 Vdsat过驱动电压也就是说要工作在 saturation 而不是 triode 区。如果你发现哪个管子 region 显示三极管区AC 增益一定不对这时候先修 DC 工作点再谈其他。常见的修法是调整输入共模电压、偏置电压 VB或者改变电流镜的尺寸比例。输出节点的直流电压也要看。五管 OTA 开环时输出节点会通过输入共模和电流镜的电流平衡自动稳定在一个值。如果输出被拉到了接近 VDD 或 GND说明电路里的电流分配出了问题。我碰到最多的情况是 VB 给得不合适尾电流源电流过大或过小导致某一侧的管子被迫退出饱和区。遇到这种问题我的检查顺序是先量尾电流源的实际电流再量两个输入管支路的电流看它们是否符合 1:1 分配最后再检查每个管子的 Vds 是否留够了余量。5.3 读 AC 曲线把增益/GBW/相位裕度一项项抠出来DC 工作点没问题后打开结果浏览器查看 AC 响应。最简单的方法是用 Results → Direct Plot → Main Form选择 AC Gain Phase然后在原理图上点输出节点 VOUT增益和相位曲线就会自动画出来。如果你习惯用表达式也可以在 Calculator 里写 dB20(vf(/VOUT))效果是一样的。低频增益直接看曲线在最低频处的值按我前面的例子目标应该在 50dB 以上。0dB 穿越点对应的频率就是单位增益带宽 GBW直接移动十字光标读取即可。相位裕度看在 0dB 穿越频率处的相位曲线读数它距离 -180° 的差值就是相位裕度。比如读数是 -100°那 PM 就是 80°满足 ≥60° 的要求。读曲线时有个细节相位曲线可能会因为仿真器相位展开方式不同显示成从 180° 往下掉也可能显示成从 -180° 往下掉。不管它怎么显示你只需要看 0dB 频率对应的相位离 -180° 有多远。如果看到相位曲线在目标 GBW 附近没有明显滚降或者增益曲线出现了不该有的峰先回 testbench 检查激励和负载多半是测试平台本身的问题。5.4 瞬态仿真验证摆率与建立AC 指标验证完我还习惯做一次瞬态仿真来看大信号行为主要确认压摆率是否达标。标准做法是把 OTA 接成单位增益缓冲器输出 VOUT 直接连接反相输入端 VINN正相输入端 VINP 给一个阶跃信号观察输出的上升沿斜率。瞬态分析设置stop time 给 1μs最大步长给 1ns 左右精度选 moderate。输入阶跃可以从 0.45V 跳到 0.55V 或者从 0.8V 跳到 1.0V。输出上升沿的斜率就是压摆率可以用波形窗口里的斜率测量功能直接量。理论上 SR I_tail / CL 50μA / 1pF 50V/μs实际仿真值和这个理论值应该比较接近。如果你的仿真值明显偏低可能又是工作点不对或者输出负载比你以为的更大。瞬态仿真还有个额外的好处它可以暴露 AC 仿真看不到的问题比如启动过程中的振荡、输出一开始打在错误电平上这些在 AC 仿真里是完全看不见的。所以我的建议是AC 仿真通过之后不要急着截图收工务必把这个瞬态 buffer 测试也跑一遍。6. 指标不达标怎么调常见问题、排查链路与进阶验证6.1 增益上不去的典型根因前仿真最常遇到的情况就是低频增益偏低。如果目标 50dB实测只有 35dB我的排查链路一般是这样的第一先确认 DC 工作点是不是真的在饱和区。很多新手不看 DC operating point直接对着 AC 曲线怀疑模型有问题。其实最常见的原因就是某个管子工作在深线性区或者输出节点电压被钳住导致输出电阻大幅下降。第二检查输入管跨导 gm1 是否符合手算预期。在 DC operating point 结果里直接看 M1/M2 的 gm 值如果和手算的 350μS 差很远说明电流或过驱动电压偏了。这时候去调 VB 或者输入共模电压让支路电流回到设计值。第三看输出电阻。增益 gm1 * Rout增益不够有时候是 Rout 不够。如果你用的 L 是工艺最小沟长比如 0.18μm 工艺下的 0.18μm那么输出管 ro 只有几十千欧到一两百千欧并联后可能连 100kΩ 都不到增益自然上不去。解决办法是把 M2、M4 的 L 拉大到 1μm 或 2μm代价是面积变大、寄生电容变大。要在增益和速度之间找平衡这是单级 OTA 必修课。6.2 相位裕度不足与测试平台陷阱相位裕度不足的情况在单级 OTA 里相对少见因为单级结构的主极点天然靠近低频PM 往往接近 90°。但如果你发现 PM 低于 60°先别急着加补偿电容回头检查一下测试平台。最常见的坑是 AC 激励不是真正差分。如果你只给一边加 AC 源另一边不加相位曲线会显得很奇怪读出来的PM没有意义。第二个坑是负载电容没有接对位置输出节点如果同时有直流源、电流表之类的东西AC 等效电路会多出不该有的阻抗。第三个坑是频率扫描范围太窄导致 0dB 穿越点没抓到相位裕度自然读不准。如果测试平台没问题单级 OTA 仍然 PM 不足通常是次极点太靠近 GBW。次极点主要由输入差分对的源级节点和电流镜镜像节点引入L 取得过大或者输入管尺寸过大时这些节点的寄生电容会增加次极点向低频移动。这时候要权衡一下增益靠 L 拉上去了但带宽和相位被寄生电容吃掉了一部分。解决思路是适当减小输入管的 L或者调整各管的尺寸比让主极点和次极点拉开距离。6.3 从单点仿真走向 PVT 与蒙特卡洛TT corner、25°C、1.8V 下跑通只是第一步。前仿真如果只做单点流片后大概率会遇到指标漂移的问题。工艺 corner 会改变阈值电压和迁移率电源电压有波动芯片工作温度也会变所以完整的单级 OTA 前仿真应该包含 PVT 扫描。做 PVT 最简单的方法是在模型库里切换 corner section比如分别跑 tt、ss、ff 三种工艺角电源电压按 1.8V ± 10% 取 1.62V、1.8V、1.98V温度取 -40°C、27°C、85°C 三档。把这些组合跑一遍指标最差的那组就是你这个设计真正的底线。我通常用 ADE XL 一次性建好 corner 表自动批量跑完再导出指标汇总。蒙特卡洛仿真则是为了看失配。工艺角反映的是全局工艺波动而蒙特卡洛可以模拟同一片晶圆上相邻器件之间的失配对差分对和电流镜来说尤其重要。输入失调电压 Vos、增益、GBW 都会因为失配而波动。在仿真器中设置 Monte Carlo 分析样本数跑到 100 到 300 次看输出指标直方图的均值和 3σ。有些院校的工艺库没有统计模型的 license跑不了 MC那就至少把 PVT corner 扫完整也可以从侧面说明设计的稳健性。最后一个忠告千万不要在前仿真的单点结果达标后就急着庆祝。模拟 IC 设计里前仿指标只是理论值PVT 是保底线后仿才是真实线。我见过太多人前仿 TT 角做到完美结果 PVT 一跑GBW 掉了 30%不得不从头改尺寸。把前仿真当成一个完整的验证过程而不是一张漂亮的截图这个习惯越早建立越好。等你以后真正把版图画完回来对比前后仿真结果时会感谢自己当年在前仿真阶段就把 PVT 和 MC 当成了默认动作。
返回列表