SOP — 阶段 1 标定:vco5 单点 1µs 瞬态(「单点 ≥1h」时长口径)¶
日期:2026-10-03 | 执行机:hpc-submit(192.168.31.28)| 工作区:
/projects/design/rain01/proj1方案工作区:/home/rain/Documents/eda_tools_ins/design/pll_cal_20261003记录「用扁平 Spectre 网表对pll45/vco5做主 1µs 瞬态标定、外推 60µs 单点成本」的流程、坑与回滚。
1. 背景¶
阶段 1 首件 pll45/vco5 定稿、用户在 GUI 复看并 Check & Save 之后,进阶段 2(ADE-XL / HPC 派发)前必须先回答一个口径问题:
方案里写的「单点 ≥1h」是否成立——它同时决定 HPC 派发的必要性、test_lock 的 tran 设置与波形输出策略。
标定刻意不依赖 GUI:用扁平 Spectre 网表复刻 vco5 拓扑(11 管),与 ADE-XL 提取的网表器件规模等价,可直接对照。
2. 目标¶
| 项 | 判据 | 实际结果 |
|---|---|---|
| 参数复核 | vco5 实例 W/L 与生成器契约逐项一致 | PASS(6.1) |
| 瞬时仿真 | spectre completes with 0 errors 且 exit=0 |
PASS(0 errors / 5 warnings) |
| 振荡确认 | 窗口内有稳定上升过零,摆幅非零 | VERDICT OSCILLATES |
| 实测成本 | 墙钟 / CPU / 峰值内存 / 波形体积 | 144.3 s / 141.8 s / 67 MB / 65 MB(6.3) |
| 外推 | 60µs 单点成本与 200 点 MC 的规模 | 2.4 h/点、≈480 核时(6.4) |
3. 前置条件¶
- 本机 root →
192.168.31.28免密 ssh(已通); .28上module load cadence && module load virtuoso/IC06.17.700可用;PDK_DIR=/pdk/FreePDK45;- 工作区已有阶段 0 的模型卡适配副本
proj1/verif/models/spectre_nom.include(绝对路径引用,不依赖$PDK_DIR,见smoke_20261003/SOP.md§5.2); - 只读 probe 与无头 SKILL 一律
runuser -u rain01(root 运行会让库文件属主错乱,BASELINE §2); .28没有 GNU/usr/bin/time(见 5.3 坑)。
4. 影响范围¶
单机(.28)、纯新增,不改任何 cell、不停服、无在跑作业:
- 新增
proj1/verif/cal_0/(网表、脚本、日志、psfascii 波形); - 新增
proj1/verif/gen/probe_params.il(只读探针); /pdk、/tools全程只读;不触碰用户 GUI 打开的vco5编辑窗口。
窗口:随时可跑。1µs 单点占 1 个核 ≈145 s;无备份需求(纯新增,删除即回滚)。
5. 分步操作¶
步骤 1:同步脚本到 .28¶
四个文件(只读探针 1 个 + 标定 3 个)先落 /tmp,再用 install -o rain01 落位——直接用 root scp 会把属主写成 root。
cd /home/rain/Documents/eda_tools_ins/design/pll_cal_20261003
scp -q probe_params.il vco5_cal.sp cal_run.sh parse_cal.py root@192.168.31.28:/tmp/
ssh root@192.168.31.28 'install -d -o rain01 -g design /projects/design/rain01/proj1/verif/cal_0; \
install -o rain01 -g design -m 644 /tmp/probe_params.il /projects/design/rain01/proj1/verif/gen/; \
install -o rain01 -g design -m 644 /tmp/vco5_cal.sp /tmp/cal_run.sh /tmp/parse_cal.py /projects/design/rain01/proj1/verif/cal_0/'
预期:无输出即成功;ls -l 显示属主 rain01 design。
步骤 2:只读核对 vco5 实例参数¶
为什么:用户 GUI 截图里的器件参数显示为 w=50n / l=320n 两行,字段归属无法从像素判定,必须用数据库读回确认生成器契约真的落到了 CDF 上。
G=/projects/design/rain01/proj1/verif/gen
ssh root@192.168.31.28 "runuser -u rain01 -- bash $G/run_skill.sh $G/probe_params.il /tmp/r_params.log"
ssh root@192.168.31.28 "grep -E 'INSTS=|INST |NET |TERMS=' /tmp/r_params.log"
坑:virtuoso -nograph -replay 的 log 每行带输入/输出前缀 \i / \o,所以 grep 不能用 ^ 锚定——本轮首次执行时 ^INST 把 11 条实例明细全部漏掉,只剩汇总行(已修)。
预期:MP* master=PMOS_VTG w="320n" l="50n"、MN* master=NMOS_VTG w="200n" l="50n"、MT master=NMOS_VTG w="400n" l="200n",TERMS=("VDD" "GND" "VCTRL" "R0")。
步骤 3:跑 1µs 瞬态¶
cal_run.sh 内部:source /etc/profile → module load cadence / virtuoso/IC06.17.700 → cd cal_0 → 跑 spectre(psfascii 原始数据 + +log)→ 打印 exit / 关键告警 / 计时。
坑(本轮踩到,exit=127):GNU /usr/bin/time 在 .28 上不存在,脚本用 bash 内建 time + TIMEFORMAT 计时,不再依赖该包。
ssh root@192.168.31.28 'runuser -u rain01 -- bash /projects/design/rain01/proj1/verif/cal_0/cal_run.sh'
预期:SPECTRE_EXIT=0、spectre completes with 0 errors、一行 WALL=... USER=... SYS=...。
坑(本轮踩到,SFE-23):simulator lang=spectre 模式下 Spectre 不接受 HSPICE 风格的 measure tran <n> max v(R0) from=.. to=.. 语句——它被当成器件实例解析,报 The instance 'measure' is referencing an undefined model or subcircuit, 'R0',4 条错误致 read-in 阶段即退出。故频率不由 measure 语句产出,改由步骤 4 从 psfascii 波形离线解析。
步骤 4:解析波形取频率与摆幅¶
parse_cal.py 扫描 raw 目录里最大的文件,按 psfascii 的 "time" <t> / "<node>" <v> 逐点重建波形,在窗口内取中值电平的上升过零算周期。
ssh root@192.168.31.28 'cd /projects/design/rain01/proj1/verif/cal_0 && python3 parse_cal.py psf R0 900e-9'
预期:SAMPLES=786612、WAVE_OUT_MIN/MAX、RISING_CROSSINGS、PERIOD、FREQ、VERDICT OSCILLATES。
若格式不匹配,脚本打印 PARSE_FAIL 并 dump 文件头 30 行,据此修解析口径。
步骤 5:脚本落盘固化¶
方案工作区 pll_cal_20261003/ 与 .28:proj1/verif/cal_0/ 保留同源副本;换点标定(换 corner / 温度 / VCTRL / 时长)只需改 vco5_cal.sp 顶部的 parameters 与 tran1 语句。
6. 验证¶
6.1 参数与连通性(只读)¶
- 实例参数与契约逐项一致(
MP320n/50n、MN200n/50n、MT400n/200n); chk_vco5.il在用户 GUICheck & Save之后复跑仍为insts=11 nets=9 terms=4 instTerms=44 mismatches=0/VERDICT PASS—— 证明 GUI 保存没有破坏连通性与 net 名,阶段 1 首件真正闭环。
6.2 仿真判据¶
SPECTRE_EXIT=0、spectre completes with 0 errors;5 条 warning 中 2 条为初值计算告警(Initial condition computed for node R1/R3 is in error by 34.4 mV (3.13%),源自 ic 语句的 rforce 默认值),属初始化伪影,起振后无影响。
6.3 实测成本(1µs,nom corner,27 °C,conservative,maxstep=10ps)¶
| 项 | 数值 |
|---|---|
| 墙钟 / CPU | 144.3 s / USER 141.8 s + SYS 0.6 s(单核) |
| 峰值内存 | 67 MB |
| 采样点数 | 786,612(等效 1.27 ps/点,远小于 maxstep=10ps,实际步长由 errpreset 支配) |
| 波形体积 | 65 MB(psfascii,仅存 R0/VN 两节点) |
| 频率 / 摆幅 | 7.868 GHz(周期 127.1 ps,781 次上升过零)/ 0.374→1.159 V |
6.4 外推(线性,固定开销可忽略)¶
| 项 | 1µs 实测 | 60µs(test_lock 单点) |
200 点 MC(60µs/点) |
|---|---|---|---|
| 墙钟(单核串行) | 144.3 s | ≈2.4 h | ≈480 核时 ≈20 天 |
| 波形体积 | 65 MB | ≈3.9 GB/点 | ≈780 GB ⚠ |
结论:「单点 ≥1h」口径成立且偏保守(实测 2.4 h);串行跑完 6 个 corner/温度组合的 lock 瞬态需 ≈14.4 h,200 点 MC 串行 ≈20 天 → HPC 派发不是优化项而是必需项。
6.5 调频范围与多线程对照(2026-10-03 追加,每点 100ns)¶
VCTRL 扫描(nom/27 °C/conservative,单核;100ns 只为取频率量级与相对耗时):
| VCTRL | 频率 | 墙钟(100ns) | USER |
|---|---|---|---|
| 0.5 V | 2.021 GHz | 4.33 s | 4.06 s |
| 0.6 V | 4.791 GHz | 10.15 s | 9.81 s |
| 0.7 V | 7.868 GHz | 14.48 s | 14.07 s |
| 0.8 V | 10.551 GHz | 19.56 s | 19.06 s |
| 0.9 V | 12.234 GHz | 23.66 s | 23.18 s |
调频范围 2.02 → 12.23 GHz(VCTRL 0.5→0.9 V,单调);频率越高耗时越长(步长由振荡周期支配,而非 maxstep)。若系统目标频率偏低,VCTRL 取 0.5 V 附近即可(再低能否起振需实测)。
多线程对照:+mt=4 @VCTRL=0.7 → 墙钟 13.84 s,对比单核 14.48 s 仅快 4.4%;USER 13.44 s ≈ 单核 14.07 s。
选项本身存在(spectre -h 明示 +multithread[=<N>],+mt 为缩写),但 对 11 管小电路几乎无收益(并行度不足,线程开销抵消)。
→ HPC 派发必须走「一核一点、点间并行」,而不是单点多核:6 计算节点 × 8 核 = 48 并发时,200 点 MC(60µs/点)约 10 h(若单点多核则无此收益)。
7. 回滚¶
纯新增,无备份:被改对象只有新增文件,删除即回到原状,不覆盖任何既有 cell 或配置。
ssh root@192.168.31.28 'rm -rf /projects/design/rain01/proj1/verif/cal_0; \
rm -f /projects/design/rain01/proj1/verif/gen/probe_params.il'
由于本次无备份文件,backup/ 目录与 README.md 台账不适用(按全局规则「备份与留档」例外:未产生备份即无台账)。
8. 风险说明¶
| 风险 | 缓解 |
|---|---|
波形体积失控:psfascii 65 MB/µs,60µs×200 点≈780 GB,会打满 /projects(当前余量 1.1 T) |
阶段 2 必须在 ADE-XL 里限制输出:只 save 关键节点、或改用 measurement 表达式代替全波形落盘;MC 批跑前先估容量 |
未测多线程:单核 141.8 s CPU 占满,+mt/APS 是否提速未验证 |
阶段 2 前补一次 +mt(8 核)对照,决定每节点并发策略 |
| 频率偏高(7.87 GHz @ VCTRL=0.7 V) | 需在阶段 2 扫 VCTRL 定调频范围,并与 div8/cp 的速度目标对齐;若目标频率低,需增大尾管阻抗或加负载电容 |
ic 初始化告警 34 mV |
初始化伪影,仅影响首个周期;如需干净起点,可减小 rforce 或改用短脉冲 kick |
| root 误跑导致属主错乱 | 一律 runuser -u rain01;派生物已验证属主 rain01 design |
来源:
/home/rain/Documents/eda_tools_ins/design/pll_cal_20261003/SOP.md| 最后更新:2026-10-03 21:15(由build/sync.py同步,请勿在站点侧修改)