RUSTSTA · 0.2.0 · 2026-10-23

SPEF 进入时序计算。

支持普通和 gzip SPEF,严格检查单位、名称、RC 拓扑与资源预算,并将结果写入可重开的工作区,用于一阶 RC 延迟和显式传播时钟分析。

SPEF / .spef.gz→PARASIT · mmap→NLDM + Elmore→时序 / 完整重算
669
常规测试通过
另有双 PDK 实际单元替换验证
4 / 4
独立 RC 一阶矩验证通过
分支、零电阻、非对称与宽数值范围
2 / 2
CPU / CUDA 验证通过
f64 结果逐位一致

已实现的范围

当前模型是集总 NLDM + 一阶 Elmore,耦合按系数 1 接地,不求解有效电容波形或串扰。格式支持、模型验证、与其他计算器的一致性以及设计时序闭合,是不同的结论。

独立节点方程验证

Ngspice 通过独立节点方程 Gτ=C 计算一阶矩,RustSTA 通过树归约计算。下表单位均为 ns,不是 50% 电压阈值延迟。

案例RustSTA独立节点求解绝对差
branch0.30.30
zero_resistance0.080.080
asymmetric0.116450.116452.78e-17
wide_range0.33271720.33271720

双 PDK 实际提取

PDKRC 网RC 节点输入未约束端点R=0 校准差 ps完整 RC 差 ps
sky130195083gzip00.000467733.1487
gf180195077gzip00.000744286.7928

真实文件的节点、负载、传播时钟及完整 / 增量重算均通过功能验证。R=0 仅作为名称、电容和单元模型校准,不能代替真实提取。实际单元替换后仍与完整重算一致。

严格参考比对仍为 partial。完整非零 RC 与 OpenSTA 默认计算器的差异约 3.15 / 6.79 ps,超过保持不变的 1 ps 门槛。不同计算器没有被假定为同一波形模型,差异未被隐藏或改写为通过;也不据此声称时序签核完成。

使用方法

rusteda init --workspace work --format json
rusteda import --workspace work --base-rev rev0 \
  --lib cells.lib --corner tt --netlist routed.v --sdc timing.sdc \
  --spef routed.spef.gz --spef-corner tt --format json
ruststa run --workspace work --base-rev rev1 --corner tt \
  --precision f64 --max-state-gib 1 --format json
ruststa check --workspace work --base-rev rev2 --method full --format json

默认输入和解压结果各不超过 32 MiB、100,000 个网、500,000 个节点和 1,000,000 个元件。预算可配置但有硬上限。原生核心不依赖 Python 或 GUI;外部求解器仅用于验证。

证据与资源

联合验证耗时 0:02.26,峰值进程 RSS 为 120,300 KiB。包含输入、mmap、解析、计算、完整重算及参考进程;这是小样例功能测试,不是工业规模吞吐量结论。

结果与文件指纹 · 验证方法与限制 · 使用说明 · 模型定义 · 可复现验证脚本