跳转至

SOP — CP / LPF 开环标定台架(阶段 2 前置)

主题目录:pll_loop_cal_20261004/(本机方案工作区);实施侧 .28:/projects/design/rain01/proj1/verif/loop_cal_0/。 环境事实见 docs/BASELINE.md;变更后的状态见 docs/HANDOFF.md。

1. 背景

阶段 2 要在 ADE-XL 建 test_lock/test_pnoise/test_mc。但:

  • pll_top 内的 CP 偏置支路(MPB/MRBP/MRBN/MNB)与 lpf 的 MOS 等效 R/C 元件值全是初值(pll_sch_20261003/SOP.md §10.8 / §11.8),环路工作点未知;
  • test_lock 单点按带载 179 管估算 ≈56 核时,用未标定的初值直跑有"白跑"风险。

故先搭开环台架做元件级"测现状",代价为秒级。工作点取 VCTRL = 0.8 V(带载 fvco≈6.2 GHz,fref=fvco/8≈775 MHz,N=8)。

2. 目标

项 可验证状态
CP 偏置与电流 量出 VBP/VBN 与充/放电流 Icp,含充放匹配度与随 VCTRL 的变化
LPF 元件 量出 R1/R2 等效电阻与 C1/C2 电容在工作点附近的取值
判定 明确现有初值是否可用;不可用则给出方向

3. 前置条件

  • 本机 root → 192.168.31.28 免密已通;涉及库/virtuoso 的必须 runuser -u rain01。
  • module load cadence && module load virtuoso/IC06.17.700;模型卡 proj1/verif/models/spectre_nom.include。
  • 纯离线仿真,不改任何库/cell,不需要关闭 GUI。

4. 影响范围

单机(.28)。只新增目录 /projects/design/rain01/proj1/verif/loop_cal_0/(属主 rain01:design), 不覆盖任何既有数据;不停服、无在跑作业依赖、无窗口限制。

5. 分步操作

步骤 1:同步台架(scp → /tmp → install -o rain01)

root 直接 scp 会带来 root 属主,故先落 /tmp 再 install -o rain01 落位。

cd /home/rain/Documents/eda_tools_ins/design/pll_loop_cal_20261004
scp -q bench/cp_chg.sp bench/cp_dis.sp bench/lpf.sp bench/cprobe.sp run_loop_cal.sh parse_bench.py root@192.168.31.28:/tmp/
ssh root@192.168.31.28 'M=/projects/design/rain01/proj1/verif/loop_cal_0; mkdir -p $M/bench; \
  install -o rain01 -g design -m 644 /tmp/cp_chg.sp /tmp/cp_dis.sp /tmp/lpf.sp /tmp/cprobe.sp $M/bench/; \
  install -o rain01 -g design -m 755 /tmp/run_loop_cal.sh $M/; \
  install -o rain01 -g design -m 644 /tmp/parse_bench.py $M/; chown -R rain01:design $M; ls -l $M $M/bench'

预期:文件属主 rain01 design。失败判断:出现 root 属主 → 重跑 chown -R rain01:design $M。

步骤 2:跑台架

ssh root@192.168.31.28 'M=/projects/design/rain01/proj1/verif/loop_cal_0; runuser -u rain01 -- bash $M/run_loop_cal.sh all'

三个台架 spectre completes with 0 errors。

注意事项与坑:

  • run_loop_cal.sh 的 cwd 是 loop_cal_0,网表在 bench/ 子目录,故 run_one 取 bench/<name>.sp——否则报 CMI-2011 Unable to open input file。
  • vsource 的 AC 幅度参数是 mag,不是 ac:写 ac=1 会被 SFE-30 静默忽略(只 Warning、不 Error),AC 结果全为 0——曾据此误判"容性为零"。已改 mag=1e6。
  • source /etc/profile 在 set -e 下会提前退出(实测 exit 127),本脚本刻意不启用 set -e(同 pll_cal_20261003/cal_run.sh)。
  • 台架用理想源钳位 VCTRL,其电流即 Icp;这是元件级台架,不含 CP 输出电阻与环路反馈。

步骤 3:解析

ssh root@192.168.31.28 'M=/projects/design/rain01/proj1/verif/loop_cal_0; cd $M; \
  python3 parse_bench.py psf_cp_chg/dc1.dc VCTRL VBP VBN vclamp:p mpb:d; \
  python3 parse_bench.py psf_lpf/dc1.dc VCTRLR vdif:p'

parse_bench.py 接受目录(取最大文件)或具体文件;--max 打印各列极值(用于瞬态探针)。 psfascii 复数输出为科学计数法(如 -1.112e-10),不需放大即可读。

6. 验证

检查 预期
三台架退出 SPECTRE_EXIT=0、日志 spectre completes with 0 errors
原始产物 psf_cp_chg/dc1.dc、psf_cp_dis/dc1.dc、psf_lpf/{dc1,dc2}.dc、psf_lpf/ac1.ac、psf_cprobe/tran1.tran.tran
解析 parse_bench.py 列出变量与数据点

失败判断:非 0 errors → 按 §7 回滚;解析为空 → 先 dump 文件头核对格式。

7. 回滚

本次全部为新增文件、未覆盖任何既有数据,故无备份文件。回到变更前状态即删除该目录:

ssh root@192.168.31.28 'rm -rf /projects/design/rain01/proj1/verif/loop_cal_0'   # [高危] 先确认路径

回滚后验证:ls /projects/design/rain01/proj1/verif/ 不含 loop_cal_0。

本机侧文档改动(docs/HANDOFF.md、docs/BASELINE.md、docs/PROJECT-MAP.md)的备份与台账: pll_loop_cal_20261004/backup/README.md。

8. 风险说明

风险 缓解
台架是扁平淡镜像,元件 W/L 与 cell 契约手工同步,可能漂移 每张网表头部注明来源 gen_cp.il/gen_lpf.il/gen_pll_top.il;cell 改动须同步改台架
理想源钳位 VCTRL,不含环路反馈与 CP 输出电阻 台架仅用于元件级取值,不能代表环路性能
端子顺序假定 (D G S B) 与 vco5_cal.sp 一致;AC 四位置探针在任一顺序下栅极都在第 2 位,结论与顺序无关
结论"该模型 MOS 无容性"与 vco5 起振矛盾 待复核:见附录"待复核项"

附录 A:实测结果(2026-10-04,nom 27 °C)

CP(VCTRL = 0.8 V)

量 值
VBP(P 支路) 0.550 V
VBN(N 支路) 0.412 V
Icp 充电 ≈15.3 µA
Icp 放电 ≈2.1 µA
充放失配 ≈7.3×
充电电流随 VCTRL 0.3 V→15.8 µA,0.8 V→15.3 µA,1.05 V→6.7 µA(强相关)

LPF 电阻(恒定 Vds = 20 mV 扫控制电压)

VCTRL (V) 0.3 0.4 0.5 0.6 0.7 0.8
R1=R2 (Ω) 359 462 798 2.9 k 31.5 k 730 k

⇒ 栅接 VDD、源在 VCTRL:Vgs = 1.1 − VCTRL,VCTRL 高时器件关断;工作点 0.8 V 处电阻近似开路。

LPF 电容 / MOS 容性

  • AC 探针:四个端子位置分别驱动、其余接地,|I| ≈ 1e-10 A(mag=1e6,100 GHz)⇒ C ≈ 1e-28 F。
  • 瞬态探针:1.1 V/10 ns 斜坡,四位置 |I| ≈ 1e-14 A;对照理想 1 pF 电容 1.1e-4 A(正确)。
  • ⇒ 在本模型卡 + 本仿真设置下,MOS 器件测不到电容(AC 与瞬态一致,对照正常)。

待复核项(重要):上述"MOS 无容性"与 vco5 能起振且频率随 VCTRL 变化(pll_cal_20261003 实测)矛盾。 若为真,则 vco5 的起振与频率基线可能是数值假象,docs/HANDOFF.md 的"关键基线"须重估。 建议首个复核动作:对 vco5 用两个不同 maxstep(如 10 ps / 1 ps)复跑,看频率是否随之变化——若随 maxstep 变化即为数值假象。

附录 B:交付物清单

交付物 位置
CP / LPF / 容性探针网表 pll_loop_cal_20261004/bench/{cp_chg,cp_dis,lpf,cprobe}.sp
运行脚本 / 解析器 pll_loop_cal_20261004/{run_loop_cal.sh,parse_bench.py}
备份与台账 pll_loop_cal_20261004/backup/(README.md)
实施侧台架 .28:/projects/design/rain01/proj1/verif/loop_cal_0/

附录 C:vco5 对照实验——"模型 MOS 无容性"的复核与结论修订(2026-10-04)

触发:附录 A 的容性探针给出"MOS 无容性",与 vco5 能起振且频率随 VCTRL 变化矛盾,必须复核。

方法(新工程 vco5_capchk_20261004/,实施侧 .28:proj1/verif/vco5_capchk_0/): 以 vco5 为已证敏感的载具——在输出节点 R0 上加一个已知电容,看频率位移。四组工况(stop = 200 ns,errpreset=conservative):

工况 maxstep R0 附加 频率
ms10p(基线) 10 ps — 7.8684 GHz
ms1p 1 ps — 7.8733 GHz
ms10p_c10f 10 ps 10 fF 理想电容 3.7837 GHz
ms10p_moscap 10 ps LPF 的 MOS 电容(W=10u/L=1u,栅=R0,D=S=B=GND) 7.8684 GHz(与基线 7 位一致)

结论(含对附录 A 的修订):

  1. vco5 频率基线是物理的,不是数值假象——maxstep 10 ps→1 ps 频率只差 0.06%。附录 A 中"若成真则 vco5 基线失效"的担心被推翻(HANDOFF 的"关键基线"继续有效)。
  2. 加 10 fF 使频率减半 ⇒ 该节点有效电容在数 fF 量级,环振频率确由电容决定;该载具对"加电容"高度敏感,控制有效。
  3. 把同位置的理想电容换成 LPF 那只 MOS 电容,频率与基线完全相同 ⇒ LPF 的 MOS 电容不贡献容性。这是在已证敏感的同一条台架上量到的,比附录 A 的孤立探针更可信。

修正后的 LPF 判定:LPF 两处都坏——R1/R2 在 VCTRL = 0.8 V 近似开路(附录 A),且 MOS 电容不贡献容性(本条)。

2026-10-04 再修订(见附录 F):上文"MOS 电容不贡献容性"及本条结论 3 已作废。该工况的 mcap (GND R0 GND GND) 把 D/S/B 接在未定义的 GND 上——Spectre 只认 0 为全局地,GND 在此是浮空节点,故实测无效。模型有完整 MOS 电容(capmod=2,10u/1u 实测 ≈285 fF),LPF 的电容设计有效;LPF 只剩 R1/R2 一处真问题。本条结论 1(vco5 频率基线物理有效)不受影响。

仍存的未解释点:环振节点那几 fF 电容来自何处(栅容?结容?ad/as 默认 0 之外的机制?)与"MOS 电容测不到容性"尚未统一解释。不影响上述设计判定,留作后续核查,不阻塞。

留痕(不得静默删除):附录 A 中"该模型 MOS 无容性 ⇒ 与 vco5 起振矛盾 ⇒ 基线可能失效"的推断,其中"基线可能失效"部分已被本轮推翻;"MOS 电容不贡献容性"部分经本轮同载具复测成立。

附录 D:CP 偏置支路改设计——消除 7.3× 充放失配(2026-10-04)

触发:附录 A 实测 CP 充电 ≈15.3 µA、放电 ≈2.1 µA,失配 ≈7.3×。HANDOFF §2#4 将其列为"属设计问题,须改拓扑/偏置后重标"。本轮定位根因并给出改后的偏置拓扑,已在无头台架上实测验证(尚未改进生成器与 cell)。

根因(为何失配 7.3×):pll_top 的两条偏置支路原本各自用电阻设定电流,但两个"电阻"管工作区并不对称:

支路 器件 接法(D G S B) 工作区 电流
P MRBP NMOS 500n/2u (VBP VDD 0 0) ⇒ Vgs=1.1、Vds=0.55 三极管区(真电阻) 15.3 µA
N MRBN NMOS 500n/2u (VDD VDD VBN 0) ⇒ G=D=VDD,Vgs=Vds=0.688 饱和区(电流源,非电阻) 2.1 µA

两条支路的参考电流天生不同(7.3×),再经 1:1 镜像传到 CP 的 MP1/MN1,即成为充放电流失配。

改后拓扑(mirror-unified,器件数不变):把 N 支路从"自己设定电流"改为"镜像复制 P 支路的电流",只把 MRBN 换成 MPB2:

branch P (reference, sets Iref): VDD - MPB(diode,1u/200n) - VBP - MRBP(triode,500n/2u,G=VDD) - GND
branch N (mirrors  P)          : VDD - MPB2(PMOS,1u/200n,G=VBP) - VBN - MNB(diode,500n/200n) - GND

⇒ I(MPB2)=I(MPB)=Iref ⇒ I(MNB)=Iref ⇒ Iup=Idn(一阶)。两条支路仍各自对地、压降不叠加,故在 1.1 V 下可行(这是当初拆两条独立支路的原因,本轮保留该结构、只统一电流来源)。

实测(nom 27 °C,新台架):

量 旧设计 新设计
VBP / VBN 0.550 / 0.412 V 0.55044 / 0.5523 V
参考支路电流(P / N) — −15.689 / +15.687 µA(差 0.01%)
Icp 充电 @VCTRL=0.8 15.3 µA 15.29 µA
Icp 放电 @VCTRL=0.8 2.1 µA 15.62 µA
充放失配 ≈7.3× ≈1.02×(2.2%)

残余失配归因:2.2% 来自镜像管与参考管的 Vds 不等(MP1 充电时 Vds≈0.3 V、MPB 0.55 V;MN1 放电 Vds≈0.8 V、MNB 0.55 V)引起的沟长调制;台架不含开关电荷注入/时钟馈通。可后续以加长 L 或(若电压允许)cascode 进一步压低,不阻塞。

未做:① 未改 gen_cp.il / gen_pll_top.il 与 pll45/pll_top(待拓扑确认);② 未做 corner(ss/ff × 温度)复验,低压下 Vth 漂移会改变 VBP/VBN 与余量,标定时须补;③ 电流绝对值(Iref 由 MRBP 设定)与环路带宽的匹配仍属阶段 2 后续标定项。

交付物:台架 bench/cp_fix_chg.sp、bench/cp_fix_dis.sp;跑法复用现有脚本 bash run_loop_cal.sh cp_fix_chg|cp_fix_dis(脚本按名取 bench/<name>.sp,无需改脚本);解析 python3 parse_bench.py psf_cp_fix_<ph>/dc1.dc VCTRL VBP VBN mpb:d mnb:d mpb2:d vclamp:p。旧台架 cp_chg.sp/cp_dis.sp 当时原样保留作对照;2026-10-04 实施到 cell 时已同步为新拓扑(见附录 E)。

附录 E:CP 偏置改设计 → 实施到 cell(2026-10-04)

触发:用户确认附录 D 的 mirror-unified 拓扑,要求实施到 cell。属 C 类变更(改生成器、重建 pll45/pll_top)。

改动(方案侧 pll_sch_20261003/gen/):

文件 改动
gen_pll_top.il 实例 MRBN(NMOS_VTG 500n/2u) → MPB2(PMOS_VTG 1u/200n);端子 G→VBP、D→VBN、S→VDD、B→VDD;头部注释 / 实例清单 / 坐标注释 / prog 变量同步更新。走线坐标全部不变——PMOS 的 S/D 与 NMOS 恰好上下对调,VDD riser 与 VBN 节点原位复用,仅 gate stub 标签由 VDD 改 VBP
chk_pll_top.il 期望表 MRBN 行 → MPB2(G→VBP、D→VBN、S→VDD、B→VDD)
bench/cp_chg.sp、cp_dis.sp 偏置段同步为新拓扑(SOP §8 风险表要求「cell 改动须同步改台架」)

计数不变:insts=9 / nets=11 / terms=3 / instTerms=41。

验证(无头,2026-10-04):

检查 结果
生成 pll45/pll_top SKILLRC=0;INSTS=9 NETS=11 TERMS=3 SHAPES=88;VERDICT pll_top generated
结构/连通自检 chk_pll_top.il CHK insts=9 nets=11 terms=3 instTerms=41 mismatches=0;VERDICT PASS
离线复现 GUI Check&Save probe_pll_top_sync.il SCHCHECK pll_top -> ((0 0));Check&Save 后 11 个 net 名全保留(无 netNN),terms = REF/VDD/GND
台架 cp_chg/cp_dis(新拓扑) 均 spectre completes with 0 errors;两参考支路电流 I_mpb = −15.689 µA vs I_mnb = +15.686 µA(差 0.02%);@0.8 V 充/放 = 15.29 / 15.62 µA(失配 1.02×)
GUI 复看(用户,2026-10-04) MPB2(PMOS_VTG 1u/200n:栅 VBP / 源·bulk VDD / 漏 VBN)与 MPB/MRBP/MNB 图面与连接目视无误;Check and Save 无报错

回滚:备份见 backup/README.md(gen/gen_pll_top.il.bak.20261004-052328、bench/cp_chg.sp.bak.20261004-052521、bench/cp_dis.sp.bak.20261004-052521)。回滚 = 用备份覆盖本地方案侧与 .28:proj1/verif/gen/ 实施侧同名文件(两侧原 md5 同为 038d2bd9…),再重跑 gen_pll_top.il + chk_pll_top.il + probe_pll_top_sync.il。

未做:① 未做 ss/ff × 温度 corner 复验(低压 Vth 漂移会改 VBP/VBN 余量,标定阶段补);② 参考电流 / 环路带宽标定仍属阶段 2 后续。

GUI 复看(2026-10-04 已通过):用户打开 pll45/pll_top 确认 MPB2 与相关 4 管图面/连接无误,Check and Save 无报错。坑:load("pll45/pll_top" "schematic") 不是打开 cellview 的方法——load() 只加载 SKILL .il 文件,会报 can't access file(实测);打开 cellview 用 Library Manager 双击,或 CIW hiOpenWindow(?cellView "pll45 pll_top schematic")。

交付物:方案侧 pll_sch_20261003/gen/{gen_pll_top.il,chk_pll_top.il};实施侧 .28:/projects/design/rain01/proj1/verif/gen/;台架 pll_loop_cal_20261004/bench/{cp_chg,cp_dis,cp_fix_chg,cp_fix_dis}.sp。

附录 F:LPF 判定复核——"MOS 无容性"是台架地浮空造成的假象(2026-10-04)

触发:阶段 2 按 HANDOFF §2#4 重做 LPF。重读台架时发现 lpf.sp、cprobe.sp 与 vco5_capchk 的 ms10p_moscap 三处都把探针器件的 D/S/B 接在 GND 上,而这些网表从未定义 GND 节点;同一文件里其它器件用的却是 0(真地)。

根因(Spectre 的地节点约定):Spectre 只把 0 当全局地,裸写的 GND 是普通节点名。上述网表没有任何地方把 GND 连到 0,于是它成为浮空节点,仅靠 gmin(默认 1e-12 S)兜底。小信号下栅通过 Cox 把这个浮空节点"自举"到跟随栅压,栅-沟道间几乎没有电压差 ⇒ 位移电流塌陷到 ~1e-14 A,MOS 看起来"无电容"。

单变量复现(只加一行 vgnd (GND 0) vsource dc=0,其余一字不改):

台架 量 改前 改后
cprobe.sp 栅端峰值电流(1.1 V/10 ns 斜坡) ~1e-14 A 3.13e-05 A
cprobe.sp 对照:理想 1 pF 1.1e-04 A(正确) 1.1e-04 A
lpf.sp vp2:p(栅位)AC 峰值 ~1e-10 A 1.595e+05(mag=1e6,归一 ≈254 fF @100 GHz)

⇒ Cgg(10u/1u) = 3.13e-05 / 1.1e8 ≈ 285 fF,与 Cox 手算(εox/toxe × Weff×Leff ≈ 300 fF)一致。

结论修正:

  1. 模型有完整的 MOS 电容——NMOS_VTG.inc 带 capmod=2、toxe=1.14n、cgso/cgdo/cgsl/cgdl、cjs/cjd,仿真路径正常。
  2. LPF 的电容设计有效(MC1/MC2 = 10u/1u MOSCAP ≈ 285 fF),不是缺陷。
  3. ⇒ LPF 由"两处都坏"修正为"一处":只有 R1/R2 是真问题(R 台架用的是 0,测量可信)。
  4. 附录 C 结论 3 作废("LPF 的 MOS 电容不贡献容性")——该工况 ms10p_moscap 用了同一个浮空 GND。附录 C 遗留的"节点那几 fF 电容来源未解释"也随之解释(即器件自身电容)。
  5. 附录 A 的 R 表(0.3 V→359 Ω … 0.8 V→730 kΩ)不受影响,继续有效。

R 真问题与候选方案(新台架 bench/lpf_r.sp,Vds = 20 mV 扫 VCTRL):

方案 R@0.7 V R@0.8 V R@0.9 V
现设计 单NMOS (G=VDD, B=GND) 31.5 kΩ 730 kΩ 23 MΩ(开路)
M1 纯PMOS W/L=1u/50n 747 Ω 570 Ω 480 Ω
M2 纯PMOS W/L=200n/2u 241 kΩ 166 kΩ 127 kΩ
M3 互补TG W/L=1u/50n 730 Ω 570 Ω 480 Ω
M4 互补TG W/L=200n/2u 238 kΩ 166 kΩ 127 kΩ
  • 根因:单 NMOS 的 Vgs = VDD − VCTRL,VCTRL 进入 VCO 工作范围(0.7~0.9 V)后跌破 Vth ⇒ 关断。
  • 改法:换成单 PMOS(G=0、B=VDD、D/S = 两端),Vgs = −VCTRL,在 VCO 工作范围内完全导通;器件数不变。
  • 互补(CMOS-TG)无额外收益:0.7~0.9 V 内 NMOS 本就关断,M3/M4 与 M1/M2 逐点相同(见上表)。故不采用,省一只管子与一处 N 阱接法。
  • 尺寸即 R 的旋钮:W/L 20→0.1(200×)使 R 覆盖 ≈0.5 kΩ~240 kΩ(300×)。目标 R 须先定环路带宽(零点 R2·C2 = 1/ω_z),当前带宽/相位裕度未定(HANDOFF §2#4)。

实施(2026-10-04,用户拍板「换单 PMOS、尺寸待定」后):

文件 改动
pll_sch_20261003/gen/gen_lpf.il MR1/MR2:NMOS_VTG → PMOS_VTG;端子归属改为 G→GND、B→VDD、S→VIN/VCTRL、D→VCTRL/N2。走线几何全不变(PMOS 的 S/D 与 NMOS 恰好上下对调),仅标签互换 + 原 bulk 侧新增 VDD 端口、原 G 侧端口改挂 GND;尺寸保持 1u/50n 占位
pll_sch_20261003/gen/chk_lpf.il 期望表按新拓扑更新
pll_sch_20261003/gen/probe_lpf_sync.il 新建:对 lpf 离线复现 GUI Check&Save(同 probe_pll_top_sync.il 手法)

验证(无头,2026-10-04):

检查 结果
生成 pll45/lpf SKILLRC=0;REOPEN insts=4 nets=5 terms=("VIN" "GND" "VDD" "VCTRL");VERDICT lpf generated
结构/连通自检 chk_lpf.il CHK insts=4 nets=5 terms=4 instTerms=16 mismatches=0;VERDICT PASS(计数与改前一致)
离线复现 Check&Save probe_lpf_sync.il SCHCHECK lpf -> ((0 0));AFTER_CHECK nets=("GND" "N2" "VDD" "VCTRL" "VIN")(5 名全保留、无 netNN);terms=("VIN" "GND" "VDD" "VCTRL")
自检复跑(sync 之后) VERDICT PASS
GUI 复看(用户,2026-10-04) 图面核对通过:MR1/MR2 均显示 "PMOS_VTG" l=50n/w=1u,G 侧接 GND、bulk 侧接 VDD,MR1 上脚收 VIN;MC1/MC2 仍 NMOS_VTG 10u/1u。注:截图未含 CIW 的 Check and Save 输出,故 Check&Save 一步以离线复现 schCheck ((0 0)) 为准

复用注意:GND 现在有 2 个 pin(原 VDD 端口位置改挂 GND,VDD 移到原 bulk 侧),terms 仍按 net 计为 4,不受影响。

回滚:备份见 backup/README.md(gen/gen_lpf.il.bak.20261004-054820、gen/chk_lpf.il.bak.20261004-054820)。回滚 = 用备份覆盖方案侧与 .28:proj1/verif/gen/ 同名文件,重跑 gen_lpf.il + chk_lpf.il + probe_lpf_sync.il。

未做:① R 尺寸仍为占位 1u/50n(≈570 Ω @0.8 V),待环路带宽定后重定,并同步 bench/lpf_r.sp;② C1:C2 仍同为 10u/1u(285 fF : 285 fF),标准二阶环路滤波器应 C1 ≫ C2,与 R2 一并待环路参数确定;③ 未做 corner;④ pll_top 未重建(LPF 端口未变,但尚未复跑 pll_top 全链确认)。

坑(已同步进 BASELINE §7.6):本项目 cell 的端口名就是 GND(lpf/cp/pll_top 都有),平铺台架或测试激励里必须显式把它绑到 0,否则重犯本坑;阶段 2 建 ADE-XL test 时尤其要看住。危险信号:同一网表里 0 与 GND 混用。

交付物:台架 bench/lpf_r.sp(新);bench/lpf.sp、bench/cprobe.sp 各加一行地定义;生成器 gen/{gen_lpf.il,chk_lpf.il,probe_lpf_sync.il}。备份与台账见 backup/README.md。

附录 G:环路参数定标与 LPF 元件尺寸实施(2026-10-04)

触发:HANDOFF §2#4 的下一步——① 定环路带宽 → 重定 R 尺寸与 C1:C2;② CP 偏置 corner 复验(本附录只做 ①,② 未做)。

设计输入(实测):N=8、fref=fvco/N=775 MHz(VCTRL=0.8 V 带载 fvco≈6.2 GHz)、Icp=15.3 µA、Kvco=13.68 GHz/V(带载 0.7→4.8294、0.9→7.5656 GHz 的弦斜率)。环路滤波器拓扑(gen_lpf.il):VIN--R1-->VCTRL,C1: VCTRL→GND(分流),R2+C2: VCTRL→N2→GND(串联)。

推导(这条拓扑的定式):Z(s)=C1∥(R2+C2),且 ωz=1/(R2·C2)、ωp=(C1+C2)/(R2·C1·C2),故 ωp/ωz = 1 + C2/C1。

⚠️ 方向性修正:要相位裕度(ωp>ωz)必须 串联支路电容 MC2(N2 端)大于分流电容 MC1(VCTRL 端)。附录 F「未做」项写的"标准二阶应 C1≫C2"若按本原理图命名(C1=分流)执行,方向是反的,会进一步压低 PM(比例 1.1 → PM≈10°)。按角色说才对:串联电容大、分流电容小。

现状旧值(R2=570 Ω、C1=C2=285 fF)实测 fc≈1.39 GHz、PM≈19.5°(带宽逾 fref 的 1/4,连续时间近似失效)——不可用。

选定方案(用户拍板 fref/20、PM=60°):

量 目标 实测/取值
R2(零点电阻) 10.0 kΩ@0.8 V 1.68u/1u(基准 1.14u/1u 实测 14.77 kΩ,按 W/L 反比)
C1(分流,VCTRL 端) 118 fF 4.54u/1u(4.54 µm²×25.98 fF/µm²)
C2(串联,N2 端) 1.53 pF 59u/1u(58.9 µm²×25.98 fF/µm²)
MR1 非环路整形,不动 1u/50n(VCTRL=Icp·[C1∥(R2+C2)] 与 R1 无关;保持小值使 CP 漏端 VIN 贴近 VCTRL)
派生 fz=ωz/2π=10.4 MHz、fp=ωp/2π=145 MHz、fc=fref/20≈38.8 MHz、PM=60° —

实施(C 类变更):改 pll_sch_20261003/gen/gen_lpf.il 的 MR2/MC1/MC2 尺寸与头部注释(器件数/走线/端口全不变),同步 .28:proj1/verif/gen/,重建 pll45/lpf。

验证(无头,2026-10-04):

检查 结果
gen_lpf.il VERDICT lpf generated(INSTS=4 NETS=5 TERMS=4)
chk_lpf.il CHK insts=4 nets=5 terms=4 instTerms=16 mismatches=0、VERDICT PASS
probe_lpf_sync.il(离线复现 GUI Check&Save) SCHCHECK lpf -> ((0 0));Check&Save 后 5 个 net 名全保留
bench/lpf_el.sp(元件级,电感偏置) MR2=14.77 kΩ@0.8 V(1.14u/1u);MOS 电容密度 25.98 fF/µm²
bench/lpf_ac.sp(成品滤波器 AC 阻抗) 实测 |Z| 与设计值在 5–50 MHz 内吻合 1–5%;平台 ≈10.3 kΩ@20 MHz;低频有效 C2≈1525 fF

两条台架陷阱(已同步进 BASELINE §7.7):

  1. 栅隧穿 → 1 TΩ 偏置失效:igcmod=1 使 MOS 栅有隧穿直流电流,resistor r=1e12 偏置被拉垮,电容在错误偏压下量得 ≈4 倍偏低(369 fF vs 真值 1403 fF)——本轮据此一度把 C2 目标面积估大 4 倍。正解:栅偏置用 inductor l=1e6(直流短路、交流开路);小信号电容取 C=Im(1/V)/ω,勿用 |V|。
  2. 节点名与参数名同名:参数 vctrl 与节点 VCTRL 同名(大小写不敏感)会使 dc=vctrl 解析异常,早期 lpf_ac.sp 因此得到 |N2|=0 的怪异结果。参数改名 vc0。

回滚:备份见 backup/README.md(gen_lpf.il.bak.20261004-060347;bench_lpf_ac.sp.bak.20261004-061725)。回滚 = 用备份覆盖方案侧与 .28:proj1/verif/gen/ 同名文件,重跑 gen_lpf.il+chk_lpf.il+probe_lpf_sync.il。

未做:① MR1 未改(非环路整形,保留占位);② CP 偏置 ss/ff×温度 corner 复验未做;③ MOS 电容随 VCTRL(0.7–0.9 V)与 corner 的漂移未标定;④ pll_top 未重建(LPF 端口未变,但两次 LPF 尺寸改动后未复跑全链);⑤ 元件级验证到 ωc 附近为止,未在 pll_top 做闭环锁定仿真。

交付物:生成器 pll_sch_20261003/gen/gen_lpf.il;台架 bench/{lpf_ac,lpf_el,lpf_cv,lpf_cap,lpf_rev}.sp;备份与台账见 backup/README.md。

附录 H:CP 偏置与 LPF 的 corner × 温度复验(2026-10-04)

触发:HANDOFF §2#4 的下一步——补 CP 偏置(附录 E)与 LPF(附录 G)的 ss/ff × 温度复验;两份附录的「未做」项均列此项。

方法:新增 run_loop_corner.sh + parse_corner.py(本目录),对三张现行台架(cp_fix_chg/cp_fix_dis/lpf_ac)做参数化副本——sed 换模型 include(spectre_{nom,ss,ff}.include)+ 插一行 simulatorOptions options temp={27,85}——生成 18 张网表(bench_corner/),全部跑通(0 errors;ff corner 另有 5 条 PDK 模型卡 warning,属 toxref/Toxe 已知提示),产物 psf_corner_<bench>_<corner>_<T>C/。未改库、未改设计。

结果 1:CP 充放失配(VCTRL = 0.8 V)

corner T(°C) Ichg (µA) Idis (µA) Idis/Ichg
nom 27 15.29 15.62 0.979
nom 85 6.804 6.924 0.983
ss 27 14.16 14.42 0.982
ss 85 6.330 6.444 0.982
ff 27 16.22 16.61 0.977
ff 85 7.154 7.253 0.986

⇒ 失配 1.4%~2.3%,全部 corner 稳健:附录 D/E 的镜像偏置改设计(7.3× → 1.02×)在 ss/ff × 85 °C 下同样成立。通过。

结果 2(新发现,重要):Icp 强温度相关

27 → 85 °C:Ichg 15.29→6.80(nom,−55.5%)、14.16→6.33(ss,−55.3%)、16.22→7.15(ff,−55.9%)。 根因:Iref 由 MRBP(NMOS 三极管电阻,G=VDD)设定,MOS 电阻温度系数大(迁移率随温度下降)。 影响:fc ∝ Icp ⇒ 高温下环路带宽约减半(38.8 → ~17 MHz 量级)。

结果 3:LPF |Z|(Ω,成品台架 lpf_ac)

corner T(°C) 1 MHz 10 MHz 38.8 MHz 100 MHz 145 MHz 500 MHz
nom 27 70.2 k 13.2 k 8.94 k 6.57 k 4.89 k 1.63 k
nom 85 72.2 k 20.4 k 14.45 k 8.12 k 5.32 k 1.41 k
ss 27 82.8 k 13.65 k 9.47 k 6.80 k 4.99 k 1.62 k
ss 85 85.3 k 21.4 k 15.06 k 8.24 k 5.35 k 1.39 k
ff 27 49.1 k 12.9 k 8.46 k 6.34 k 4.79 k 1.63 k
ff 85 52.4 k 19.5 k 13.84 k 7.99 k 5.29 k 1.42 k

以 nom/27 为基准,设计点 fc = 38.8 MHz 处 |Z| 从 −5%(ff/27)到 +69%(ss/85);主导因素是温度(85 °C 使 10–38.8 MHz 段普遍升高 51%~64%),27 °C 下 corner 影响较小(ff 低频降约 30%)。145 MHz 及以上漂移 ≤ 15%。

判定与边界:

  • CP 失配:通过(全 corner ≤ 2.3%)。
  • LPF |Z|:给出漂移区间(fc 处 −5% ~ +69%)。但 |Z| 只是开环 T(s) 的一部分,且随温度 |Z| 升、Icp 降方向相反,fc 与 PM 的净变化须在阶段 2 闭环(或补 Kvco 的 corner 数据)才能判定——本轮不下 PM 结论。
  • 新发现(Icp 温度系数 −55%)是设计级事项,见「未做」③。

跑法(可复现):

ssh root@192.168.31.28 'M=/projects/design/rain01/proj1/verif/loop_cal_0; runuser -u rain01 -- bash $M/run_loop_corner.sh'
ssh root@192.168.31.28 'M=/projects/design/rain01/proj1/verif/loop_cal_0; cd $M; runuser -u rain01 -- python3 parse_corner.py'

幂等:脚本每次先清掉自己的 bench_corner/*.sp 与 psf_corner_* 再重算;复跑一次 18 个台架全 0 errors、解析数字逐位一致(已验)。

两条机制性陷阱(已同步进 BASELINE §7.8):

  1. Spectre 网表首行恒被当作注释——simulator lang=spectre 若写在第 1 行会失效,整份文件按 spice 解析;症状是 tran1 之类被当成传输线元件(CMI-2484 RLGC / SFE-874 Unexpected end of file)。台架首行必须是注释。
  2. 温度只能用 simulatorOptions options temp=<T> 设置(本次实测):写在 analysis 语句上的 temp= 被静默忽略(log 仍打印 27 C,无 warning);全局 options 写法 log 显示 temp = 85。

未做:① 未在 85 °C 下重测 Kvco(口径见 div8_ghz_20261003)⇒ PM 净变化未判定;② 未做 pll_top 全链复跑(HANDOFF §2#4 第②项);③ 未评估 Icp 温度系数(−55%)的设计对策(如改温度更稳的 Iref)。

交付物:run_loop_corner.sh、parse_corner.py、bench_corner/(18 张生成的网表);实施侧 .28:proj1/verif/loop_cal_0/ 同名;备份与台账见 backup/README.md。

附录 I:Icp 温度系数的设计对策评估(2026-10-04)

触发:附录 H「未做 ③」——Icp 随温度 27→85 °C 降 ~55%(全 corner 一致),需评估设计对策。

一、机理

  • 偏置结构(gen_pll_top.il):分支 P = VDD—MPB(PMOS 二极管, G=D)—VBP—MRBP(NMOS 三极管电阻, G=VDD)—GND 设定 Iref;MPB 为 CP 源管 MP1 的 1:1 镜像 ⇒ Icp ≈ Iref ≈ (VDD − Vdiode)/R(MRBP)。
  • MRBP(w=500n l=2u、G=VDD 深三极管)阻值由 µ(T)·Cox·(W/L)·(Vgs−Vth) 决定;迁移率 µ 随温度降 ⇒ R 升 ⇒ Iref/Icp 降。

二、净影响评估(关键:存在部分自补偿)

  • 一阶关系 fc ∝ Icp·Kvco·R2;同批实测 LPF |Z|(中频段 ≈R2)在 10–38.8 MHz 随温度升 51%~64%(附录 H 结果 3),与 Icp 反向。
  • 一阶估算:fc(85)/fc(27) ≈ 0.445 (Icp) × ~1.6 (R2) ≈ 0.72 ⇒ 净漂移约 −28%,远小于单看 Icp 的 −55%。
  • 洞见:Icp 的设定电阻(MRBP,NMOS MOS 电阻)与 LPF R2(PMOS MOS 电阻)同工艺、温漂反向作用于 fc,一阶部分抵消。
  • 未判定项:① Kvco(T) 未测;② PM 净变化须算 fz=1/(2πR2C2) 温漂(R2 升 ⇒ fz 降约 38%)后判定。

三、对策候选与评估

候选 有效性 代价 / 风险 结论
1. 接受温漂,不改硬件 视 PM 全温域裕量 0 改动;须先补 Kvco(T) + 算 PM 前置:先量化再决定
2. 让 Iref 与 R2 同型同偏置(MRBP 改 PMOS、G=GND),使 Icp ∝ 1/R2 高:fc ∝ Icp·R2 一阶温度无关 改 1 器件 + 重连;须过 VDD 余量(现分支注释已言余量紧);须温度台架复验 首选实做方向(若候选 1 不达标)
3. 让 Icp 温度恒定(poly 电阻 / 带隙 Iref) 低 / 反向:会破坏自补偿——Icp 恒定时 fc ∝ R2,漂移可能更大 引入非 MOS 器件、偏离全 MOS 路线 不推荐
4. 提高环路裕量(降 fc 设计点、提 PM) 中:用裕量吸收漂移 需按附录 G 重标环路 备选
5. 系统级自适应(AFC / 可编程 Icp) 高 复杂,超出阶段 2 范围 暂不考虑

四、建议步骤

  1. 先补 Kvco(T)(85 °C 重测,口径同 div8_ghz_20261003,1–2 点、成本低)⇒ 算净 fc/PM。
  2. PM 达标 ⇒ 选候选 1(接受 + 记录),不改设计。
  3. PM 不达标 ⇒ 实施候选 2(MRBP→PMOS 同型电阻),温度台架复验后再落 cell。

未做:① Kvco(T) 未测;② 候选 2 的 VDD 余量未核;③ PM 净变化未判定。

交付物:本评估(无新增脚本 / 无库改动)。

附录 J:Kvco(T) 85 °C 重测与净 fc/PM 判定(2026-10-04)

触发:附录 I「建议步骤 1」——先补 Kvco(T) 再定案。

方法:新增 div8_ghz_20261003/div8_temp_run.sh(复用 div8_0/tb_div8.sp,按参数换 VCTRL / 温度 / corner 生成网表,不修改 tb_div8.sp)。温度用顶层 simulatorOptions options temp=<T>(见 BASELINE §7.8;写在 analysis 上会被静默忽略)。nom corner、VCTRL=0.7/0.9 两点,各在 27 与 85 °C 量 R0(VCO)频率(parse_cal.py)。

实测(nom corner,各点 0 errors):

VCTRL 27 °C 85 °C 85/27
0.7 V 4829.4 MHz 2835.85 MHz 0.587
0.9 V 7565.55 MHz 4462.32 MHz 0.590
  • 27 °C 0.9 V 点 = 7565.55 MHz,与 2026-10-03 实测 7565.5 MHz 逐位一致 ⇒ 方法可信。
  • Kvco(27)=13.681 GHz/V;Kvco(85)=8.132 GHz/V;比值 0.594。
  • 副产品(重要):fvco 随温度整体降约 41%(两点一致)——是比 Icp 更需关注的系统级温漂。

净 fc / PM 估算(一阶,nom;fc ∝ Icp·Kvco·R2):

  • Icp(85)/Icp(27)=0.445(附录 H)· Kvco 比值 0.594 · R2 比值 ≈1.6(附录 H 的 LPF |Z| 中频段) ⇒ fc(85)/fc(27) ≈ 0.423 ⇒ fc ≈ 16.4 MHz(设计点 38.8 MHz)。
  • fz ∝ 1/R2 ⇒ fz ≈ 6.5 MHz;fp ∝ 1/R2 ⇒ fp ≈ 90.6 MHz。
  • PM = atan(fc/fz) − atan(fc/fp) = atan(2.52) − atan(0.181) ≈ 68.4° − 10.3° = **≈58°**(27 °C 为 60°)。

判定与对附录 I 的修正:

  • PM 基本保持(≈58°) ⇒ 附录 I 的候选 1(接受 + 记录)在相位裕度上成立。
  • 但附录 I 曾按「Kvco 不变」估净 fc 漂移 −28%;补上 Kvco(T) 后净 fc 漂移实为 −58%(Kvco 也随温降 41%)⇒ 环路带宽近腰斩(38.8→16.4 MHz,锁定时间约 ×2.4);叠加 fvco 降 41%,是定案时须新增评估的两项。

未做:① 未测 ss/ff 的 Kvco(T)(附录 H 显示 Icp 温漂各 corner 一致,nom 代表性较强);② 未做闭环锁定仿真验证;③ fvco 41% 温漂的对策未评估。

幂等 / 回滚:div8_temp_run.sh 每次按参数重生成网表,产物按 tag 独立;未修改任何既有文件,回滚 = 删该脚本与其 tb_div8_v*_C_nom.* / psf_v*_C_nom/ 产物。

交付物:div8_ghz_20261003/div8_temp_run.sh;产物 .28:proj1/verif/div8_0/{tb_div8_v{07,09}_{27,85}C_nom.sp, psf_v*_C_nom/}。


来源:/home/rain/Documents/eda_tools_ins/design/pll_loop_cal_20261004/SOP.md | 最后更新:2026-10-04 16:48(由 build/sync.py 同步,请勿在站点侧修改)