前阵子做课程项目,正好需要把一个双平衡吉尔伯特混频器完整的跑通。我选了Cadence IC618这个版本,配套180nm PDK,从画原理图到仿真,一路踩了不少坑,最后总算把转换增益、波形和收敛问题都理顺了。这篇就是记录我实际操作的全过程,不绕弯子,直接按步骤来。如果你手上也有一份180nm PDK,想用IC618仿真双平衡吉尔伯特混频器,又不知道从哪下手,照着这篇文章走一遍,基本能把整个流程摸清楚。适合刚接触射频仿真的研究生、准备毕设的电子类学生,以及要从版图前仿真开始学混频器设计的工程师。
1. 设计目标与整体思路:为什么非要选这个结构
1.1 双平衡吉尔伯特混频器的核心工作过程
吉尔伯特混频器的本质是“跨导级把电压变成电流,开关级把电流按本振频率换向,负载再把电流变回电压”。一个典型的CMOS双平衡结构包含三部分:底部尾电流源管M7、射频输入差分对M1/M2、以及顶部交叉连接的本振开关管M3到M6。
射频信号加在M1/M2的栅极上,它决定了两条路径里电流的差值。本振信号控制M3到M6,周期性地让电流从左路跑到右路。因为开关是交叉连接的,输出负载两端得到的电流差等于射频电流乘以一个+1/-1的周期方波。理想方波做傅里叶展开后,一次谐波的系数是4/π,混频时能量分散到各个边带上,最终落在中频上的等效系数是2/π。所以理想转换增益可以写成:
Av_cv = (2 / π) * gm * RL
这里的gm是M1/M2的跨导,RL是单端负载电阻。这个公式特别重要,因为它告诉我们两件事:第一,跨导越大增益越高;第二,负载电阻越大增益越高。但实际电路中这两个参数都受电源电压和线性度限制,不可能无限加。
1.2 双平衡结构相比单平衡到底好在哪
选双平衡而不是单平衡,主要看中三点。首先是本振到输出的泄漏,双平衡结构里LO信号在输出端会相互抵消,尤其偶次谐波理论上可以消掉,这对后级IF处理很有帮助。其次是射频到输出的偶次失真,双平衡也能抵消一部分,能有效降低二阶交调分量。第三是端口隔离度,整体要比单平衡好很多,这在系统链路里非常关键。
代价也很明显:多了一组开关管,堆叠管数增加了,对电源电压要求更高。180nm工艺用1.8V电源,设计时只要把偏置点安排好,还是能跑得比较好。很多刚接触电路的同学容易纠结“为什么非要用4个开关管”,其实就是用面积和电压余量换隔离度和线性度,在射频接收机里这笔买卖是划算的。
1.3 180nm PDK加IC618的组合为什么经典
Cadence IC618是目前模拟RF设计比较常用的平台,界面和仿真器集成度比老版本舒服不少。ADE Explorer、Calculator、波形窗口和PDK的适配都很成熟,对于混频器这种需要进行瞬态和频谱分析的结构,操作起来顺手。
180nm工艺虽然不是最先进的,但它的PDK成熟、模型稳定,而且学校和企业里资源多。对学习混频器来说,180nm的阈值电压、迁移率、功耗和速度都比较“友好”,不会因为工艺过于先进导致一堆二阶效应干扰学习。所以我个人觉得,如果是第一次上手混频器仿真,180nm PDK加IC618是一个很稳的起点。
2. 环境准备与PDK配置
2.1 软件栈和版本注意事项
我使用的环境是Cadence IC618,仿真器是Spectre,PDK是180nm RF CMOS工艺库。实际版本号不重要,但尽量保证MMSIM版本和IC618匹配,否则仿真器可能起不来。安装PDK时,需要把PDK的库路径加到启动目录下的cds.lib或者lib.defs里。很多PDK安装包会自带cds.lib,安装完成之后会提示你把某个路径加到用户目录里。
在开始画电路之前,先检查三个东西:Library Manager里能不能看到PDK库,原理图库里有没有nch、pch、电阻和电容;Model Library配置里有没有指向PDK的spectre模型文件;Create Symbol的时候能不能正常生成。如果这三步都没问题,环境基本就算通了。
2.2 新建库并挂接PDK
打开IC618,进入Library Manager,然后执行:
File -> New -> Library库名我习惯叫mixer_tb,然后选择“Attach to an existing technology library”,在列表里选中PDK提供的工艺库。如果PDK安装正确,这里会看到对应的technology库。这个步骤不能省,否则后面画原理图会提示缺少工艺文件,或者器件模型加载不进去。
新建完成后,在mixer_tb库下面新建一个cell,命名为gilbert_mixer,工具类型选schematic。进入原理图编辑器之后,就可以从PDK库里调用晶体管了。
2.3 模型库和仿真器设置
画图只是第一步,真正仿真时要把PDK的模型装进Spectre。在ADE L或者ADE Explorer里选择:
Setup -> Model Libraries把PDK的xxxx.lib或者spectre.scs文件加进去,路径一般类似$PDK_DIR/models/spectre/。有些PDK还有SS、TT、FF角文件,也要一并加好,仿真时通过section选择。这里最容易出问题的是只把原理图库挂上,忘记加载模型库,最后仿真报一堆“device not found”或者“model undefined”。这个问题我后面单独写一节,因为遇到的人真的非常多。
3. 电路参数设计与原理图绘制
3.1 先定指标和拓扑参数
我设计的混频器用于2.4GHz射频接收机,本振频率2.5GHz,中频取100MHz,电源电压1.8V。目标转换增益大概10dB左右,电流功耗控制在2.5mA以内,这样整个单元功耗约4.5mW,作为教学和初版验证比较合适。
| 参数项 | 设计值 | 说明 |
|---|---|---|
| VDD | 1.8V | 180nm工艺标准电源 |
| RF频率 | 2.4GHz | 射频输入信号 |
| LO频率 | 2.5GHz | 本振信号 |
| IF频率 | 100MHz | 取LO与RF之差 |
| 尾电流Itail | 2.5mA | 由M7决定 |
| 负载电阻RL | 600Ω | 每边一个多晶电阻 |
| M1/M2尺寸 | 20μm/0.18μm | 射频跨导管 |
| M3-M6尺寸 | 16μm/0.18μm | 本振开关管 |
| M7尺寸 | 40μm/0.18μm | 尾电流源管 |
这些参数不是随便写的。180nm工艺下,NMOS阈值电压大约0.45V,电子迁移率约400μA/V²。如果让M1/M2每管流过1.25mA电流,宽长比取20μm/0.18μm,计算出来的gm大概在10.5mA/V左右。按公式(2/π)gmRL计算,理论转换增益约12dB,留了一点裕量给寄生和开关损耗,实际仿真结果会更低一些,这很正常。
3.2 偏置点和管子尺寸的具体计算
M7作为尾电流源,栅极接直流偏置。我希望它工作在饱和区,Vdsat取0.2V以上,这样对共模扰动不敏感。用饱和区电流公式估算:
Id = 0.5 * μnCox * (W/L) * (Vgs - Vth)^2
取Vgs=0.7V,Vth=0.45V,过驱动电压0.25V,μnCox约400μA/V²,W/L取40μm/0.18μm,计算得到Id约2.8mA。实际仿真时如果发现电流偏大或偏小,只需要微调M7的栅极电压即可。
M1和M2是电流截止的核心,gm要尽量大,但也不是越大越好。管子太宽会引入大寄生电容,直接影响射频输入端的高频特性和本振开关速度。经过折中,我把M1/M2总栅宽取20μm,采用4根5μm的finger,也就是叉指结构。这样既能降低栅电阻,又能改善匹配。
M3到M6开关管不用做太宽,16μm/0.18μm就够。开关管太宽虽然导通电阻小,但寄生电容大,会加大本振到输出的耦合,且开关工作点切换时间长。在180nm下,这个尺寸在0.6V本振摆幅下能够比较快地切换,仿真下来没有明显挂起。
负载电阻用PDK里的多晶电阻,阻值600Ω。选600Ω是因为它带来的直流压降是:
Vdrop = 1.25mA * 600Ω = 0.75V
所以输出共模点大约在1.05V,这个电压足够保证上面的开关管和下面的跨导管都处于饱和区。如果RL加到1000Ω,增益会高,但输出共模只剩0.55V,线性度和工作点都会出问题。
3.3 原理图连线细节
画原理图时,我建议严格保持对称。M3和M4是一对开关,源极接M1的漏端;M5和M6是另一对开关,源极接M2的漏端。M3漏端和M5漏端接同一个负载电阻R1,M4漏端和M6漏端接另一个负载电阻R2。输出差分信号从两个负载的下端取出,记为if_out_p和if_out_n。
本振信号要交叉连接:LO正相接到M3栅和M6栅,LO反相接到M4栅和M5栅。这个交叉如果不仔细很容易画错,画完后最好检查一下网络名:两个LO输入必须在开关管栅极处交换,不然输出到本振的隔离度会明显变差,仿真波形也会对不上。
底部M7的漏端接到M1和M2的公共源端,M7源端接地,栅极接Vbias。Vbias用直流电压源提供,电压从DC仿真结果里读,不够就调。为了让电路先跑通,我没有加ESD保护和输入匹配网络,属于纯混频器核心验证,这个阶段不需要。
3.4 测试激励怎么加
射频输入是差分信号。用一个直流电压加正弦波的source会比较直观,我习惯把RF正端和负端各放一个vsource:
VRF_P (rf_in_p 0) vsource type=sine dc=0.8 ampl=20m freq=2.4G VRF_N (rf_in_n 0) vsource type=sine dc=0.8 ampl=20m freq=2.4G phase=180RF信号幅度用20mV峰值,相当于差分幅度40mV。实际功率大约是-30dBm级别,对于第一次验证足够小,不会引起明显压缩。差分的好处是共模噪声和电源扰动在理想仿真里能抵消一部分,更接近真实双平衡工作状态。
本振信号类似,但幅度要大得多,保证开关管完全切换。我取直流0.9V,峰值0.6V,也就是LO高点1.5V、低点0.3V:
VLO_P (lo_in_p 0) vsource type=sine dc=0.9 ampl=0.6 freq=2.5G VLO_N (lo_in_n 0) vsource type=sine dc=0.9 ampl=0.6 freq=2.5G phase=180如果有条件,更规范的做法是用port加上拉下网络。但仿真初期用理想电压源就行,关键是把工作流程跑通。
4. 仿真实操:从瞬态到指标测试
4.1 先用DC仿真检查静态工作点
所有东西画完,我强烈建议先跑DC,不要直接跑瞬态。在ADE里选择:
analyses -> dc把输入电压源设为正常值,勾选“Save DC Operating Point”。仿真结束后,打开results里的DC Operating Points,查看以下关键节点的电压:
- M7的漏极电流,也就是尾电流,应该接近2.5mA;
- M1/M2的漏极电压,对应开关源节点,大概在0.8V上下;
- 两个输出节点Vout_p和Vout_n,应该都在1.05V左右;
- 所有MOS管都工作在饱和区。
如果DC工作点不对,问题多半出在偏置或者管子尺寸。我遇到过输出共模点掉到0.5V以下的情况,查下来是RL画成了3000Ω,而不是600Ω。这种低级错误在原理图阶段不会报错,但一到DC就藏不住了。
4.2 瞬态仿真配置与波形观察
DC没问题以后,再加瞬态分析:
analyses -> tran设置stop time为100ns,maxstep为10ps。2.5GHz本振的周期是0.4ns,10ps步长意味着一个周期采样40个点,精度足够。如果后续要看噪声或者更精细的频谱,可以把maxstep改到2ps,但仿真时间会翻倍。
跑完之后,在输出栏里plotif_out_p和if_out_n,再在Calculator里做一次v(if_out_p) - v(if_out_n)。混频器输出通常是差模信号,单端波形会因为共模和本振泄漏而显得很乱,差分波形才干净。波形幅度应该是包络为10ns周期的信号,因为IF是100MHz,对应10ns;同时载波和本振频率附近的高频分量也存在,看起来像调制波,这是正常的。
4.3 用FFT读取转换增益
快速验证转换增益,最直接的办法就是对差分输出做FFT。打开Calculator:
vt = v(if_out_p) - v(if_out_n) fft(vt)计算窗口我习惯选最后20ns到80ns这一段,避免起始瞬态影响。FFT点数取4096,窗函数用Hanning,这样频谱泄漏小。读取100MHz处的幅度值,这个值就是输出中频分量的峰值。
输入差分RF幅度是40mV峰值。如果FFT读出的100MHz分量是160mV峰值,转换增益就是:
gain = 20 * log10(160 / 40) ≈ 12dB
这个数可以跟手算的公式对照。理想情况是12dB左右,实际能做到5到8dB已经很正常,因为开关非理想、寄生电容和偏置都会吃掉一部分增益。如果差得太多,先查本振摆幅是否足够大,再查负载电阻实际阻值。
4.4 用PSS加PAC做更规范的变频增益
瞬态加FFT适合快速看结果,但如果要扫频或者测压缩点,还是用PSS加PAC更高效。逻辑是这样:本振是大信号,用来做周期稳态;射频是小信号,用来做交流分析。所以在PSS里只让LO源作为大信号参与,RF源在PSS阶段基本不起作用,然后在PAC里把RF作为小信号源,扫描2.39GHz到2.41GHz,最后看输出在100MHz处的响应。
具体操作时,在ADE里加PSS分析,beat frequency设成LO频率2.5GHz,harmonics数量给7,让本振的几次谐波被计算到。PSS收敛后,再加PAC分析,输入选择RF正负端口,输出选择差分输出,边带频率填100MHz。跑出来的曲线在2.4GHz频点上的值,就是该RF频率到IF端口的变频增益。
不同版本Cadence的菜单名稍微有差异,但原理都是“大信号定周期工作点,小信号算传递函数”。如果PSS不收敛,可以把tstab时间加长,或者先让LO幅度从0慢慢爬升,这是常用的收敛技巧。
4.5 1dB压缩点和线性度怎么快速看
混频器不是放大器,但同样关心输入功率大了之后增益会不会压缩。想快速估1dB压缩点,可以把RF信号幅度设成一个变量,比如RF_amp,然后在ADE里做parametric sweep。从20mV开始扫到200mV,每个点跑一次瞬态,再用FFT读取100MHz分量,最后画出转换增益随输入幅度的变化。
增益比小信号值跌了1dB对应的输入幅度,就是输入1dB压缩点。实际仿真中,这通常发生在输入RF幅度接近尾电流摆幅限制的时候。180nm下这个电路大概在-10dBm到-5dBm之间,比理论值低是正常的。
至于IIP3,需要双音测试。RF端口同时加2.4GHz和2.401GHz两个小信号,中频会落在99MHz和100MHz,再看三阶交调分量。这个在瞬态里仿真比较慢,有条件直接用HB或者QPSS。教学阶段先把转换增益和压缩点搞定就够用了。
4.6 噪声仿真先不要急
混频器噪声仿真比LNA复杂,因为要区分SSB和DSB,还涉及折叠噪声。如果你只是想验证混频功能,可以先跳过pnoise。等转换增益和线性度都正常了,再用pnoise分析,输入端口选RF,输出端选中频,噪声类型选sources,基于PSS结果跑。第一次跑出来噪声系数会偏大,不用慌,先看数量级对不对。
5. 常见问题与排查技巧实录
5.1 仿真报“器件未定义”或者“model undefined”
这个是我见过最多的问题。明明原理图里管子画得好好的,一仿真就报找不到器件。绝大多数情况是模型库没加载,或者加载的库不对。解决思路就两步:
- 到
Setup -> Model Libraries里检查PDK的makefile路径是否存在; - 到技术库设置里确认当前schematic所依赖的工艺库是PDK库,而不是一个空库。
另外一个坑是多库混用。比如从analogLib拖了一个nmos,又用PDK的RFnm,两者模型名不同,Spectre没法统一。建议全部使用同一PDK的射频管子,别混搭。
5.2 瞬态仿真不收敛
混频器开关管多,瞬态不收敛确实常见。我常用的处理手段是按优先级来:
- 先把maxstep调小,比如从10ps改成5ps;
- 把tran的
tstab加长,不要一上来就看输出,先让电路稳定; - 给偏置电压源不用阶跃信号,用带一定上升时间的脉冲或sine自然爬升;
- 如果还不行,在PSS里先跑一个LO-only的状态作为初始条件。
如果电路里加了理想电容,建议在关键节点并联一个很小的电阻到地,比如1GΩ电阻提供直流路径,也能显著改善收敛性。但要注意别影响工作点。
5.3 跑完波形看不到100MHz中频
如果输出端只有2.5GHz或者直流,没有100MHz,先别急着调电路,从测试条件排查。第一,确认RF和LO频率之差确实是100MHz;第二,确认你plot的是两个输出端的差,而不是单端;第三,确认本振直流偏置是否让开关管正常导通。
我自己遇到过一版LO直流给到0.5V,低点直接是负的?DD?,开关管基本处于亚阈值区,输出几乎没中频。后来把DC提到0.9V,波形立刻正常。开关级工作状态是整个混频器最敏感的地方。
5.4 工作点不对导致输出共模漂移
输出共模点如果严重偏离计算值,可能是负载电阻值画错,也可能是尾电流没达到设计值。快速定位方法:把RL短路掉,只跑DC看M7电流;如果M7电流对了,再把RL接上看输出共模。这样能区分是电流源问题还是负载问题。
表里列几个我常见的现象:
| 现象 | 可能原因 | 处理方法 |
|---|---|---|
| 输出共模太低 | RL太大或尾电流太大 | 降低RL或调低M7偏置 |
| 输出共模太高 | RL太小或尾电流不够 | 增大RL或调高M7偏置 |
| 增益几乎为零 | 本振没切换或偏置错误 | 查LO直流和摆幅 |
| 波形严重不对称 | 本振交叉连错 | 检查M3-M6接线 |
| 直流仿真就报错 | 模型没加载 | 检查Model Libraries |
5.5 仿真速度慢到无法忍受
混频器瞬态仿真确实慢,尤其是跑100ns加FFT。如果只是验证基本功能,可以先把stop time降到50ns,只保留后20ns有效数据做FFT。MAXSTEP不要无脑设成0.1ps,那样会等死人。用10ps,对于2.5GHz来说已经够采样了。如果要做参数扫描,优先选PSS或者QPSS,不要在tran里做大规模扫描。
6. 最后再分享几个实操习惯
混频器这种带开关的电路,麻烦点不在原理有多难,而在怎么让仿真稳定、让你看到的结果可信。我个人习惯是把所有管子先放在同一个cell里,用最干净的电源和地,不做复杂的打线。确认每个管子的工作点都对以后,再逐步加入匹配、ESD、寄生等模块。直接上来画完整电路往往问题叠问题,很难排查。
尾电流源M7我一开始用的理想电流源,虽然仿真跑得通,但后来换成真实NMOS管后发现输出共模偏了0.2V。所以建议第一次调试可以先用理想源定位功能问题,但最终仿真一定要换回PDK管子,否则工作点参考价值很低。
还有一个小技巧:仿真的波形截图里最好把LO和RF频率也plot出来,这样能直观看到开关切换是否正常。有时候不收敛或者增益偏低,从时域波形一眼就能看出是开关没切换,不用反复看数值。
如果能忍受收敛问题,不妨把这场仿真从头到尾做完。等熟练了,你还会发现Cadence IC618里很多自动化工具能帮你省时间,但在那之前,手算、原理图、DC、瞬态、FFT这个链路必须亲自走通。混频器设计是个“仿真多、玄学也多”的事,只有自己踩过一遍坑,后面做接收机链路才心里有底。