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