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。 psfCLI:/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 任务内 unsetPMI_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-XLInteractive.126 点全过、各点spectre.out生成,6 条作业分落 work-01/02 并行】 根因(2026-10-06 取证):本集群 Slurm26.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-t1800 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被执行(追加参数不带引号、无空格,故单引号包裹安全)。 实测:childHost 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(可批量,见档案), 与文件权限/库只读/编辑锁均无关(.oaliblibReadOnly="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(格式照vco5test 同名文件:"#INPUTS"+ 每条((name …)(nodes ("网" "/gnd!"))(enabled t)(tranType "dc|pulse")(srcType "Voltage")(instParameters …))+"#GLOBALS");改后用asiGetStimulusInputs(env)无头读回验证(已实测通过)。GUISave 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 CDKcdssetup/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同步,请勿在站点侧修改)