Q
HSPICE 中電阻模型輸入方式與 Corner 驗證:電阻變異為什麼看不出差異?
A
在半導體設計中, HSPICE 是業界最標準的類比電路仿真工具。關於電阻在 HSPICE 中的輸入方式與 Corner 驗證結果,工程師常見的困惑是:「電阻模型的變異跑完後,出來的數值跟沒變異一樣?」這通常不是軟體問題,而是模型本身的設定問題。
HSPICE 電阻的基本輸入語法
方法一:直接指定電阻值
R1 net1 net2 10k
這是最簡單的方式,R1 為 10kΩ 的理想電阻,不隨溫度或電壓變化。
方法二:使用模型(Model Card)
R1 net1 net2 modelname W=10u L=1u
.MODEL RNM RES (
+ RSH = 100 ; Sheet resistance (Ω/sq)
+ PRWG = 0.05 ; Width gain effect coefficient
+ PCAL = 0.01 ; Calibration coefficient
+ TC1 = 0.001 ; Temperature coefficient 1
+ TC2 = 0.0001 ; Temperature coefficient 2
+ LINT = 0.1u ; Length offset
+)
這種方式可以描述寬度效應、溫度係數等非理想特性。
為什麼 Corner 跑完數值幾乎不變?
這個問題的原因有兩個可能:
原因一:模型參數本身沒有設變異範圍
如果你的 .model card 裡只有 nominal 值(如 RSH=100),而沒有設定 +/- 變異(Monte Carlo 或 corner),那跑任何模式結果當然相同。
原因二:Corner 定義中沒有涵蓋電阻參數
打開你的 corner deck(如 fets.corn 或 rc_corn)查看,是否有類似这樣的宣告:
.param R_Top=1.0 R_Bot=1.0
如果沒有,電阻就會以 nominal 值計算,導致看不出變異。
Flash ADC 中的電阻 Model Name 語法
對於 Flash ADC 這類需要大量電阻分壓網路的電路,建議使用:
R ladders 0 vref電阻 model=RES_W pchk yes
+ w=1u l=5u m=1
在 HSPICE 中,分壓網路可以用「砍數(M)」參數一口氣建立多個相等電阻的串聯,等效於:
R1 0 n1 1k
R2 n1 n2 1k
R3 n2 n3 1k
... 改寫成:
RX 0 vref 1k m=15 ; 等效為 15 個 1kΩ 串聯
正確設定電阻變異的步驟
- 在 .param 區段正確定義電阻參數的變異範圍(如 ±20%)
- 確認 .model card 包含 TC1、TC2(溫度係數)
- 在 corner deck 中加入 res_corner = 1.1 或 0.9 之類的參數
- 檢查 .lib 語法:.lib some_corners.txt tt 應該確實被載入
Related:電阻