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 的修订):
- vco5 频率基线是物理的,不是数值假象——
maxstep10 ps→1 ps 频率只差 0.06%。附录 A 中"若成真则 vco5 基线失效"的担心被推翻(HANDOFF 的"关键基线"继续有效)。 - 加 10 fF 使频率减半 ⇒ 该节点有效电容在数 fF 量级,环振频率确由电容决定;该载具对"加电容"高度敏感,控制有效。
- 把同位置的理想电容换成 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)一致。
结论修正:
- 模型有完整的 MOS 电容——
NMOS_VTG.inc带capmod=2、toxe=1.14n、cgso/cgdo/cgsl/cgdl、cjs/cjd,仿真路径正常。 - LPF 的电容设计有效(MC1/MC2 = 10u/1u MOSCAP ≈ 285 fF),不是缺陷。
- ⇒ LPF 由"两处都坏"修正为"一处":只有
R1/R2是真问题(R 台架用的是0,测量可信)。 - 附录 C 结论 3 作废("LPF 的 MOS 电容不贡献容性")——该工况
ms10p_moscap用了同一个浮空GND。附录 C 遗留的"节点那几 fF 电容来源未解释"也随之解释(即器件自身电容)。 - 附录 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 TΩ偏置失效:igcmod=1使 MOS 栅有隧穿直流电流,resistor r=1e12偏置被拉垮,电容在错误偏压下量得 ≈4 倍偏低(369 fF vs 真值 1403 fF)——本轮据此一度把C2目标面积估大 4 倍。正解:栅偏置用inductor l=1e6(直流短路、交流开路);小信号电容取C=Im(1/V)/ω,勿用|V|。 - 节点名与参数名同名:参数
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):
- Spectre 网表首行恒被当作注释——
simulator lang=spectre若写在第 1 行会失效,整份文件按 spice 解析;症状是tran1之类被当成传输线元件(CMI-2484 RLGC/SFE-874 Unexpected end of file)。台架首行必须是注释。 - 温度只能用
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 电阻)与 LPFR2(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 范围 | 暂不考虑 |
四、建议步骤
- 先补
Kvco(T)(85 °C 重测,口径同div8_ghz_20261003,1–2 点、成本低)⇒ 算净fc/PM。 PM达标 ⇒ 选候选 1(接受 + 记录),不改设计。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同步,请勿在站点侧修改)