跳转至

SOP:阶段 0 环境冒烟(FreePDK45 模型卡 × Spectre 兼容性验证)

日期:2026-10-03 | 执行机:hpc-submit(.28) | 工作区:/projects/design/rain01/proj1 交付物(本机留档):smoke_20261003/

1. 背景

PLL 学习项目(FreePDK45)进入实施前,唯一硬风险是 /pdk/FreePDK45/ncsu_basekit/models/hspice/ 下的 hspice 格式模型卡能否被 Spectre(MMSIM 15.10)读取。此前只到"文件存在"级验证,未做仿真级验证。冒烟通过即可放行画图(阶段 1),不通过则转用 ptm/ 备选。

2. 目标(可验证)

  1. spectre 对 nom/ss/ff 三套模型卡各跑一次单管 DC,completes with 0 errors 且 exit=0;
  2. proj1/cdssetup/cds.lib 挂上 NCSU_TechLib_FreePDK45 + NCSU_Devices_FreePDK45,GUI 会话可见。

3. 前置条件

  • 本机 root → .28 免密 ssh(已通);
  • .28 上 module load cadence && module load virtuoso/IC06.17.700 可用(BASELINE §2);
  • 用户 GUI 以 rain01 在 .28 VNC 里运行,工作目录 proj1/cdssetup(今日 16:12 起)。

4. 影响范围

  • 新增:proj1/verif/models/spectre_{nom,ss,ff}.include(适配副本)、proj1/verif/smoke_0/(网表+日志)、proj1/verif/chk_env.il;
  • 修改:proj1/cdssetup/cds.lib 末尾追加 3 行(2 个 DEFINE + 1 行注释);
  • 不停服、无在跑作业冲突;GUI 运行中会话不受影响,但 cds.lib 改动须重启 Virtuoso 才生效;
  • /pdk、/tools 全程只读,零改动。

5. 分步操作

5.1 冒烟网表(本机写 → scp)

smoke_nmos_pmos.sp:NMOS_VTG + PMOS_VTG 反相器接法,dc dev=vgs 扫 0~1V。 关键写法(实测踩坑):

  • include 路径指向工作区适配副本,不直接用 /pdk 的 hspice_*.include;
  • DC 扫源语法用 dc dev=vgs start=... stop=... step=...(param=vgs、param=vgs:dc 均 SFE-421 报错)。

5.2 模型卡适配副本(根因:hspice 卡引号陷阱)

hspice_*.include 外层文件用 未闭合单引号(.inc '$PDK_DIR/...),hspice 容忍行尾隐式闭合,Spectre 解析成跨行文件名报 SFE-868(目标被拼成 NMOS_VTG.inc.inc)。且 module 不下发 $PDK_DIR,变量无法展开。 修法(/pdk 只读,在工作区做副本,8 个 .inc 模型卡原位引用不动):

M=/projects/design/rain01/proj1/verif/models; mkdir -p $M
for c in nom ss ff; do
  sed "s|\.inc .\$PDK_DIR/|.inc /pdk/FreePDK45/|" \
    /pdk/FreePDK45/ncsu_basekit/models/hspice/hspice_$c.include > $M/spectre_$c.include
done

实现体:smoke_20261003/smoke_run.sh(含三 corner 循环跑与判据提取)。

5.3 FreePDK45 库挂载

模板 cds.lib 的 basekit SOFTINCLUDE 行被注释(basic 冲突 + $PDK_DIR 不展开),改为精确追加(注释用 --、只写英文,见 BASELINE §4 陷阱):

DEFINE NCSU_TechLib_FreePDK45 /pdk/FreePDK45/ncsu_basekit/lib/NCSU_TechLib_FreePDK45
DEFINE NCSU_Devices_FreePDK45 /pdk/FreePDK45/ncsu_basekit/lib/NCSU_Devices_FreePDK45

预期:追加后 tail 可见两行 DEFINE;GUI 重启后库管理器出现两库。

5.4 跑冒烟

ssh root@.28 'bash /projects/design/rain01/proj1/verif/smoke_0/smoke_run.sh'

预期:三行 corner=<c> exit=0 :: spectre completes with 0 errors。

6. 验证

  • 机器判据:三 corner exit=0、0 errors(2026-10-03 17:43 实测通过:nom/ss 各 2 warning、ff 6 warning,均为模型卡内 duplicate 参数定义,Spectre 取最后值,无害);
  • 用户侧判据:重启 Virtuoso → CIW load("/projects/design/rain01/proj1/verif/chk_env.il") → 库列表含 FreePDK45 双库、模型文件全 FOUND → 贴输出判读放行。

7. 回滚

  • cds.lib:远端原位备份 cds.lib.bak.20261003-174410(本机台账副本见 backup/README.md),cp 覆盖回去即可;
  • 冒烟产物(smoke_0/、models/、chk_env.il)为新增文件,直接删除即回滚,无副作用。

8. 风险说明

风险 缓解
模型卡内 duplicate 参数(toxref 等) 无害告警,取最后值;真值冲突会在阶段 2 前仿精度比对时暴露
$PDK_DIR 依赖 适配副本与 cds.lib 一律绝对路径,不依赖该变量
GUI 开着改 cds.lib 当前会话不生效也不报错;约定"改 cds.lib 必重启 Virtuoso"
ff corner warning 偏多(6 个) log 存档 smoke_0/smoke_ff.log,阶段 2 出现精度异常时回查

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