?SPICE簡史之誕生
如今,每一天都有不知其數的半導體芯片設計公司與設計驗證工程師,在用著電路仿真軟件SPICE。SPICE廣泛應用在仿真模擬電路(例如運放OpAmp,能隙基準穩壓電源BandgapReference,數模/模數轉換AD/DA等),混合信號電路(例如鎖相環PLL,存儲器SRAM/dRAM,高速輸入/輸出接口high-speedI/O),精確數字電路(例如延時,時序,功耗,漏電流等),建立SoC的時序及功耗單元庫,分析系統級的信號完整性,等等。作為最早的電子設計自動化軟件,它今天仍然是最重要的軟件之一。可以說,沒有SPICE,就沒有電子設計自動化這個產業,也就沒有今天的半導體工業。它的市場超過上億美元。所有這一切,都是從1970年加州大學伯克利分校電機工程系的一堂課開始的。
SPICE的誕生
時間回到1970年,在加州大學伯克利分校電機工程與計算機科學系(UCBerkeley , Dept. EECS),Ron Rohrer教授給七個研究生上“電路綜合”課。Rohrer教授那時剛剛從仙童半導體公司(Fairchild Semiconductor)返回伯克利,沒有時間準備教材。所以,在第一堂課,他就宣布:學生們一起寫一個電路仿真程序。他跟系里的管教學的主任DonPeterson教授達成一個協議:只要Peterson教授認可學生們寫的仿真程序,他們就全部通過。否則的話,他們就全部不及格。這七個學生中有一個還是從機械系來的。他感到十分委屈:教授啊,俺啥電路都不會,俺就是來學電路的。這倒好,電路沒學到,反而要去寫電路仿真程序。這可咋辦?。縍ohrer教授想了想,說沒關系。雖然電路你不懂,但你的數值分析不是很厲害嗎?OK,你就負責解方程這塊吧。最后的結果證明了恰恰是學生們自己開發的解稀疏矩陣的模塊是一個亮點,它使得可處理的電路規模成倍的增大。為什么這么說呢?如果你學過數值方法,你就知道一般解方程組用的是高斯消元法。它的復雜度是O(n^3)。也就是說,電路規模增大一倍,你的運算時間就要增大到8倍。當時的電路仿真程序最多可以仿真10個晶體管。超過這個數,不是你的預算被燒沒了,就是你的耐心被耗沒了。但是,學生們注意到從電路搭出來的矩陣有個特點,就是它的稀疏性。一個電路矩陣里很多元素都是0(意味著兩個電路節點之間沒有連接關系)。既然是0,那就沒有必要去存儲和計算它了。這樣一來,存儲量和計算量大大減少了(是啊,連小學生都知道任何數乘0還是0。你沒事兒就別搞一大堆乘0的運算了)。
很多SPICE里面的基本要素都來自于Rohrer教授指導的這一堂電路分析課的項目,包括上面講到的解稀疏矩陣的模塊,還有隱式積分算法的使用使得瞬態分析更加穩定。并且,程序里加入了自帶的半導體器件模型,用戶只需要給出一組模型參數,用不著自己提供器件模型的FORTRAN模塊了。
這七個學生推舉LaurenceNagel為代表,由他負責向Peterson教授匯報結果。這個結果就是CANCER。沒錯,它的意思就是“癌癥”。它是“不包括輻射的非線性電路計算機分析”(”ComputerAnalysis of Nonlinear Circuits, Excluding Radiation”)的縮寫。不要忘了,這是在一個叛逆的時代。當時絕大部分的電路分析軟件來自于大公司與政府/軍方的合同開發。在冷戰和核威脅的環境下,政府/軍方要求這些軟件都具有分析電路抗核輻射的能力。伯克利是反戰的大本營,學生們自己開發的程序當然要跟政府/軍方的要求對著干了。
有同學可能會問:為什么要開發一個電路仿真程序?呵呵,要知道在這之前,人們分析電路,要么是用筆和紙,要么就要搭電路板(breadboard)。Peterson教授就被學生們稱之為“信封教授”,因為他認為電路分析用個信封的背面來做就足夠了。但隨著電路規模的增大,用筆紙變得越來越不可能,搭電路板又不能精確反應芯片上的電路特性,而且費用也越來越高。因此,用軟件來做電路仿真就變得日益迫切了。
當課程結束,Nagel向Peterson教授匯報CANCER之后,Peterson教授給予了全心的認可。學生們都通過了!CANCER成了Nagel的碩士論文課題。它在伯克利被很多本科生及研究生使用,并且給了大量的建議去改進它。呵呵,都說學生是最好的“小白鼠”,這話果然不假(再插一段話:基于這堂課的巨大成功,Rohrer教授后來又用同樣的辦法試了幾堂課,但都失敗了。他自己總結說,是因為有Nagel,伯克利的那堂課才成功了。所以,如果沒有Rohrer教授那樣的功力和Nagel那樣天分的學生,SPICE也不可能從一堂課里誕生出來。)
到了1971年的秋天,Nagel在伯克利又開始了他的博士生生活,這一回是在Peterson教授的指導下了。(在這之前,Rohrer教授離開了伯克利到工業界去發展。原因嘛,據說Rohrer教授與Peterson教授在是否要公開CANCER的源代碼上有不同意見。Rohrer教授后來又回到了學術界,在卡內基-梅隆大學(CMU)做教授,并指導開發了AWE,這是后話。)
Peterson教授給Nagel的第一個任務是給程序起個新名字。確實,CANCER太難聽了,誰都不喜歡。Nagel花了天知道多長時間才想出來這樣好聽的,也是我們現在還在用的名字:SPICE(SimulationProgram with Integrated Circuit Emphasis)。(所以,同學,如果你要寫一個新程序,創建一個新公司,生一個小孩,一定要給她/他起個好聽的名字。)1971年被正式認定為SPICE誕生的年份。
Nagel當年在伯克利的照片
Rohrer教授
Peterson教授
SPICE還是開源代碼的先驅。當時也有開源代碼,但都沒有太大的商業價值。SPICE就不同了。有人已經看到它的商業價值,但Peterson教授堅持要把代碼開源(我們都得真心的感謝Peterson教授)。任何人只要花20美元的手續費,就可以得到SPICE的源代碼(當然,在冷戰時期,SPICE被禁止出口到政府認為的“共產國家“)。有人會問,那這樣一來,伯克利是不是損失了一大筆錢呢?事實并非如此。伯克利的SPICE幫助數字設備公司(DEC)賣出了很多臺VAX機。反過來,DEC給伯克利電子系捐贈了一千八百萬美元(這可是二十年前的數目,考慮到通貨膨脹,你可以想象現在值多少錢)。這么多錢可不是一個學校賣代碼能獲得的。所以,做好事終究還是會得到好報的。
?
?SPICE簡史之
SPICE2和SPICE3
SPICE2和SPICE3
在70年代初期,伯克利電子系用的計算機是CDC6400大型機,它的運算能力相當于286(它的時鐘頻率是10兆赫,可它的成本是六百萬美元。再看看今天你手中的iPhone,它的時鐘頻率超過1000兆赫,成本不到六百美元–這是一百萬倍性價比的差別?。┓纸o每個學生的主內存白天為256K字節。到了晚上人少,你就可得到384K。運行一個不算太大的電路仿真,用Nagel的話來說,就像把你11碼大的腳穿進嬰兒的鞋里–你得想盡一切辦法節省內存。能仿真的最大的電路規模也就是25個雙極晶體管(相當于50個電路節點)。而且,那時候SPICE還只有雙極晶體管模型。71年的秋季,從貝爾實驗室來到伯克利的DavidHodges教授帶來了第一個MOSFET模型:Shichman-Hodges模型。如果你用過SPICE(并且年頭足夠多的話),你應該知道這就是Level1 MOSFET模型。它是所有MOSFET模型的鼻祖(下面我們還會講到MOSFET模型的)。
1975年Nagel從伯克利博士畢業。他的論文“SPICE2:A COMPUTER PROGRAM TO SIMULATE SEMICONDUCTOR CIRCUITS”, 成為了EDA行業被引用最多的文章。
SPICE2這個版本基本上奠定了今天電路仿真程序的基石,其中包括:改進的節點分析法(ModifiedNodal Analysis),稀疏矩陣解法(Sparse Matrix Solver),牛頓-拉夫遜迭代(Newton-RaphsonIteration),隱性數值積分(ImplicitNumerical Integration),動態步長的瞬態分析(Dynamic Time Step Control),局部截斷誤差(LocalTruncation Error),等等-- 說太多技術細節了,還是接著講故事吧。
Nagel畢業后去了貝爾實驗室。從此以后,SPICE2的改進就由Nagel的室友,EllisCohen,繼續進行下去。Ellis是個計算機編程能手。用當時周圍學生的話說,他就是一個長成人形的計算機。是他(以及后來的AndreiVladimirescu和Sally Liu)把學校里開發的程序SPICE改造成了實用的SPICE2G6。在SPICE的早期開發中,他是個無名英雄。今天工業界里的很多商業SPICE就是基于SPICE2G6開發出來的。
這是Nagel博士論文的封面。
你可以用下面的鏈接下載這篇論文:
http://www.eecs.berkeley.edu/Pubs/TechRpts/1975/9602.html
如果你想了解SPICE的核心秘密,就下載一份好好讀讀吧!
最早的SPICE2沒有用戶界面。它的運行是批處理方式。也就是說,你準備好了你的電路描述和仿真命令,就把它們提交給主機系統里。然后呢?然后你就可以下班回家了(多好?。?。因為你的幾十個(或幾百個)同事也在做著同樣的事。這就好像在一個銀行里只有一個辦事員(主機),而有幾百個顧客(提交的仿真任務)排著隊。這個辦事員動作又慢(286的速度)。所以,等第二天早上上了班再看結果吧!(下面在講HSPICE時我們還會講到這個情況)。
SPICE2的輸入是用打卡。你可能會問:什么是打卡???呵呵,祝賀你年紀夠小。對那些年過半百的人,最初接觸到的計算機輸入界面就是像下面這樣的卡:
你把你的電路描述及仿真命令打在一疊這樣的卡上,然后放到讀卡機里。你可能聽說過SPICE的輸入叫“SPICE DECK”,這個名字就是從這疊卡來的。
SPICE2的輸出是行打印機。是的,就是用下面這樣的打印機打出仿真結果在紙上(想象一下那時消耗了多少紙張)。
你也可以打印輸入輸出的信號波形。每個波形是用不同的字符畫的。像下面
這樣(看著是不是很粗糙啊):
有同學讀SPICE手冊時會看到一個奇怪的選擇項叫”NOPAGE“。這是因為SPICE的輸出在頁與頁之間的折線處會加入一個分頁符,留出空白。這個選項就是要求不要停止打印的。這樣一來,波形就不會因為換頁而在頁與頁之間斷掉了。隨著行打印機的消失,這個選擇項也進入了歷史。呵呵,如果有誰知道這個選項,那他的“年齡”至少在40歲以上。
后來SPICE2的輸入/出也進化成了文件輸入/出,像下面這樣:
到了八十年代,SPICE2已經遍及了各個大學。但它的問題也顯現出來:FORTRAN代碼太難維護,加新的器件模型需要改動的地方太多,等等。在此同時,C作為一種新的程序語言正方興未艾。于是,用C語言重新寫SPICE就被提到了議事日程上來。這個任務被伯克利的ThomasQuarles在89年的時候完成了。比起SPICE2來,SPICE3增加了用戶界面,你可以使用命令,甚至命令串來控制程序。另外,還增加了圖形界面看波形。更重要的是,SPICE3的程序構架更加清晰,更加模塊化。維護及修改起來更加容易。八十年代也是計算機硬件突飛猛進的時代:大型機(mainframe)被工作站(workstation)取代。UNIX及架構在它上面的C-shell和X-window成為軟件開發及應用的基本框架。另外,個人電腦(PC)也越來越普及。這些都為SPICE的廣泛應用打下了堅實的基礎(下面我們講商業SPICE時會提到)。
同樣,你可以用下面的鏈接下載Quarles的論文http://www.eecs.berkeley.edu/Pubs/TechRpts/1989/ERL-89-46.pdf下面是SPICE3(版本3f5)的執行語句,注意它是交互式的。每一個“Spice->”后面是一個Spice3的命令。比如“source”就是把電路讀入,“run”就是運行,”display”就是顯示,”quit”就是退出。
SPICE3自帶了一個圖形模塊nutmeg。下面是nutmeg顯示的波形,是不是比SPICE2的行打印的字符波形好看多了?
自從上世紀九十年代后,學術界SPICE的發展基本就停止在SPICE3f5這個版本了。這是不是意味著SPICE停滯不前了呢?非也。至少在兩個方向上SPICE還在一直發展:一個是器件模型(特別是MOSFET模型),另一個是商業SPICE程序。(這里值得提一下,有一批SPICE的愛好者及高校把SPICE3f5接過來,并整合了其他幾個開源軟件(xspice,cider, gss,adms,等),建成了ngspice。Ngspice也在緩慢的進化著,但比起商業SPICE進化的速度慢多了。你可以在sourceforge上找到ngspice。)
編輯:黃飛
?
評論
查看更多