跳转至

RUNBOOK — div8_0:vco5 × div8 联合瞬态验证环境

用途:随时复跑 / 换工作点 / 换 corner,回答"分频链在这个频率上还工作吗"。 定位:.28:/projects/design/rain01/proj1/verif/div8_0;方案副本 div8_ghz_20261003。

1. 服务概览

项 内容
干什么 用 Spectre 跑 vco5 + div8 的联合瞬态,量 OUT 是否为 CLK 的 1/8
组成 tb_div8.sp(拓扑)、div8_cells.sp(标准单元子电路)、div8_run.sh(运行器)、parse_cal.py(解析器)、psf_*/(波形)
依赖 .28 的 spectre(MMSIM151)、模型卡 verif/models/spectre_nom.include、只读 cells.sp
异常影响 仅影响本验证环境,不涉及任何服务;最坏是白跑一次仿真
重要性 中(阶段 2 前的工作点/时长依据来源之一)

2. 接入与凭据

ssh root@192.168.31.28                     # 本机 rain 用户已免密;仿真一律以 rain01 身份跑
C=/projects/design/rain01/proj1/verif/div8_0

无独立凭据;复用系统账号(rain01)。目录属主必须是 rain01,否则写 time.txt 报 Permission denied。

3. 日常速查表

ssh root@192.168.31.28                                    # 登录
ls -l $C                                                  # 看产物
runuser -u rain01 -- bash $C/div8_run.sh 0.7              # 跑 VCTRL=0.7 点(缺省)
runuser -u rain01 -- bash $C/div8_run.sh 0.9              # 跑 VCTRL=0.9 点
cd $C && python3 parse_cal.py psf_v09 R0 1e-8             # 解析 VCO
cd $C && python3 parse_cal.py psf_v09 OUTA 1e-8           # 解析 div8 输出
cd $C && python3 parse_cal.py psf_v09 OUTB 5e-9           # 解析 1 GHz 对照
grep -h "completes with" $C/tb_div8_v09.log               # 看错误数

4. 日常操作

跑一个工作点(幂等:重跑即重算,波形目录按 tag 独立)

runuser -u rain01 -- bash $C/div8_run.sh 0.9
# 预期:SPECTRE_EXIT=0 / "completes with 0 errors" / WALL≈186s / RAW_DIR=...psf_v09

换 corner:把 tb_div8.sp 里的 include ".../spectre_nom.include" 换成 spectre_ss.include / spectre_ff.include(副本在 verif/models/),再跑;建议同时把 TAG 标识写进网表注释,避免与 nom 产物混淆。

换时长:改 tb_div8.sp 末行 tran1 tran stop=40n。注意成本:≈3400 s/µs(179 管),不要照搬 test_lock 的 60 µs。

看波形:psf_*/tran1.tran.tran 是 psfascii 文本;用 parse_cal.py <raw_dir> <node> <window_start_秒> 取频率/摆幅。

5. 配置管理

文件 作用 改动注意
tb_div8.sp 顶层:VCO + 两路 div8 + 电源/分析语句 端口顺序必须与 cells.sp 一致(CLKBUF1 A vdd gnd Y、DFFPOSX1 vdd D gnd Q CLK、INVX1 A Y vdd gnd)
div8_cells.sp 三个标准单元子电路(模型名已换 PMOS_VTL/NMOS_VTL) 来自只读库;换单元时重跑抽取命令,勿手改
div8_run.sh 运行器:bash div8_run.sh [vctrl] 每次按参数重生成网表 ⇒ 幂等
parse_cal.py 波形解析(复用 pll_cal_20261003) 窗口参数用浮点秒(1e-8),写 10n 会报 bad window_start

生效方式:脚本即改即用(无服务需重启)。

6. 备份与恢复

本环境无状态:产物全在 div8_0/ 内,源库只读。回滚 = 删目录:

rm -rf /projects/design/rain01/proj1/verif/div8_0      # 高危:先确认路径

方案侧源文件在 div8_ghz_20261003/(tb_div8.sp、div8_run.sh、SOP.md),可随时重新下发。

7. 监控与告警

指标 看哪 阈值/判据
仿真是否成功 grep "completes with" tb_div8_v*.log 必须 0 errors(warnings 允许:ic 提示、悬空输出)
分频是否正确 解析 OUTA×8 vs R0 二者差 >1% 即异常
墙钟 cat time.txt 40 ns 约 135–190 s;明显变慢查机器负载
波形体量 ls -l psf_v*/ 40 ns 约 8–12 MB;异常增大说明步长设置被改

8. 故障处置

场景 1:time.txt: Permission denied - 症状:脚本第 17 行报错、SPECTRE_EXIT=1、无 psf。 - 诊断:ls -ld $C 看属主。 - 处置:chown -R rain01:design $C,重跑。 - 验证:脚本输出 RAW_DIR=... 且 psf 非空。

场景 2:PARSE_FAIL bad window_start - 症状:解析器立刻退出。 - 诊断:窗口参数写成了 10n。 - 处置:改浮点秒,如 1e-8(10 ns)。 - 验证:输出 PERIOD=... / FREQ=... / VERDICT OSCILLATES。

场景 3:OUTA 不分频(OUTA×8 ≠ R0) - 症状:OUT 周期与 R0 无关,或 VERDICT TOO_FEW_CROSSINGS。 - 诊断顺序:① 先看 OUTB(1 GHz 对照组)—— 若正常,则问题是速度;若也不正常,则是结构/网表(回到 pll_sch_20261003/SOP.md §9 核对端口顺序与拓扑)。 - 处置:速度问题 → 提高 VCTRL 上限以下降 VCO 频率,或改分频结构;结构问题 → 修 tb_div8.sp 实例端口后重跑。 - 验证:三路频率比值回到 8.00。

场景 4:起振失败(VERDICT NO_OSCILLATION) - 诊断:先确认 VCO 自身(空载)在 pll_cal_20261003/cal_0 能起振。 - 处置:检查 ic R0=... R5 那一行是否被改动(它负责打破对称解)。 - 验证:R0 摆幅 >0.4 V。

9. 安全与权限

  • /pdk、/tools 为只读共享挂载,禁止写入;本环境只读引用 cells.sp 与模型卡。
  • 一律 runuser -u rain01 跑仿真,避免 root 属主。
  • 无凭据落盘。

10. 容量与性能

项 实测(2026-10-03,nom/27 °C)
规模 179 管(VCO 11 + 2×div8 84)
时长 40 ns WALL 135 s(VCTRL 0.7)/ 186 s(0.9);峰值内存 67 MB
折算 ≈3400 s/µs ⇒ 60 µs 单点 ≈56 核时(尚未含 PFD/CP/LPF)
波形 8.5 MB / 11.9 MB per 40 ns(save 了 4 个节点)
优化方向 缩短 stop、只 save 关注节点、必要时放宽 maxstep(会牺牲高频精度,慎用)

11. 附录

  • 相关文档:div8_ghz_20261003/SOP.md(本次验证档案)、pll_cal_20261003/RUNBOOK.md(vco5 单管级标定)、pll_sch_20261003/SOP.md §9(div8 生成契约)
  • 交付物:tb_div8.sp、div8_cells.sp、div8_run.sh、parse_cal.py(复用)、SOP.md、本文件
  • 修订记录:2026-10-03 首版(div8 GHz 分频验证,风险关闭)

来源:/home/rain/Documents/eda_tools_ins/design/div8_ghz_20261003/RUNBOOK.md | 最后更新:2026-10-03 23:08(由 build/sync.py 同步,请勿在站点侧修改)