引言
SPICE(Simulation program with Integrated Circuit Emphasis)做爲電路級模擬程序,是許多仿真軟件的核心,好比Tanner Tools、Cadence。html
本文旨在向初學者介紹SPICE的概況、原理以及應用,幫助初學者對SPICE創建一個基礎的概念。算法
目錄
一、簡介
二、原理
三、SPICE模型
四、應用
工具
簡介
SPICE是1972年伯克利大學開發的一個電路分析工具,但實際上它只是一個內核,提供核心算法SPICE。要使用各類各樣的功能,須要跟它的各類殼(如PSPICE、HSPICE等)進行對話。
性能
SPICE發展至今,已經由許多公司開發出了各自的仿真器,好比HSPICE、PSPICE、smart-SPICE、TSPICE、spectre等,其中最出名的當屬HSPICE。固然其餘的仿真器也具備各自的特點,好比spectre就是由Cadence公司開發的,它的運算速度更快,而且收斂性會更好。ui
具體的歷史能夠參見這篇文章,寫的妙不可言,SPICE簡史。spa
原理
SPICE實際上是一個解非線性常微分方程的工具,裏面內嵌了器件、電路的數學公式。好比下方的關於MOSFET的公式
.net
咱們輸入的網表文件,暗含了各個元器件的鏈接關係,就構成了一個個方程組,靠着計算機強大的算力,將這些方程組解出來,咱們就能得到咱們想要的信息,好比某個節點的電壓,某條支線的電流。設計
這裏提到一個概念叫作網表文件,網表文件是一個描述電路元件之間相互鏈接關係的代碼,和咱們想要仿真的電路是對應的。好比下圖就是M1晶體管分別與out in vdd vdd四個電極相連
3d
所以,咱們能夠把SPICE理解爲一個輸入是網表文件,輸出是電路參數的盒子。可是,不一樣仿真器的輸入文件在格式上有所差異,有些差異較小,好比TSPICE和HSPICE,只須要改一些細節就能夠將一個仿真器的輸入文件做爲另外一個仿真器的輸入。但也有些差異較大,好比HSPICE的語法和spectre的語法就有較大的差異,二者之間的轉換須要複雜的操做,過程能夠參考這個連接。htm
除了輸入文件不一樣,不一樣仿真器的輸出結果也會有所差別,好比仿真一個晶體管的Id-Vg曲線,不一樣仿真器的結果會略有差別。所以,對於對器件性能要求比較高的仿真,應當觀察哪一個仿真器的結果和實際最爲接近。
計算機在解方程的時候,實際上會不斷迭代,向真正的解靠近,一旦迭代次數超過最大迭代次數,或者解是發散的,就可能會出現仿真結果不收斂的狀況,這種狀況,除了修改仿真器的內部算法,更可能的緣由是電路設計上存在缺陷。
事實上,有意思的一點是,咱們只要掌握了SPICE中的那些數學公式,咱們甚至能利用MATLAB來進行仿真,固然,這隻針對單個器件或者簡單電路以及收斂性要求不高的狀況下。咱們曾經用matlab來仿真一個晶體管的Id-Vg曲線,其結果和HSPICE的仿真結果基本同樣。這在一些特殊的領域,好比SPICE模型去和實際模型擬合時,具備重要的意義
SPICE模型
SPICE模型就是上文所說的一組表徵器件物理性能的方程,其中包含具備物理意義的模型參數。可是對於一種特定的器件,其電學性能,遵循的電學公式每每是不同的,好比MOSFET和TFT(薄膜晶體管),他們對閾值電壓的處理,就有所不一樣。
所以,針對特定的器件,每每由具體的SPICE模型,對於一些經常使用的器件,好比NMOS,咱們用一些自帶的模型每每已經足夠,可是對於一些特殊的器件,它的性能參數與它的生產工藝有關,它的模型每每由生產它的公司提供。
下面以HSPICE的模型爲例,解釋說明模型中的語句內涵
圖片轉載自https://wenku.baidu.com/view/c066b15f561252d380eb6ec1.html
mod1:模型名稱,也就是網表文件中具體元器件調用的名稱
nmos:元器件類型
VTO等其餘參數:這些參數表現了這個元器件的特性,能夠經過修改這些參數來修改元器件的特性,這些參數的集合被稱爲模型卡。
注:在SPICE模型文件中,每每還有一個LEVEL參數,用來指定哪種模型,不一樣LEVEL之間的模型,其參數會有差異,固然也有爲了模擬其餘類型器件而創建的LEVEL好比LEVEL=62就是LTPS(低溫多晶硅)TFT的模型。
每每這些參數在模型文件中已經有了一個缺省時的默認值(能夠參見HSPICE的模型手冊)
SPICE的這些參數有些具備實際的物理意義,有些是單純的數學參數,有些參數甚至是根據實際的經驗公式來制定的,具體的含義能夠查閱模型手冊。
LEVEL 58的部分模型參數
應用
知道了原理,那咱們怎麼對一個電路用SPICE進行仿真呢。就像咱們以前說的,咱們須要與一個仿真器進行對話,這裏咱們採用HSPICE來做爲例子。
HSPICE對一個TFT進行Id-Vg曲線仿真
-
本身手寫一個或者從其餘軟件導出這個電路的網表文件。對於不復雜的電路,能夠直接手寫,可是對於龐大複雜的電路,建議先用其餘軟件畫出電路圖,再導出這個電路圖的網表文件。手寫的話能夠參照HSPICE的相關語法。
-
調用所用到的器件的模型,如今仿真器通常支持的模型庫都比較全面,通常的模型文件都能識別。完整網表以下
-
進行仿真,根據電路的規模和複雜程度,仿真時間也會有所差異。這裏可能會出現仿真結果不收斂的狀況,這時候你須要檢查下你的電路是否在一些點發生了衝突,或者能夠換個仿真器進行嘗試,或者修改仿真器的算法機制(更改迭代數、收斂的偏差範圍之類的)。