# 第二章 Spectre 仿真

[仿真網頁](index.html) · [Markdown 報告](report.md) · [執行與驗證索引](verification.json)

## 已執行的範圍

20 組推導的代表模型：32 組顯式小訊號元件 AC、7 個 MOS1 電路 AC、5 組獨立 PZ、3 個暫態情境，共 47 項檢查。每組的實際案例見 [module_summary.json](module_summary.json)。這不等同於逐張搭建第二章全部電路。

使用已安裝的 virtuoso-bridge-lite 0.8.0，原始碼 commit `74649fbc28af14f1a6853ae8586b43cdba3747a1`；透過獨立 Spectre runner 執行，沒有啟動或修改 Virtuoso GUI 的設計。實際 Spectre 版本為 18.1.0.077。

## 教學模型的定義

本輪沒有指定 PDK，使用可追溯的 MOS1：

- NMOS、PMOS 的 |VTO|=0.45 V，KP=100 µA/V²，lambda=0.1 V⁻¹。
- gamma=0、tox=10 nm；顯式 overlap／junction 電容設零，MOS1 的本徵 Cgs 仍保留。
- L=2 µm，查表 W=20 µm；VOV 掃描 0.05–0.60 V、步長 5 mV。
- 先取仿真的 gm/Id=10 V⁻¹，再由 Id/W 選 W=171.360 µm，使 VDS=1 V 時 gm=1.88496 mS、Id=188.496 µA。
- PMOS 的 gm/Id 採 gm/|Id|；飽和條件採 |Vds|>|Vdsat|。

模型檔包含在各完整 netlist 中。BJT 目前是顯式 hybrid-pi 等效電路，沒有使用 foundry BJT 模型。原倉庫提供 Spectre／netlist skill，本次在其 runner 上實作量測 gm/Id 的查表流程。

## 三種誤差分開記錄

1. **完整模型 vs Spectre**：AC 複數傳輸、相位與符號一起比較，逐點相對誤差上限 2e-5。
2. **教材近似 vs Spectre**：另外報告偏差，不把近似失效算成完整模型驗證失敗。
3. **暫態 vs 完整理論**：積分輸入的 1 ns 上升沿後比較，歸一化輸出最大絕對誤差上限 2e-5。

PZ 原始輸出單位為 Hz；代數 s 平面根除以 2π 後比較，容許相對誤差 2e-5。使用 `docancel=no` 保留重合的 pole／zero。PZ 的 `dcGain` 欄位未用來決定傳輸正負號；正負號由 AC 複數波形核對。

MOS 的 AC 參考使用實際 DC 工作點 gm、gds、Cgs。七個電路共十顆 MOS 都通過 `region=2` 及正的飽和裕量檢查。這證明所列 MOS1 模型內的小訊號一致性，沒有驗證真實製程、大信號失真、PVT 或版圖。

## 原始資料

- `netlists/`：實際執行的 `.scs` 副本，帶清楚節點與引腳順序。
- `runs/<deck>/result.json`：命令、exit code、原始 netlist SHA-256、下載路徑及執行時間。
- `runs/<deck>/spectre.out`：原始 Spectre 日誌。
- `runs/<deck>/*.raw/`：未修改的 PSF ASCII。
- `csv/`：逐點仿真、理論與誤差，或 gm/Id 查表。
- `assets/`：可縮放的 SVG 科學圖。
- `*_results.json`：每個案例的條件、誤差與結果。

初始 `smoke` 是連線與受控源方向探針，其輸出為 +100；正式線性套件已按此測試確認 VCCS 端子方向，CS 輸出為 −100。`smoke` 沒有計入 47 項驗證。

所有正式資料已下載到本機持久工作區。遠端 `/tmp` 僅執行暫存，日後消失不影響現有 netlist 與波形。

## 重建流程

從 Sansen 工作區根目錄執行。使用原 bridge 專案已安裝依賴的 Python 虛擬環境：

```sh
SANSEN_BRIDGE_PY=/Users/zhangboyan/Documents/Codex/2026-09-11/https-github-com-arcadia-1-virtuoso/work/virtuoso-bridge-lite/.venv/bin/python
python3 scripts/generate_ch02_sims.py
"$SANSEN_BRIDGE_PY" scripts/run_ch02_spectre.py linear_suite gmid_characterization doublet_transient
"$SANSEN_BRIDGE_PY" scripts/analyze_ch02_linear.py
"$SANSEN_BRIDGE_PY" scripts/design_ch02_mos.py
"$SANSEN_BRIDGE_PY" scripts/run_ch02_spectre.py mos_validation pz_miller pz_follower_cancel pz_follower_center pz_two_stage pz_gainboost_slow
"$SANSEN_BRIDGE_PY" scripts/analyze_ch02_mos.py
"$SANSEN_BRIDGE_PY" scripts/analyze_ch02_pz.py
"$SANSEN_BRIDGE_PY" scripts/report_ch02_sim.py
node scripts/build_ch02_sim.mjs
python3 scripts/prepare_ch02.py
node scripts/build_ch02.mjs
python3 scripts/build_catalog.py
python3 scripts/verify_ch02_sim_artifacts.py
python3 scripts/verify_ch02_site.py
python3 scripts/verify_extraction.py
```

連線設定為工作區內的 `simulations/ch02/bridge.env`，沿用既有 SSH 認證；原 bridge 專案設定未改動。SSH 網路權限及 Spectre license 必須可用。重新執行同名 deck 會更新本機該 run 目錄，若需保留多次完整實驗，先複製或版本化 `output/simulations/ch02/runs`。

網頁為本機静態文件，含 Markdown 解釋與排版公式。圖像與資源完成靜態檢查，沒有執行瀏覽器互動測試。
