跳转至

BASELINE:EDA 设计环境基线(稳定层)

环境事实(拓扑 / 版本 / 路径 / 陷阱),低频变化;动态状态见同目录 HANDOFF.md。 事实来源:/home/rain/Documents/eda_tools_ins/Cadence/ 各主题 SOP 与其 docs/HANDOFF.md(2026-09-24~27 建档实测)。

1. 工具链(NFS 只读共享,六节点同源同版本)【已确认】

工具 客户端路径 版本
Virtuoso /tools/cadence/virtuoso/IC617 IC 6.1.7-64b(唯一在用;IC25 安装树与配置已于 09-26/27 删除)
Spectre /tools/cadence/mmsim/MMSIM151 MMSIM 15.10.284
Assura /tools/cadence/assura/ASSURA41 04.15.001
Calibre /tools/mentor/calibre/aoi_cal_2015.2_36.27 2015.2_36.27(可执行 .../pkgs/icv/bin/calibre)

宿主真实路径:/data/nfs/tools/{cadence,mentor}(本机 192.168.31.249 即 NFS 宿主)。

2. 启动方式【已确认】

两阶段 modulefile,不能放进管道:

module load cadence && module load virtuoso/IC06.17.700

该 modulefile 同时下发 IC617+MMSIM+ASSURA 组合环境与 CDS_LIC_FILE。

无头(virtuoso -nograph)运行必须以 rain01 身份:用 root 跑出来的 cell 属主是 root:design 且 755,rain01 只能读不能写,GUI 打开报 SCH-1217 / DB-270000 Unable to lock database file(2026-10-03 实测踩到)。固定入口:

runuser -u rain01 -- bash /projects/design/rain01/proj1/verif/gen/run_skill.sh <script.il> [log]

另:-nograph -replay 下 printf 的输出只落 -log 文件,stdout 抓不到。Rocky 9 适配五要素(OA_UNSUPPORTED_PLAT=linux_rhel50_gcc48x、LD_PRELOAD=/lib64/libstdc++.so.6、libnsl 双架构、三条 LSB/libdl 链接)已在六计算节点与提交节点完成。

3. 节点与 license【已确认】

节点 角色
192.168.31.249(本机 dell-R620) NFS 服务器(不是 GUI 宿主,本机无 virtuoso 进程)——2026-10-04 实测更正
.18/.19/.20(slurm 计算) 仿真节点,NFS 只读挂 /tools、/pdk
.25/.26/.27(lsf 计算) 同上
.28(hpc-submit) Slurm 提交节点 + Virtuoso GUI 宿主(2026-10-04 实测:GUI 进程、/tmp/adexl_icrp_cmd.log、mps session 均在此);virtuoso -nograph license/PDK 链路 09-27 实测通过
.29 FlexLM 5280@.29(lmgrd+cdslmd):605 条 FEATURE 全部 permanent uncounted,含 Virtuoso_ADE_Assembler/Explorer(ADE-XL)、Virtuoso_Spectre_XL、Virtuoso_APS_MMSIM_Lk、Schematic/Layout_XL、Virtuoso_Multi_mode_Simulation(ADE-XL 多机分发必需,2026-10-03 实测在)
  • Calibre license 独立直读:MGLS_LICENSE_FILE=/tools/mentor/calibre/license.dat(uncounted,2036-09 到期)
  • 本机 root 到全部 18 台免密 ssh;rain 用户免密未配(ADE-XL Machine List 前置条件)

4. PDK【已确认】

项 值
CDK NCSU CDK 1.6.0.beta,$CDK_DIR=/pdk/ncsu-cdk-1.6.0.beta(宿主 /data/nfs/pdk)
工艺 FreePDK45(/pdk/FreePDK45/ncsu_basekit)
器件模型 models/hspice/{hspice_nom,ss,ff}.include(hspice 格式;Spectre 不能直读,须用适配副本 proj1/verif/models/spectre_{nom,ss,ff}.include——三 corner DC 冒烟已过,见 smoke_20261003/SOP.md;备选 models/hspice/ptm/)
器件模型名 NMOS_VTG/VTL/VTH/THKOX + PMOS_*(BSIM4 level=54),不是 nch/pch,也不是版图单元名 nmos_vtg【已确认】
无源件 无 R / C / L / BJT / 二极管:符号器件库 NCSU_Devices_FreePDK45 仅 8 个 MOS,Calibre LVS 也只声明这 8 个 → 电阻/电容须用 MOS 替代(三极管区 MOS 电阻、MOS-cap),否则 LVS/PEX 断链【已确认】
统计模型 全 models 树 grep statistics 零命中 → 无统计/失配模型,蒙特卡洛无变化量,只能做 corner×温度×参数扫描【已确认】
器件容性(实测,2026-10-04 修订) MOS 电容(栅=信号节点、D=S=B=GND,即 lpf 的接法)不贡献容性:在 vco5 环振的 R0 节点上换接该电容,频率与基线 7 位相同(7.8684 GHz),而同位接 10 fF 理想电容频率减半(3.7837 GHz)⇒ 载具敏感、结论成立。但 vco5 频率基线不受影响:maxstep 10 ps→1 ps 频率仅差 0.06%,基线是物理的(推翻早前"基线存疑"推断)。证据:pll_loop_cal_20261004/SOP.md 附录 C、vco5_capchk_20261004/
标准单元库 freepdk45_cells(/pdk/FreePDK45/osu_soc/lib,OSU 库)带晶体管级 schematic 但无 symbol;pll45 内的 DFFPOSX1/INVX1/CLKBUF1/DFFSR/AND2X1 均为此库副本 + 自建 symbol;cds.lib 已增 DEFINE freepdk45_cells【已确认】
单元事实 DFFPOSX1 无复位端(故 DFF-PFD 必须用 DFFSR);symbol 视图合法 layer/purpose 仅 ("instance"\|"device" "drawing")、("pin" "drawing")、("annotate" "drawing")【已确认】
挂载方式 项目 cds.lib 仅 SOFTINCLUDE $CDK_DIR/cdssetup/cds.lib(该行因 basic 库冲突 + $PDK_DIR 不展开不可用,已改绝对路径 DEFINE);站点模板 /pdk/templates/{.cdsinit,cds.lib} 复制到项目使用
Calibre 规则 techfile/calibre/{calibreDRC.rul, calibreLVS.rul, calibrexRC.rul, layer.inc}

陷阱:cds.lib 注释用 --(非 ;;)、行尾不留 -、只写英文注释(非 UTF-8 解析);.cdsinit 已挂 calibre.skl。

5. 原理图生成的机制性陷阱(db* API 与 schCheck)【已确认】

来源:pll_sch_20261003/SOP.md §7 / §9.5 / §10.6 / §11.6(2026-10-03,六件 cell 迭代实测)。生成器入口见 §2。

陷阱 判据 / 正确做法
net 名不绑定 → GUI Check&Save 改成 netNN 名字必须由落在导线上的 ("wire" "label") 承载;("annotate"/"text" "drawing") 能建但不绑定,("label" "drawing") 被直接拒绝。锚点须精确落在该 net 的导线上(偏 0.3 µm 即失效)。dbCreateLabel 参数顺序 cv labelType xy text justify orient font height——height 数字在最后
端口标签不可见 terminal~>position 是只读派生属性(写它报 dbSetq: Invalid position);改用 ("pin" "label") 建 pin 名标签
层次 pin 在 reopen / GUI 同步后消失 dbCreateTerm 单独建的 terminal 会被删除(SCH-1216 no pin associated with itself);须用 dbCreatePin( net, fig )(fig = purpose "pin" 的 2 点线),pin 与 terminal 均存活
schCheck 按几何重建连接(显式 dbCreateInstTerm 会被几何覆盖) ① 电源纵向 riser 的端点不得落在 bulk pin 上——riser 只从 S 起、bulk 另走水平 stub,否则 bulk 被并入他网或报 floating;② 信号走线还须避开相邻块的引脚图形(引脚线从连接点一直画到体边,比带 label 的 stub 更长),否则报 Net "X" shorted to net "Y"
实例指向非 symbol 视图 指向 abstract 会使 schCheck 清空全部 instTerm、net 碎成 netNN 孤岛;只能用 <cell>/symbol(无 symbol 者先复制进可写库并自建,见 §4)
实例名与 net 名同名 GUI Check 报 Warning: Instance name collides with signal name;改名即消
wire 只支持 2 点段 多折线须拆成多段 2 点线,否则报 SCH-2159
误读旧日志判成功 run_skill.sh 会先 cd cdssetup,.il 必须传绝对路径(相对名静默跳过、不产生新 log,/tmp 里的旧 log 会被当成本次结果);核对目标 sch.oa 的 mtime
GUI 持锁时无头重建「静默失败」 cell 编辑窗口开着时,其目录里有 sch.oa.cdslck.<host>.<pid>(属主即 GUI 进程);此时 gen_*.il 的删除/重建全部不生效,外部表现是把 SKILLRC=255 且不产生新 log(与「相对路径」同一表现),fix_pin_dirs.il 对该 cell 打 LOCKFAIL。动手前先 ls design/pll45/*/schematic/*.cdslck;有锁请用户在 GUI 关闭该 cell 编辑窗口(GUI 主进程可保留),并先 rm -f 同名旧 log 免误读(2026-10-05 实测;判据来源 pll_sch_20261003/SOP.md §5 步骤 4、§14)
cell pin 方向默认 unused gen_*.il 用 dbCreatePin 建 pin 时不设 direction ⇒ ADE-XL Setup → Stimuli 报 ADE (G)XL Message 2804 / no input pins, bi-directional pins or global nets were found,无法加源;须跑幂等脚本 pll_sch_20261003/gen/fix_pin_dirs.il 打方向(2026-10-04 实测;6 个 cell 原本全为 unused)。Cell 被 GUI 打开时该脚本报 LOCKFAIL——只需在 GUI 关闭该 cell 的编辑窗口(主进程可保留)。验收须用只读探针 gen/probe_pin_dirs.il——fix_pin_dirs.il 只打印 SET、无法证明改前状态
「先删 cell 再重建」会连 symbol 视图一起删 gen_lpf.il 头部即写 deletes the cell, then rebuilds it,其 ddDeleteObj(cid) 删的是整个 cell(含全部视图)⇒ 重建后 symbol 消失(2026-10-04 实测:LPF 重建两次后 NOSYM lpf,pll_top 里 lpf 实例无图形)。gen_pll_symbols.il 无删除逻辑,故能补回。这类生成器重建后须走完整链:gen_* → gen_pll_symbols.il → fix_pin_dirs.il → probe_pin_dirs.il(判据来源 pll_sch_20261003/SOP.md §13)
离线复现 GUI 的 Check&Save schCheck( cv ) + dbSave 等价;判定口径 = net 名零改写 + chk_*.il 仍 mismatches=0。SKILL 侧:t 是受保护常量不可作变量名;return() 只能在 prog(...) 内;期望值表用 cond 展开,不要靠辅助函数返回值
load() 被当成「打开 cellview」用 load("pll45/pll_top" "schematic") 报 *Error* load: can't access file——load() 只加载 SKILL .il 文件,不能打开 cellview;打开用 Library Manager 双击,或 CIW hiOpenWindow(?cellView "<lib> <cell> <view>")(2026-10-04 实测)

6. 工作区规范【已确认】

/projects/design/<user>/<proj>/{cdssetup,design,verif,layout,signoff,release,docs};cds.lib 归项目(cdssetup/),家目录只放个人配置;PDK 只引用不复制;先 cd 项目目录再启动 Virtuoso。

7. 批处理运行配置现状与缺口【已确认】

来源:2026-10-04 实测(.28 module 下发变量、proj1 配置树)。结论:交互式画图够用;HPC 批处理仿真缺一层运行配置。

module load cadence && module load virtuoso/IC06.17.700 下发的关键变量:

变量 值 判读
CDS_LIC_FILE 5280@192.168.31.29 正确
CDS_LIC_ONLY 1 语义存疑(Cadence 常表示「只查 license、不运行工具」);实测未阻碍 GUI / 无头运行,用途待核实
CDS_LOAD_ENV CWD 从当前工作目录加载 .cdsenv ⇒ 批跑换 cwd 则默认值随之改变
CDS_AUTO_64BIT ALL 正确
CDS_Netlisting_Mode Analog 模拟设计必需,正确
CDK_DIR /pdk/ncsu-cdk-1.6.0.beta 正确

proj1 配置现状与缺口:

项 现状 缺口
cdssetup/.cdsinit 仅加载 calibre.skl + NCSU CDK cdssetup/cdsinit 无 cdsLogInit、无仿真默认值
.cdsenv 不存在 Spectre / ADE 默认(errpreset / temp / save)无处固化,不可复现
CDS.log 落 /home/rain01/CDS.log(含 .1/.2 轮转与残留 .cdslck) 多作业共用一份且在 NFS 上,批跑排障困难
workdir / 波形 未接三层存储 Spectre 默认写 cwd;cwd 若在 /projects(NFS),200 点波形全压 NFS
license 等待 未设 CDS_LIC_QUEUE / CDS_LIC_TIMEOUT 长批跑遇抖动无超时控制(license 为 uncounted,非致命)

Slurm 口径:分区 compile 1 天 / regression 8 h / long 3 天(test_lock 单点 ≈56 核时 ⇒ 单核串行约 2.3 天,只能投 long);license_aware=false(不排队等 license,但 .29 为 permanent uncounted、不限座位)。

Slurm vs LSF:LSF 执行节点未挂 /projects / /mnt/lustre(仅 /home、/data/nfs/lsf),引用共享工作区的作业会路径不存在失败;Slurm 有完整三层存储,故本项目走 Slurm(2026-10-04 拍板)。

调度器与 ADE-XL 能力(2026-10-04 实测):Slurm MaxArraySize=100000 / MaxJobCount=100000 / MaxTasksPerNode=512;四个分区均为 3 节点 × 8 CPU / 15000 MB。ADE-XL 具备自定义作业启动器——$CDSHOME/tools/dfII/etc/tools/adexl/axlGenericJobLauncher_enc.ils 存在(加密文件),且配置树含整套 adexl.distribute 分发变量(maxJobFailPerPolicy=3、jobFileDir、maxNFSSyncWait=60、numRetriesOnError=1、maxJobFailPerPolicy、icrpStartup.runCompleteTimeout=1800)⇒ 可包装 sbatch 对接 Slurm;具体配置方式尚未验证(见 hpc_slurm_20261003/DESIGN.md §2.2)。

7.1 Spectre 输出裁剪口径(2026-10-04 实测,vco5 网表)

手段 实测效果 说明
-format psfascii→psfbin 3.4×(nutbin 相当) 单靠换格式不足
save 节点数 2→8 3.0×(线性) 白名单只防 ADE-XL 默认全节点
strobeperiod=100p 75~83× 唯一数量级杠杆;代价是对 GHz 节点欠采样
skipcount=10 ~11× 实际步长远密于 maxstep
compression=yes 反效果 ×1.73 禁用
  • 体积随时间线性(1 µs = 200 ns 的 5.0×):psfbin 8 节点 60 µs ≈ 3.41 GB;加 strobeperiod=100p ≈ 44.8 MB。
  • psf CLI:/tools/cadence/virtuoso/IC617/tools.lnx86/dfII/bin/psf(可读 psfbin 头部)。
  • 脚本陷阱:source /etc/profile 在 set -e 生效期间执行会提前退出(实测 exit 127、无输出),加载期间须先 set +eu。
  • psfbin 后 ASCII 解析器(如 pll_cal_20261003/parse_cal.py)失效,须另建解析链路。

详见 hpc_slurm_20261003/SOP.md §6。

7.2 ADE-XL 作业分发机制(2026-10-04 文档实测)

  • Job Policy 五种 Distribution Method:Local / Remote-Host / Command / LBS(来源 doc/adexl/adexlSimulating.html)。
  • Command 方式:Command 字段填「命令前缀」,ADE-XL 把 icrp 启动命令追加在尾部并在本地主机执行(Command + icrpStartupCommand)⇒ 填 bsub … / srun … 即可对接 DRMS。
  • 必须 interactive 语义:ADE-XL 靠本地 proxy 推断 ICRP 状态、发 SIGTERM、pending 重提交;LSF 对应 bsub -K/-I,Slurm 对应 srun(前台阻塞)。
  • 默认 job policy:envSetVal("adexl.icrpStartup" "defaultJobPolicy" 'string "<name>")。
  • 本项目约束:GUI 宿主 .249 无 Slurm 客户端(srun/sbatch 缺失),而 Command 在本地主机执行 ⇒ Command 须经 .28 中转(ssh root@192.168.31.28 srun …)或改用 wrapper 脚本。

7.3 ADE-XL 运行准备失败:NCSU opusUnix.il 覆盖 cd/ls(2026-10-04 实测)【已确认】

  • 症状:ADE-XL 点 Run 后报 *Error* ls: a nlambda must be defined or declared before its use + ERROR (ADEXL-5025): Preparation to run the simulation is failed for the run Interactive.N, point 1, test …;网表生成成功,失败在 launch 前的准备阶段。
  • 根因:NCSU CDK skill/misc/opusUnix.il(第 55 行 nprocedure( ls(dir)用 nprocedure(nlambda)定义 cd/ls(及 cat/rm),覆盖 Cadence 内建 cd/ls(autoload 的 lambda);启动打印 redefining function cd/ls from a lambda to be a nlambda,ADE-XL 已编译的 prep 代码调用 ls(path) 即报错。
  • 持久修复:站点模板 /pdk/templates/.cdsinit 已内置补丁(标记 NCSU-OPUSUNIX-LS-FIX)——在 NCSU CDK 加载之后把 ls/cd 重注册为普通 lambda;新建项目复制模板即不复发。项目副本 .28:/projects/design/rain01/proj1/cdssetup/.cdsinit 同源;生成器 Cadence/pdk_integration_20260927/deployer.py 的 _render_templates() 已同步追加该块。详见 pdk_integration_20260927/docs/SOP.md 附录 D。
  • 判据:启动输出为 redefining function cd/ls from a nlambda to be a lambda(不再是反向),ls("/tmp") 返回列表;GUI 复跑 spectre completed with 0 errors。
  • .28 上 srun 绝对路径:Slurm 客户端不在非登录 shell 的 PATH(su - rain01 -c "which srun" 报 not found),实际由 /etc/profile.d/slurm-path.sh 给出 SLURM_PREFIX="/usr/local/slurm" ⇒ srun 位于 /usr/local/slurm/bin/srun(§7.2 中经 .28 中转的 Command 须用绝对路径)。

7.4 ADE-XL 经 Slurm 派发的机制与陷阱(2026-10-04 实测)

  • 派发链路:每个 run point 写 runGenricJob<N>(或 .tmp_rain01/.cmddir0/runICRP<N>)→ 调 /tools/cadence/virtuoso/IC617/tools/dfII/bin/axlGenericJobLauncher(实为 cdsmps 加载加密 ils) → 内部执行 cd <netlist目录> ; ./runSimulation。Command 字段的内容会作为前缀拼在其前。
  • 陷阱 1(致命):srun 会给任务注入 PMI_*,Spectre 据此尝试 MPI_Init,而 PMI fd 在 srun → sh → cdsmps → sh → spectre 链上失效,报 [cli_0]: Unable to write to PMI_fd / Fatal error in MPI_Init,作业以 exit 1 结束。 修法:srun 任务内 unset PMI_FD PMI_RANK PMI_SIZE PMI_LOCAL_RANK PMI_LOCAL_SIZE PMI_JOBID PMI_KVS。 更简等效修法(2026-10-05 实测):Command 用 srun --mpi=none …——任务环境里根本不出现任何 PMI_*(只余 SLURM_NTASKS/SLURM_PROCID),免去一长串 env -u。注意 -N1 -n1 -c1 单任务同样注入,与并发度无关;GUI 宿主在 login 节点,故文档第 75–78 段的「须换 salloc srun」仅适用于 GUI 跑在计算节点时。【端到端复验通过 2026-10-05:ADE-XL Interactive.12 6 点全过、各点 spectre.out 生成,6 条作业分落 work-01/02 并行】 根因(2026-10-06 取证):本集群 Slurm 26.05.2 的全局项 MpiDefault = pmi2(Slurm 出厂默认为 none)⇒ srun 默认注入 PMI_*;--mpi=none 即按次覆盖该全局项,不必改集群(全局改 none 会破坏真正的 MPI 作业)。另:ldd spectre 无 mpi/pmi 库、PATH 无 mpirun ⇒ spectre 的 MPI 支持是运行时按环境变量探测。
  • 陷阱 2:ADE-XL 执行 Command 时的环境是「冷」的——rain01 登录 shell 是 /bin/csh, /etc/csh.cshrc / /etc/csh.login 只遍历 /etc/profile.d/*.csh(仅初始化 Lmod,不加载 EDA 模块)。 ⇒ Command 必须用自带环境的包装器(source /etc/profile + module load cadence + module load virtuoso/IC06.17.700)。
  • 包装器(唯一入口):.28:proj1/verif/batch_0/bin/srun_adexl_wrap.sh;Job Policy 的 Command 只填该脚本绝对路径(不带参数、不带引号)。
  • 计算节点存储实测(与旧记录不符,此处为准):/projects 顶层只读(/projects/design/rain01 可写); /mnt/lustre 可写(原记录「不可写」系 2026-10-06 前的权限阻塞,已由 lustre_ins 修复;2026-10-12 起服务端身份源单一 LDAP,真实写入复验通过,见 §7.11;scratch/users 已参数化为 1777,用户可自助建目录); /tmp 是节点本地盘、不共享(脚本放 /tmp 会在节点上 127)。
  • srun 绝对路径 /usr/local/slurm/bin/srun(非登录 shell 的 PATH 里没有)。

7.5 ADE-XL 复验失败的定位结论与 wrapper 加固(2026-10-04 实测)

  • 派发链路四段全通:netlist 本地直跑 / srun 直跑 / 注入 GUI 进程环境后 srun 跑 / 复刻现场 runGenricJobN 脚本跑——四条路径均 spectre completes with 0 errors。⇒ ADE-3036+5011("simulator run log has not been generated")不是配置或环境缺陷,实测当场不可复现。
  • 确定性故障 = ICRP child 会话挂死:runICRP<N>(cdssetup/.tmp_rain01/.cmddir0/)内容不是跑 Spectre,而是 cdsVncserver :80 + virtuoso -axlChildIdFlag N。实测该 srun 作业(job 31)占节点约 14 min 不返回,阻塞其后全部 ADE-XL 派发(后续 interactive run 在 /tmp/adexl_icrp_cmd.log 里干脆无记录)。
  • wrapper 加固(2026-10-04):srun_adexl_wrap.sh ① srun 外套 timeout(WALL_GUARD 默认 1860 s = srun -t 1800 s + 60 s 余量);② 退出码透传(原为无条件 exit 0,失败对 ADE-XL 不可见;实测 /bin/false → rc=1)。跑长仿真(test_lock 单点 ≈56 核时)前须同步调大 SLURM_TIME 与 WALL_GUARD。
  • 失败会留 Slurm 残骸——持续失败的放大机制:srun 命令非零退出时,该作业以 SE / JobHeldUser 滞留 squeue(用 /bin/false 可控实验证实:rc=1 留残骸、rc=0 不留)。残骸累积后 ADE-XL 不再派发——2026-10-04 04:16–04:24 的 run 连 /tmp/adexl_icrp_cmd.log 都不产生。清掉残骸即恢复:清理后 interactive.13 一次通过(spectre completes with 0 errors,2.65 s)。
  • 节点级残留:孤儿 /tmp/.X80-lock:首次挂死的 child(cdsVncserver :80,job 31,VNC PID 62796)在计算节点 /tmp 留下 X 锁;对应进程早已消失,但锁仍使后续 child 误判 :80 被占而改用 :81(2026-10-04 实测 child 走 cdsXvnc :81)。/tmp 是节点本地盘、不共享,须 srun -w <node> 进节点清理,删前先校验锁内 PID 已不存在。已在 slurm-work-01 清除。
  • 跑前自检(建议例行):见 hpc_slurm_20261003/SOP.md §9.7。
  • GUI 宿主在 .28(见 §3);wrapper 日志 /tmp/adexl_icrp_cmd.log 亦在 .28。
  • Command 可内联一行 srun,不必落脚本文件(2026-10-05 实测):Job Policy 的 Command 直接填 /bin/bash -lc '<source /etc/profile + module load cadence/virtuoso>; timeout --signal=TERM --kill-after=60 <N> /usr/local/slurm/bin/srun -p long -N1 -n1 -t <T> --mem=4G env -u PMI_FD -u PMI_RANK -u PMI_SIZE -u PMI_LOCAL_RANK -u PMI_LOCAL_SIZE -u PMI_JOBID -u PMI_KVS bash -c "$0"' —— ADE-XL 追加的 <…/runICRP<N>> 或 sh 落到 $0 被执行(追加参数不带引号、无空格,故单引号包裹安全)。 实测:child Host name = slurm-work-01(派发到计算节点),失败路径退出码正确透传;日志 /tmp/adexl_inline.log。 等价替代:srun_adexl_wrap.sh(多一层文件,但可变量化 -t/WALL_GUARD 并留 /tmp/adexl_icrp_cmd.log)。
  • disableAutomaticUpdate/Check and Save 与 ADEXL-1788/9038:原理图由 SKILL 脚本在 GUI 之外改写后, ADE-XL 会报 ADEXL-1788(cellview 抽取后被改动)与 ADEXL-9038(写回失败,误述为 read-only)。 解法:在 schematic 编辑器里对该 test 关联的全部 cellview执行 File → Check and Save(可批量,见档案), 与文件权限/库只读/编辑锁均无关(.oalib libReadOnly="No"、属主 rain01 可写、锁释放后仍报)。
  • gen_vco5.il 删的是整个 cell,symbol 视图被连带删除(2026-10-05 实测):只跑生成器会让 pll_top 的 XVCO 变 master=nil → schCheck 报 SCH-3400 unbound instances(ADE-XL 侧表现为 Check 报 1 error + No save performed)。必须紧接跑 gen_pll_symbols.il(幂等重建 pfd/cp/lpf/vco5/div8 五个 symbol)→ 关窗重开 pll_top 让实例重绑 → File → Check and Save。 验证口径:chk_pll_top.il 末行 CHK insts=9 nets=11 terms=3 instTerms=41 mismatches=0 + VERDICT PASS。 另:vco5 输出 pin 名须四处一致为 OUT(gen_vco5.il 的 net/label/pinlabel = gen_pll_symbols.il 头注释 第 23 行 = gen_pll_top.il 实例连线 = chk_pll_top.il 的 XVCO 映射)。

7.6 Spectre 台架的地节点:只认 0,GND 只是普通节点名(2026-10-04 实测)【已确认】

  • Spectre 里只有 0 是全局地;裸写的 GND 是普通节点名。网表若没把 GND 连到 0,它就是一个浮空节点,仅靠 gmin(默认 1e-12 S)兜底。
  • 后果:探针器件挂在浮空 GND 上时,栅通过 Cox 把该节点"自举"到跟随栅压,栅-沟道间几无压差 ⇒ 位移电流塌陷,MOS 看起来"无电容"(实测 1e-14 A,正确值 3.13e-05 A,差 9 个数量级)。
  • 本项目约束:cell 的端口名就是 GND(lpf/cp/pll_top 都有)。凡平铺台架或 ADE-XL test 激励,必须显式写 vgnd (GND 0) vsource dc=0(或等效地把 GND 绑到 0),否则重犯。
  • 危险信号:同一网表里 0 与 GND 混用。
  • 2026-10-04 踩到点:pll_loop_cal_20261004/bench/{lpf,cprobe}.sp 与 vco5_capchk_20261004 的 ms10p_moscap 工况,导致"模型 MOS 无容性 / LPF 电容坏"的误判(已由 pll_loop_cal_20261004/SOP.md 附录 F 推翻并修订)。

7.7 Spectre 台架:MOS 电容取值与两条命名/偏置陷阱(2026-10-04 实测)【已确认】

  • MOS 电容密度(NMOS_VTG 作电容、栅在 VCTRL):实测 ≈26 fF/µm²(10u/1u→259.7 fF、54u/1u→1403 fF,L=1u;vth0=0.4106、toxe=1.14n、capmod=2,≈0.86·Cox)。这是本环境里 sizing 的权威密度;附录 F 的 285 fF/10u(28.5 fF/µm²)与之同量级,方向一致。
  • 陷阱一:栅隧穿使 1 TΩ 偏置失效。模型 igcmod=1,MOS 栅有隧穿直流电流(实测 54u 器件 G≈8.6 µS@0.8 V);用 resistor r=1e12 给栅偏置会被该电流拉垮,电容在错误偏压下量出 ≈4 倍偏低的假值(实测 369 fF,真值 1403 fF)。正确做法:栅偏置用 inductor l=1e6(直流短路、交流开路);判据——纯电容相位 ±90°,但若|Z|在低频出现平台(被 G 钳位)即偏置已坏。
  • 陷阱二:节点名与参数名不得同名(大小写不敏感)。台架里参数 vctrl=0.8 与节点 VCTRL 同名会导致 dc=vctrl 解析异常。参数一律改写 vc0 等,节点名避开。
  • 瞬态斜坡测电容不可靠:栅隧穿电流随栅压无界增长(1.1 V 时"电容"虚增至 11.9 pF),附录 F 用峰值电流估得的值偏高;小信号电容以 AC 的 C=Im(1/V)/ω 为准(勿用 |V|,|V| 受并联 G 污染)。

7.8 Spectre 网表的硬规则:首行注释 / 温度用 simulatorOptions(2026-10-04 实测)【已确认】

  • 首行恒被当作注释:Spectre 忽略网表第 1 行。把 simulator lang=spectre 写在第 1 行会失效,整份文件按 spice 解析,症状离奇——如 tran1 tran stop=10n 被当成传输线元件,报 CMI-2484 RLGC matrix data not provided 或 SFE-874 Unexpected end of file。规矩:首行放注释(项目内所有 bench/*.sp 均合规)。
  • 温度只能用 simulatorOptions options temp=<T>:实测写在 analysis 语句上的 temp=85 被静默忽略(log 仍打印 temp = 27 C,无 warning);写成顶层 simulatorOptions options temp=85 时 log 显示 temp = 85。判据 = 读 log 的 temp = <T> C 行,勿只看网表写法。
  • corner 切换 = 换模型 include:verif/models/spectre_{nom,ss,ff}.include 现成可用(均为指向 /pdk/FreePDK45/.../tran_models/models_{nom,ss,ff}/ 的 12 行 .inc 清单)。

7.9 ADE-XL SKILL 脚本化契约(2026-10-04 实测)【已确认】

  • 无头可用:virtuoso -nograph 下 axlCreateSession("name") 可建会话(文档明示 non-GUI 支持);载入既有 setup 用 axlSetMainSetupDBLCV(sess lib cell view)。
  • 两层 API:结构层 = axl*(session/test/corner/model/vars/jobPolicy);分析/save 层属 OASIS(asi*/sev*),入口为 axlGetToolSession(t_sessionName t_testName)(两个字符串参数,不是句柄) → sevEnvironment → asiGetEnabledAnalysisList。
  • axlGetTests(x_hsdb) 返回 (testHandle (testName));axlGetTest(x_hsdb "lib:cell:N") 另返回一个句柄(与被测名字不同)。
  • axlPutTest 后必须紧跟 axlSetTestToolArgs,显式设 lib/cell/view 与 sim=spectre;否则默认 sim="hspiceD" + 空 state ⇒ sevEnvironment 返回 nil,整条 OASIS 链路全废。
  • 分析参数分两类(用错函数返回 nil):stop/errpreset 走 asiSetAnalysisFieldVal(field);maxstep/strobeperiod 走 asiSetAnalysisOptionVal(option)。
  • 无头落库入口:axlSaveSetupToLib 在无头下必失败(内部要 window)⇒ 用 axlCommitSetupDB(x_hsdb) + axlMainAppSaveSetup(sessionName)。
  • IC617 ADE-XL 无 psfbin:simOutputFormat 合法值仅 sst2 / psf / psf with floats / psfxl / fsdb。S2 的 psfbin 结论只对扁平 spectre CLI 成立,ADE-XL 侧须改用 psf/psfxl。
  • SKILL 无法持久化:① save 节点白名单(asiSetKeepList 回显但 asiGetKeepList 读回 nil);② Job Policy attach(axlAttachJobPolicy 仅会话内有效,重开读回 ADE XL Default/Local)。两者须 GUI。
  • 温度可脚本化:axlPutVar(corner "temperature" "85")(corner vars 读回含 temperature)。
  • pll_top/schematic 顶层端子 = REF / VDD / GND(无 VCTRL 引脚;VCTL 是内部网)⇒ 激励加 VCTRL 需 testbench 或加端口。
  • 文档位置:/tools/cadence/virtuoso/IC617/doc/adexlSKILLref/(sessionIl/setupDB/testRelated/cornersRelated/modelRelated/varRelated/runRelated/jobPolicy.html)。
  • ADE-XL 的 setup 改动必须退出 Virtuoso 才落盘:进程开着时 data.sdb 不变且存在 data.sdb.cdslck 锁;退出时「原理图」选不保存、「ADE XL」选保存。判据 = data.sdb 体积/mtime 变化。
  • 每个 test 的 ADE state 是纯文本 SKILL,位于 design/<lib>/<cell>/adexl/test_states/<lib>/<cell>/spectre/<test>_active/(含 analyses/outputs/graphicalStimuli/variables/modelSetup/simulatorOptions 等)。激励可直接改 graphicalStimuli(格式照 vco5 test 同名文件:"#INPUTS" + 每条 ((name …)(nodes ("网" "/gnd!"))(enabled t)(tranType "dc|pulse")(srcType "Voltage")(instParameters …)) + "#GLOBALS");改后用 asiGetStimulusInputs(env) 无头读回验证(已实测通过)。GUI Save All 的效果落在 outputs 的 _envSaveOptions。
  • Model Libraries 是 Run 的前置(2026-10-05 实测):test 的 modelSetup 决定 netlist 是否带 include "<...>/proj1/verif/models/spectre_nom.include"。未配 ⇒ 网表生成成功、但 spectre 在 read-in 阶段报 101× SFE-23(NMOS_VTL / PMOS_VTG / NMOS_VTG 等 undefined model)并 fatal,ADE-XL 该点显示 sim err。判据 = 比对 …/adexl/results/data/Interactive.N/<point>/<test>/netlist/input.scs 顶部有无该 include 行。corners 须分别对应 spectre_{nom,ss,ff}.include(proj1/verif/models/),切 corner 前先确认对应文件已挂;配好后 data.sdb 含 <modelfile>…</modelfile> 即已落盘。
  • OASIS(ADE-L)SKILL 参考在 doc/skartistref/chap*.html(asiGetStimulusInputs / asiFormatGraphicalStimuli 等)。

7.10 csh 用户拿不到 Slurm 命令:环境注入单轨(2026-10-05 实测;同日已修正)【已确认】

  • 域用户默认 shell = /bin/csh(getent passwd:cy01/rain01 均为 /bin/csh,业务用户 8 个同)
  • 两套启动文件互不通用:bash 由 /etc/profile 遍历 /etc/profile.d/*.sh;csh 由 /etc/csh.login:34、/etc/csh.cshrc:55 只遍历 *.csh
  • 修正前为单轨:slurm-path.sh / slurm_configless.sh 存在,.csh 版缺失 ⇒ su - cy01 下 sinfo/sbatch/srun 全部 Command not found,SLURM_CONF_SERVER 亦拿不到;Lmod 侧(zzz_site_lmod.csh、00-modulepath.csh、modules.csh)为双轨,形成对照
  • 修正后(2026-10-05)为双轨:补齐 slurm-path.csh、slurm_configless.csh(值与 sh 版同源渲染),并给 slurm-path.sh 加 PATH 判重;6 台(.16/.17/.18/.19/.20/.28)下发、su - cy01 验收通过。档案:slurm/slurm_ins/slurm_csh_profile_20261005/SOP.md
  • 临时补救:csh 用户执行 module load slurm(slurm/26.05.2 在 csh 侧可用,module 为正常 alias)
  • 验证登录环境的正确姿势:必须 su - <user>(走用户真实默认 shell);runuser -u rain01 -- bash -lc 会经 bash 读到 profile.d/*.sh,得到「全局可用」假阳性
  • 修正目标、参考改法与验收判据:docs/SLURM-CSH-INJECTION-GAP.md

7.11 Virtuoso 仿真数据落层机制与已证伪路径(2026-10-06 实测)【已确认】

  • 默认落点:projectDir 默认 ~/cadence/simulation(由 NCSU CDK cdssetup/cdsenv:31 设定;/pdk 只读不可改);ADE-XL 在其下建 <lib>/<cell>/adexl/results/data/Interactive.N/,netlist 与 PSF 全在此。
  • 官方开关:envSetVal("asimenv.startup" "projectDir" 'string <dir>)、envSetVal("adexl.results" "saveResDir" 'string <dir>)(IC617 均有效;不设 saveDir 时 Results DB 仍留 adexl view)。GUI 等价入口:ADE-XL → Options → Save...。
  • .cdsinit 加载链:<ICinstDir>/tools/dfII/local/.cdsinit → ./.cdsinit → ~/.cdsinit,只加载第一个命中者(后续不加载,除非第一个里显式 loadi 转发)⇒ cwd 有 .cdsinit 时 ~/.cdsinit 不生效。
  • 已证伪:CDS_SITE 不参与 .cdsinit 搜索(它属 CSF/setup.loc 机制,而 .cdsinit 默认不由 CSF 管理);站点目录下 6 个候选位置(cdsinit/.cdsinit/cdssetup/{cdsinit,.cdsinit}/local/.cdsinit/tools/dfII/local/.cdsinit)实测均未被加载。
  • 可行路径(R2):项目 .cdsinit(= /pdk/templates/.cdsinit 的副本,由 pdk_integration_20260927 管理)末尾追加落层段落——因在 NCSU 加载之后执行,envSetVal 能覆盖其默认值;同文件后写者胜出 ⇒ 用户可覆盖。isWriteable 非 IC617 有效 SKILL 函数,段落中勿用(目录存在性由平台侧保证)。
  • 前置阻塞(2026-10-06 发现,已解除):普通用户曾对 Lustre 不可写(服务端 l_getidentity 解析不到客户端 UID)⇒ test -w 会误报可写,判据必须用真实写入。已由 lustre_ins 修复(fix-lustre-write-perm/,补服务端本地镜像条目);2026-10-12 服务端 .21/.22 接入 sssd 后已删除本地镜像条目,身份源单一为 LDAP(remove_local_mirror_20261012/SOP.md),客户端真实写入复验通过。
  • 已实施(2026-10-12):.28:/projects/design/rain01/proj1/cdssetup/.cdsinit 末尾已追加 SIM-DATA-LAYERING 段——projectDir → /projects/design/rain01/proj1/simulation(Tier1 NFS 持久)、saveResDir → /mnt/lustre/scratch/users/rain01/adexl(Tier0 Lustre 共享临时)。无头 virtuoso -nograph 验证 envGetVal 返回上述值。已同步生成器 deployer.py::_render_templates() 与站点模板 /pdk/templates/.cdsinit(通用写法 getWorkingDir() + getShellEnvVar("USER");站点模板 1641 B→2459 B,临时目录无头验证通过)。依赖已处理:scratch/users 已参数化为 1777(slurm_ins/scratch_users_20261012/SOP.md)。档案 sim_layering_20261012/SOP.md。

7.12 ADE-XL measurement(output expression)的结果落盘与读取(2026-10-13 实测)【已确认】

  • 定义:Outputs Setup → 右键 Add Expression,填 Output Name + Expression;Save 列不用勾。落盘后 test_states/<lib>/<cell>/<sim>/<test>_active/outputs 多出一项:tmpN->name = "<名字>" + tmpN->expression = (...),且 tmpN->type = nil(signal 项为 'net)。
  • 结果落点:<adexl>/results/data/Interactive.<N>.log(人读汇总)+ Interactive.<N>.rdb;不在 Interactive.<N>/ 的 psf 目录里。
  • 日志格式:每个角两行——pll45:pll_top:1 corner <角名> - 与 dVCTL_lock <值>(角名在前、值在后,逐角列印)。
  • 读取命令:grep -n "" <adexl>/results/data/Interactive.<N>.log(全文 26 行量级)。
  • 实测(pll45:pll_top:1,tran 10 µs,4 路白名单,6 角;Interactive.16): dVCTL_lock = ymax(clip(VT("/VCTL") 9e-06 1e-05)) - ymin(clip(VT("/VCTL") 9e-06 1e-05))
角 dVCTL_lock 角 dVCTL_lock
nom_27 147.6 µV ss_85 267.5 µV
nom_85 5.44 mV ff_27 4.328 mV
ss_27 106.1 µV ff_85 120.7 µV
  • 判定口径:9~10 µs 窗口内 VCTL 峰峰值 ≈ 稳态纹波;最差 5.44 mV(nom_85)≈ VCTRL(0.55 V) 的 1% ⇒ 判定已进入稳态 ⇒ test_lock 时长定 10 µs。局限:峰峰值含纹波,单独用它不能区分"未锁定的大摆动",严格需看包络趋势(可补早期窗口同法对照)。
  • 成本实测:6 角合计 32 MB(每点约 5.2 MB,其中 psf 约 784 KB),落 Lustre;墙钟约 76 分钟(22:42:45→23:58:52)。

8. 档案指针

  • 本设计项目(Virtuoso × HPC 仿真学习):交接快照 docs/HANDOFF.md、项目地图 docs/PROJECT-MAP.md、阶段 1 生成器与契约 pll_sch_20261003/、标定 pll_cal_20261003/、阶段 0 冒烟 smoke_20261003/
  • 学习知识库 docs/kb/(九类学习文档,零基础可读;入口 docs/kb/README.md):知识地图 map-roadmap.md、术语表 glossary*.md、教程 tutorial-first-sim.md、操作 howto-adexl.md/howto-hpc.md、原理 concept.md、速查 cheatsheet.md、对比 compare.md、排障 incident.md、流程教学 walkthrough-whitelist.md
  • EDA 环境总档:/home/rain/Documents/eda_tools_ins/Cadence/docs/HANDOFF.md
  • 主题 SOP:ic617_install_20260926、pdk_integration_20260927、eda_workspace_standard_20260927、hpc_submit_eda_deps_20260927、license_srv_20260926、ic25_cleanup_20260927(均在上述 Cadence 目录下)

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