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. 目标(可验证)¶
spectre对 nom/ss/ff 三套模型卡各跑一次单管 DC,completes with 0 errors且 exit=0;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同步,请勿在站点侧修改)