芯片設(shè)計流程(一)——序章
目前,國外集成電路設(shè)計已經(jīng)非常成熟,國外最新工藝已經(jīng)達(dá)到7nm,而國內(nèi)才正處于發(fā)展期。有關(guān)于集成電路的發(fā)展就不說了,網(wǎng)絡(luò)上有的是資料。對于IC設(shè)計師而言,理清楚IC設(shè)計的整個流程對于IC設(shè)計是非常有幫助的。然而,網(wǎng)絡(luò)上似乎并沒有有關(guān)于IC設(shè)計整個流程的稍微詳細(xì)一點的介紹,僅僅只是概略性的說分為設(shè)計、制造、測試、封裝等四大主要板塊,有的資料介紹又顯得比較分散,只是單獨講某個細(xì)節(jié),有的只是講某個工具軟件的使用卻又并不知道該軟件用于哪個流程之中,而且每個流程可能使用到的工具軟件也不是太清楚(此觀點僅為個人經(jīng)歷所得出的結(jié)論,并不一定真是這樣)。因此,我對目前所接觸到的有關(guān)IC設(shè)計流程的相關(guān)事宜做一個個人性的總結(jié)。這個總結(jié)并不是很準(zhǔn)確,因為個人的經(jīng)歷所限,有很多芯片設(shè)計流程中的細(xì)節(jié)沒辦法接觸,對于晶圓制造,封裝等板塊都不是太熟悉,但這至少算是一個相對完整的有關(guān)IC設(shè)計的總結(jié)。
芯片正向設(shè)計與反向設(shè)計。目前國際上的幾個大的設(shè)計公司都是以正向設(shè)計為主,反向設(shè)計只是用于檢查別家公司是否抄襲。當(dāng)然,芯片反向工程原本的目的也是為了防止芯片被抄襲的,但后來卻演變?yōu)樾」緸榱烁旄〕杀镜脑O(shè)計出芯片而采取的一種方案。目前國內(nèi)逐漸往正向設(shè)計轉(zhuǎn)變的公司也越來越多,正逐漸擺脫對反向設(shè)計的依賴。當(dāng)然,正處于發(fā)展初期的公司也不少,自然反向設(shè)計也是不少的。本文章從芯片反向設(shè)計開始進(jìn)行總結(jié)。
芯片設(shè)計流程(二)——工具
“工欲善其事,必先利其器”。隨著集成電路的不斷發(fā)展,不管是芯片正向設(shè)計還是反向設(shè)計,它們對于工具的依賴性越來越強,因此,在要開始講設(shè)計流程之前,先來看一看,我們到底會用到哪些主要的工具和輔助性的軟件。
一、主要工具軟件
說到設(shè)計工具,就不能不提到三大EDA廠商——cadence,synopsys,mentor。這三家公司的軟件涵蓋了芯片設(shè)計流程的幾乎所有所能用到的工具。首先是cadence公司,這家公司最重要的IC設(shè)計工具主要有candence IC系列,包含了IC 5141(目前最新版本是IC617),NC_VERILOG(verilog仿真),SPECTRE(模擬仿真),ENCOUNTER(自動布局布線)等等synopsys公司,最出名的是它的綜合工具design complier,時序分析工具prime time,模擬仿真工具h(yuǎn)spice等;mentor公司最出名的工具是calibre(版圖DRC LVS檢查),modelsim(verilog仿真)。
這些都是IC設(shè)計最常用的工具,無論是正向設(shè)計還是反向設(shè)計。當(dāng)然,隨著軟件版本的更新迭代,軟件的名字可能有所變更,并不是上述的那些名稱。另外,這些工具主要集中在以linux為內(nèi)核的操作系統(tǒng)上,主要代表有Red Hat。所以有關(guān)unix\linux類操作系統(tǒng)的知識還是有必要學(xué)的,該類系統(tǒng)與windows系統(tǒng)有很大的不同,要想學(xué)會使用這些軟件,首先要學(xué)習(xí)這些操作系統(tǒng)的相關(guān)知識,具體資料網(wǎng)上有很多。部分工具有windows版本,例如hspice,Modelsim。
二、 輔助類工具軟件
當(dāng)然,除了這三大EDA廠商的IC設(shè)計工具外,Altera(intel)、Xilinx、KeilSoftware這三家公司的軟件開發(fā)環(huán)境等,都是對于IC設(shè)計流程中比不可少的工具。它們分別是用于FPGA、單片機&ARM芯片的開發(fā)。這類軟件在芯片的CP測試和芯片應(yīng)用方案開發(fā)上會有用到。
版圖提取工具,NetEditorLite、ChipAnalyzer,這兩個工具主要是針對芯片反向設(shè)計而言的。
算法設(shè)計工具,MATLAB,此工具應(yīng)用范圍很廣,但對于芯片設(shè)計來說,它較為適用于算法原型開發(fā),例如,通信算法。
PCB版圖工具,Altium Designer,Orcad,Allegro。其中,目前Orcad,Allegro是屬于cadence電路系統(tǒng)設(shè)計套件內(nèi)的主要軟件,而Altium Designer是最常用的軟件,它的前身是Protel。
Labview與數(shù)字源表,這一對軟硬件主要用于芯片電氣參數(shù)的半自動化測試,特別是模擬芯片。其目的是芯片設(shè)計公司用于分析芯片樣品參數(shù)用。
對于這些工具的該如何使用,我會在下面的文章中進(jìn)行說明。ps:沒有具體說明軟件使用環(huán)境的,一般是在windows環(huán)境下使用。
芯片設(shè)計流程(三)——反向設(shè)計
因為個人對芯片的反向設(shè)計比較熟,所以先從反向設(shè)計說起。下面是我整理的芯片反向設(shè)計的流程圖,在這些流程里面,我大部分都做過,但也有些地方是不熟的,比如說,版圖繪制、芯片制造和封裝等,這將在下一章進(jìn)行詳細(xì)說明。
一、反向設(shè)計總體規(guī)劃
在進(jìn)行一塊新品芯片的開發(fā)前期必須要有一個設(shè)計總體規(guī)劃,其中最主要的問題就是,這顆芯片是否能帶來收益,畢竟公司要靠產(chǎn)品吃飯。如何評估芯片能否帶來收益?這需要多年的經(jīng)驗才能進(jìn)行準(zhǔn)確的評估。一般是看市場上哪幾款芯片銷量好,未來幾年的銷量看漲,并且評估本公司是否有能力設(shè)計并且有渠道銷售出去。我所知道的要考慮的芯片成本有以下幾項:
1,芯片拍片成本;
2,芯片從立項到交貨的時間成本,時間過程導(dǎo)致芯片即使設(shè)計出來了,市場已經(jīng)不需要了;
3,流片成本;
4,工具軟件的授權(quán)使用成本;
5,測試成本,包括CP測試和成品測試以及搭建測試平臺所需要的其它成本;
6,封裝成本。
這幾項考慮個人認(rèn)為還不太成熟,但對于我來說,暫時夠用了。將這些成本進(jìn)行適當(dāng)預(yù)估之后,再來看收益。對于收益這塊,這是和市場的需求和銷量走向有關(guān),需要涉及到許多其他方面的考慮,個人對這塊不熟悉,也就不予以評論。在收益問題解決了之后,明確此項目可以獲得收益,那么就可以正式開工,前面說的一堆東西其實就是項目可行性分析的一部分。但,其實有些公司并不會考慮那么多,因為這些可行性分析本身非常困難。反向哪一家的芯片?選擇大公司的芯片進(jìn)行反向一般來說成功率會更高。選定芯片后就進(jìn)行拍片了,芯片進(jìn)行解剖拍片一般周期在1周到1個月之間,這視芯片的大小而定。
二、工藝選擇
這個要依據(jù)拍片回來的芯片版圖來決定,通過對芯片版圖的識別,判斷待反向的芯片版圖使用的工藝是什么,再根據(jù)公司自己擁有的工藝文件(這些工藝文件都由國內(nèi)或者國外的芯片制造廠提供,前提是公司得與它們合作才能得到工藝文件),兩者進(jìn)行比對,選擇一個適合的工藝進(jìn)行后續(xù)的仿真、版圖繪制和流片。工藝選擇的問題,需要對公司所擁有的工藝非常熟悉,并且對版圖也要熟悉的工程師來解決,他要能夠通過版圖明確的識別所用的工藝。當(dāng)然,工藝有時候會在設(shè)計過程中反復(fù)的更換,因為會有許多參數(shù)、流片成功率等各種復(fù)雜因素的考量。這一步其實也就叫工藝可行性分析,其實也應(yīng)該歸于項目可行性分析的一部分,但是由于必須要拍片才能進(jìn)行,所以只能單獨說明。
三、版圖提取
在上一步工藝可行性分析完之后,確認(rèn)有工藝可以和該版圖匹配,那么就可以進(jìn)行版圖提取工作。這部分的工作其實主要是識別版圖中的管子并用符號表示出來。所用到工具有
A、NetEditorLite或者ChipAnalyzer,這是版圖提取工具,在不同的公司進(jìn)行芯片拍片,會用到不同的版圖提取工具。該類軟件的作用就是一個圖片查看器,拍攝的版圖就是數(shù)據(jù)就是照片。
B、cadence IC5141 里的virtuoso schematic軟件,這是電路圖繪制軟件。整個工作的流程是用NetEditorLite或者ChipAnalyzer打開拍片的芯片版圖數(shù)據(jù),人工肉眼識別里面的管子(二極管、三極管、MOS管之類),再使用virtuoso schematic將管子用符號表示出來,并把管子之間的連接關(guān)系連接上。
版圖提取所要注意的問題:
1,初次進(jìn)行版圖提圖,可能會不認(rèn)識管子,需要有經(jīng)驗的人來幫助識別,熟悉之后就容易了;
2,不同工藝的版圖管子的形狀是不一樣的,所以碰到不認(rèn)識的管子,要么靠別人幫忙,要么就只能自己去推理;
3,要有良好的管子命名習(xí)慣,這個每個公司都應(yīng)該有規(guī)定的,這對于后續(xù)的工作會有很大幫助;
4,盡量按照版圖的布局來放置管子的布局(在virtuoso schematic上的電路圖布局),這樣可以加快以后對比電路圖和版圖時找管子的速度;
5,在整理提取出的電路時一定要新建一個電路圖來放置整理的電路,不要在剛提取的電路圖上整理,方便整理時和版圖數(shù)據(jù)對比。ps:有些芯片拍片公司也有提供版圖提取與整理的服務(wù)。
四、電路整理
在版圖提取完畢之后,下一個步驟就是電路整理。提取完的電路圖是混亂的,沒有層次關(guān)系。那么如何將其整理成具有層次關(guān)系,讓人一看就懂呢?
1、這就涉及到有關(guān)芯片的一些常識了。芯片分為數(shù)字芯片和模擬芯片,但是數(shù)字芯片必定會包含模擬電路,而模擬芯片卻可以不包含數(shù)字電路。它們有如下一般特征:
A、數(shù)字芯片,必有時鐘振蕩電路、復(fù)位電路這些模擬電路。必有寄存器,而且整個數(shù)字部分最耗面積的部分往往都是寄存器。寄存器的使用量是很大的,因此,在版圖上呈現(xiàn)的就是有大數(shù)量的圖像一模一樣的電路,這種電路往往都是寄存器。
B、模擬芯片,有帶隙基準(zhǔn)電路,有放大器,個人對模擬芯片不是很熟,所以略過。
2、說完了芯片版圖常識,另外一個重要的有助于理解所提取的電路的工具就是待反向的芯片的數(shù)據(jù)手冊!這是最重要的,我們所有有關(guān)于芯片的信息都是從數(shù)據(jù)手冊上得來的。所以一定要善用DATASHEET!在芯片數(shù)據(jù)手冊上,一般會對芯片的功能進(jìn)行說明,對芯片如何運行進(jìn)行說明,這些說明將有助于我們對于電路的整理。
比如說,芯片手冊上說道用了I2C,那么電路中肯定有一大塊電路是屬于I2C的。一般來說,版圖的布局都是將同屬于一種功能的管子會集中放置在一起。I2C電路的特征,從I2C協(xié)議的原理上可以知道,它就兩根信號線,一根時鐘,另一根數(shù)據(jù)線。數(shù)據(jù)在芯片內(nèi)部一般是并行傳輸比較方便,所以,I2C電路一定會有串并轉(zhuǎn)換電路,而串并轉(zhuǎn)換電路一般是寄存器,而且一般是8位。根據(jù)這個推斷結(jié)果,就在提取的電路中去尋找8個在一起的寄存器,它們其中一組就是I2C電路的一部分,再根據(jù)芯片版圖的I2C PAD位去尋找,看連接到了那一組寄存器上,那么整個I2C的電路就被識別出來了。因此,
a、靠著芯片手冊對芯片功能的說明,
b、加上芯片的一些常識性知識,
c、加個人的這種對電路原理的推理,就可以相對較快的將電路分層次的整理出來。
逐步的理解整個芯片的原理。當(dāng)然,由于芯片電路的龐大的關(guān)系,有時候電路并不是需要完全理清楚,對于不那么重要的電路可以不理會。只要保證連接關(guān)系沒連接錯就行。這階段,只會用到cadence ic5141的virtuoso schematic軟件。
五、 電路仿真及修改
電路整理好了,下一步就是進(jìn)行電路的仿真及修改了,根據(jù)工藝選擇步驟選擇的工藝來進(jìn)行。先說明一下這階段所使用的工具:
1、cadence spectre,一般集成在cadence ic5141里面,是模擬電路仿真工具(ps:最原始的版本是集成在IC5141內(nèi)部,但功能不全,所以需要單獨安裝新版本,軟件名為MMSIM61,隨著版本的升級,它的名字也在修改),當(dāng)然,數(shù)字電路也可以進(jìn)行仿真,數(shù)字電路的本質(zhì)還是模擬電路;
2、synopsys公司的 Hspice是與spectre一樣的仿真工具,另有些差別。
3、Mentor公司的 Modelsim,主要在windows上使用,用于verilog網(wǎng)表的仿真。
模擬電路仿真工作流程:在cadence中搭建好仿真環(huán)境,設(shè)置好仿真參數(shù),選用spectre或者h(yuǎn)spice,然后就可以進(jìn)行仿真的。另外,也可以將電路導(dǎo)出成CDL網(wǎng)表,拷貝到Windows上,用Windows版本的Hspice進(jìn)行仿真,這樣做的優(yōu)點是Windows易于操作。另外說明一下spectre和hspice的一項區(qū)別。spectre仿真的時候會保存所有電路節(jié)點的數(shù)據(jù),這樣做優(yōu)點是方便查看各個節(jié)點的數(shù)據(jù),缺點是仿真消耗的時間太長,保存的數(shù)據(jù)文件太大,這一點在遇到大型電路的時候會很耗時(不知道最新版本改進(jìn)這一點沒有,鄙人沒有用過最新版的spectre)。hspice仿真之前可以自己選定所要查看的節(jié)點,這樣做就可以減少仿真時間和減小數(shù)據(jù)文件的大小。有關(guān)于spectre和hspice的詳細(xì)仿真過程就不細(xì)說了,或許還沒有別人講得好,附百度文庫鏈接:http://wenku.baidu.com/view/1be650669b6648d7c1c7463d.html。
http://wenku.baidu.com/link?url=tel2SndqC_mtKmZp_SXLDWLfQOE8Zm8Ci4UGhTs8numC3xoKM5frNMV7T2n9Z0k3_l_mHdt5T4zCSFls2bUt9K1xHjiMIek7VK7oV0mIt_q
數(shù)字電路仿真工作流程:在virtuoso schematic中將整理好的電路路中數(shù)字電路部分導(dǎo)出成網(wǎng)表文件,再拷貝到windows系統(tǒng)上進(jìn)行仿真。windows系統(tǒng)上數(shù)字電路網(wǎng)表的仿真采用Modelsim。(這么做的原因是linux系統(tǒng)不太方便)使用Modelsim仿真,最重要的是寫好testbench(貌似這句是廢話)。詳細(xì)仿真過程就不舉例說明了,附上百度文庫鏈接:
http://wenku.baidu.com/link?url=Un2xqDYXRGy0126I5czuolgcLCYHMFgZndGB***HMG-NMfyMW-TNTtBMmv8BPJ84v5REo81rgf0ymJ82l3QnfyJopHsjn1TnpfmvxLgEslm3
關(guān)于電路的修改,這部分其實不好總結(jié),因為每一款芯片都有不同的參數(shù),所要修改的地方都不太一樣,我所知道的是,必定要考慮修改的地方往往都是有關(guān)模擬電路的,例如,時鐘振蕩、復(fù)位電路、開漏輸出管、帶隙等,修改的目的是為了與當(dāng)前所選用的工藝適配,以滿足芯片datasheet的參數(shù)要求。另外,數(shù)字部分的電路其實一般來說是不需要修改的,但有時為了節(jié)省版圖面積,會縮小寄存器管子的尺寸,畢竟縮小一個,就等于縮小了幾十個。這一階段其實是一個不斷的迭代過程,它要和版圖繪制結(jié)合起來,這樣才能夠保證芯片功能和性能的完整。
六、版圖繪制
這部分在電路整理完之后就可以開始進(jìn)行了,并配合電路仿真與修改,逐步完善版圖的繪制。該階段所使用的主要工具有
1、cadence ic5141的版圖繪制軟件;
2、cadence Dracula Diva或者Calibre,這兩個用于版圖DRC(設(shè)計規(guī)則檢查)、LVS(版圖一致性檢查);一般而言,calibre會更加常用一些,畢竟這可是Mentor公司的招牌軟件之一。在版圖繪制好并進(jìn)行各種檢查無誤之后,就可以tapeout,準(zhǔn)備流片了。
七、測試規(guī)范
IC設(shè)計師在芯片tapeout之后就要準(zhǔn)備制定CP測試規(guī)范了,這是接下來CP測試流程的總綱,非常重要。測試規(guī)范的測試項主要來源于芯片datasheet,將重要的參數(shù)設(shè)置為測試項,并規(guī)定參數(shù)的合理分布范圍以及每一個測試項的測試方法(流程)。這些測試參數(shù)以及測試方法將決定CP測試開發(fā)時所用到的測試環(huán)境ATE(auto test environment)。
八、CP測試開發(fā)
根據(jù)測試規(guī)范,可以選定所需要的測試工具以進(jìn)行整個測試環(huán)境的搭建工作。我所知道到用于芯片測試的測試儀有JUNO DTS-1000,ASL1000,V777,STS8200等。每一種測試儀適用于不同種類的芯片測試,測試儀主要分為數(shù)字測試,模擬測試,數(shù)模混合測試這三大類。CP測試開發(fā)所需要做的工作有:
1,測試儀的選擇(ps:這個階段還要考慮一個重要的因素就是一次測試多少顆裸芯,也就是CP測試常說的多少個site,這關(guān)系到后續(xù)測試程序的編寫,以及DUT板的制作,非常重要);
2,根據(jù)測試儀開發(fā)測試程序;
3,制作測試裸芯片用DUT板,扎PAD位的針由測試廠制作并焊接在DUT上(ps:DUT板有時候也叫針卡);
4,自制測試儀(可選),當(dāng)測試儀并不能完成某些特殊測試項的要求時,還得自己制作測試儀。例如,紅外接收芯片測試所需要用到的掃頻儀,若采用非自制掃頻儀,測試時間將非常長,必須自己制作。5,測試數(shù)據(jù)的分析。對測試數(shù)據(jù)的分析有助于對測試方法的改進(jìn)和對芯片設(shè)計的改進(jìn)。CP測試在整個芯片反向設(shè)計中占據(jù)著重要位置,所花費的人力、物力是非常多的,還需要頻繁和測試廠交流,所以CP測試顯得非常復(fù)雜。在CP測試開發(fā)完之后,會進(jìn)行COB測試,之后才進(jìn)行CP測試的調(diào)試階段,以及正式批量測試階段。
九、COB測試
所謂COB測試,其實就是Chip On Board(將裸芯打線在PCB板上或者將封裝好的芯片焊接在PCB上,并將引腳引出),它是在CP測試進(jìn)行之前進(jìn)行的一項測試(也在成品測試之后進(jìn)行),用于初步判斷芯片的功能和性能,如果這批次隨機采樣的幾顆芯片功能和性能都很爛就暫時不必進(jìn)行CP測試了。另外,COB測試相比于CP測試具有更多的靈活性,可以測試更多的測試項,獲取有關(guān)芯片更為全面的信息。當(dāng)然,COB測試也是需要開發(fā)一套相應(yīng)的測試環(huán)境的。開發(fā)的工作根據(jù)芯片的不同,工作量會有很大的不同,例如,如果有I2C通信引腳的芯片,需要用到USB轉(zhuǎn)I2C芯片,例如FT232。通過在電腦上編程,通過控制USB轉(zhuǎn)I2C芯片來控制待測芯片。這樣的話,搭建整個測試環(huán)境就會比較復(fù)雜。如果是模擬芯片,例如電源管理類芯片,需要使用LabView編程來控制數(shù)字源表進(jìn)行自動化參數(shù)測量。總之,COB測試也是芯片設(shè)計中一個比較重要的流程, 這部分的工作內(nèi)容,比較難以敘述,簡單的,就用數(shù)字源表測試幾項參數(shù)就行了,復(fù)雜的都會基于軟件控制的形式進(jìn)行半自動的測試。具體說來,
1、開發(fā)在PC端開發(fā)測試的程序,例如LabView;
2、設(shè)計測試芯片的電路板,并留下與PC通信的接口,通常采用單片機做主控芯片;
3、搭建測試所需要的環(huán)境,比如說遮光要求。過程敘述得很簡單,但實際開發(fā)并不容易,難度視待測芯片而異。
十、成測開發(fā)
在CP測試完了之后,裸芯就可以送到成測廠進(jìn)行劃片和封裝了,在這期間,IC設(shè)計師所要做的工作就是依據(jù)制定成品測試的規(guī)范并進(jìn)行成品測試的開發(fā)。這部分的工作其實和CP測試的工作是類似的,只不過,相對于CP測試而言,成品測試的測試項會少很多。許多CP測試用到的測試項,比如,燒調(diào)之類的,成品測試就不會進(jìn)行了,其余步驟均與CP測試一致。
十一、可靠性測試
當(dāng)芯片封裝好,并通過了成品測試之后,并不意味著芯片的測試就結(jié)束了,還有芯片可靠性測試。在成測結(jié)束,并把樣品返回設(shè)計師手中之后,設(shè)計師還需進(jìn)行COB測試,并在這時預(yù)留幾顆芯片不參與接下來的可靠性測試,這幾顆芯片將在可靠性測試之后作為對比之用。
芯片可靠性測試,是衡量芯片的質(zhì)量和壽命的一項測試。它具體包括環(huán)境測試、EMC測試、其它測試等三大項。細(xì)分項有高溫低溫測試、高溫高濕測試,抗靜電測試等等,全部的測試項可參考IC可靠性測試項目。每一款芯片都有與其對應(yīng)的可靠性測試項,并不是所有測試項目都要測。我們只要關(guān)注與該芯片適配的測試項就行。具體如何決定測試項,這需要與芯片的用途有關(guān),每一種用途,它的測試要求都是不一樣的。可靠性測試實驗比較簡單,但是,芯片的可靠性卻是由此來衡量的。可靠性測試需要的測試工具都比較昂貴,當(dāng)然工具的重復(fù)使用性也是比較好的。每一個測試項都對應(yīng)這一套測試設(shè)備。
十二、成品開發(fā)
設(shè)計出的芯片必須配置相應(yīng)的使用方案,才能將芯片推廣出去,客戶才能夠更好的使用芯片。不同用途的芯片,它的使用方案不一樣,差別也是非常巨大的。像單片機、ARM、FPGA類芯片,配置的可不是簡單的使用方案,而是一整套使用它的系統(tǒng)。電源管理芯片,需要配置一個電源管理芯片的一套應(yīng)用方案,并且需要具有一定的競爭力,這才能夠?qū)⑿酒u出去。所以成品開發(fā)是芯片能否賣出去的關(guān)鍵。我所接觸到的成品開發(fā),基本是以單片機為主控芯片的開發(fā)方案。具體開發(fā)過程將在后續(xù)有更為詳細(xì)的說明。
芯片設(shè)計流程(四)——正向設(shè)計
正向設(shè)計其實和反向設(shè)計差別在于設(shè)計部分,其余部分的流程基本相同。正向設(shè)計的設(shè)計部分由于是原創(chuàng),所以會使用很多的工具。反向設(shè)計,很多東西不必去驗證,所以工具軟件也就不會用到那么多。
一、總體規(guī)劃
隨著集成電路設(shè)計規(guī)模的不斷擴大,出現(xiàn)了很多成熟的常用設(shè)計模塊,也被成為IP核,現(xiàn)在芯片正向設(shè)計,不再是完全從0開始,都是基于某些成熟的IP核,并在此基礎(chǔ)之上進(jìn)行芯片功能的添加。真正從0開始設(shè)計的芯片,不是沒有,而是成本太高,企業(yè)無法承擔(dān),而且也并沒有必要從0開始設(shè)計。例如現(xiàn)在的ARM芯片開發(fā),那些大公司基本上是獲取ARM公司的授權(quán),得到ARM芯片的IP核,并根據(jù)細(xì)分市場的需求進(jìn)行有針對性的開發(fā)。這是數(shù)字芯片的情況,模擬芯片的情況也是類似的,當(dāng)然我們并不能小看別人的原創(chuàng)能力,以為就是隨隨便便在別人的基礎(chǔ)上小修小補就可以設(shè)計出令人滿意的芯片,還有很多東西依然是需要豐富的經(jīng)驗和知識的。芯片正向設(shè)計依然是從市場未來需求著手,從開發(fā)成本和預(yù)期收益來衡量是否進(jìn)行芯片的開發(fā)的。明確市場未來需求之后,就將這些需求轉(zhuǎn)化為芯片的各項重要參數(shù)指標(biāo),然后進(jìn)行任務(wù)劃分,模擬設(shè)計師負(fù)責(zé)模擬,數(shù)字設(shè)計師負(fù)責(zé)數(shù)字。個人對于模擬部分不太熟,所以就略過。重點總結(jié)數(shù)字設(shè)計部分,當(dāng)然這部分也不是很熟,因為沒有真正做過。
二、架構(gòu)/算法
現(xiàn)在數(shù)字電路在芯片中占有極大的比重,數(shù)字邏輯也變得越來越復(fù)雜,所以必須從架構(gòu)和算法上進(jìn)行考慮。個人所略知的關(guān)于芯片架構(gòu)的是,架構(gòu)可以分為三種大的方向:
1,數(shù)據(jù)流;
2,控制流,
3,總線流。數(shù)據(jù)流:數(shù)據(jù)從輸入到輸出是一條直線,并沒有折回的數(shù)據(jù),這是純數(shù)據(jù)處理的一種架構(gòu),這種芯片功能應(yīng)該是比較單一。
2,控制流,這是基于狀態(tài)機或者CPU形式的一種架構(gòu)設(shè)計。簡單點的芯片就采用狀態(tài)機就夠了,復(fù)雜的就必須采用CPU作為控制內(nèi)核了,比如單片機就是以CPU為控制內(nèi)核,外加RAM,ROM所形成的一類控制類芯片。
3,總線流,這是基于總線的芯片設(shè)計架構(gòu),最熟悉的就是SOC類芯片,總線上連接著一個或多個CPU,RAM,ROM,I2C,UART等等之類的各種組件。由這些組件的不同排列組合,形成滿足各種不同需求的芯片,例如不同的ARM類芯片。
算法,我所略知的是通信類的,例如,F(xiàn)IR,FFT,小波變換,三角函數(shù)變換等等,當(dāng)然還有視頻音頻類的算法,對與這方面的內(nèi)容就沒有接觸過了。總的來說,這類算法都是以數(shù)據(jù)處理為主要目的的,所以這些算法都要求有較強的數(shù)學(xué)功底。做算法開發(fā),主要工具為MATLAB,都是先在MATLAB上做原型開發(fā)驗證,再轉(zhuǎn)化為RTL級的代碼。
結(jié)合架構(gòu)和算法,將芯片的總體結(jié)構(gòu)搭建出來,為后續(xù)的工作做好了準(zhǔn)備。
三、RTL代碼
當(dāng)算法工程師把芯片架構(gòu)設(shè)計好,各種算法在MATLAB上通過了驗證,以及其他必要條件的考量之后,便將工作交接給ASIC工程師去做RTL代碼的翻譯工作,就是將MATLAB上的算法翻譯成RTL。這一步單純從翻譯的角度只需要一個文本編輯器就可以了。然而,還有后續(xù)的仿真驗證工作,這部分的內(nèi)容并不輕松。有時候根據(jù)公司的不同,根據(jù)項目的工作量大小,算法工程師與ASIC工程師在工作內(nèi)容上是有交叉的,他們也承擔(dān)將MATLAB轉(zhuǎn)換為RTL的工作。RTL設(shè)計的時候也會考慮DFT(Design For Test 可測性設(shè)計)的問題,會在RTL代碼中加入測試鏈,這個我就不太熟了。
四、仿真驗證
這一步的工作比較關(guān)鍵,可以說是設(shè)計部分的第一個分水嶺。仿真驗證,視不同的公司,不同的項目,復(fù)雜度有非常大的不同。簡單的,只要寫一個較為完善的testbench驗證完RTL代碼的功能就行了;復(fù)雜的,將會在RTL驗證環(huán)境下進(jìn)行詳細(xì)的驗證,甚至可能用得到各種驗證方法學(xué)UVM,VMM,OVM等等,這種復(fù)雜驗證所用的語言一般采用SystemVerilog。驗證軟件可以采用cadence公司的NC_VERILOG,或者synopsys公司的VCS。此外,某些芯片還會采用FPGA,進(jìn)行硬件在線仿真。這樣能夠獲取關(guān)于芯片的更為詳細(xì)的信息。但不管如何,無論是個人還是公司,都應(yīng)該有對于仿真驗證工作的一套完整和完善的流程方案。
五、工藝選擇
正向設(shè)計在一開始的整體規(guī)劃中就要考慮工藝的問題,這涉及到有關(guān)工藝的相關(guān)知識,有些工藝就是特別為某種類型的芯片而開發(fā)的。所以一旦是要開發(fā)某種有對應(yīng)工藝的芯片,則直接采用即可,但往往工藝的選擇會特別耗時間,會有各種參數(shù)的考量,例如工藝生產(chǎn)周期,工藝的成品率,工藝生產(chǎn)時間的安排等等各方面的考究。這部分,需要花費特別多的時間。工藝由芯片制造廠提供,前提是必須和芯片制造廠有合作關(guān)系。
六、綜合、時序&功耗分析
這一步是在RTL仿真驗證完之后進(jìn)行,當(dāng)然還有一個前提,制造工藝必須選定,否則,如果中途換了工藝,這部分的工作還得重新來做,這樣將會消耗特別多的時間。這部分的工作主要用到synopsys公司的工具Design Complier(綜合)、Prime Time(時序和功耗)。這兩個工具的使用比較復(fù)雜,使用說明參考百度文庫相關(guān)資料。總體來說,這兩個工具都是約束驅(qū)動型軟件,軟件在使用時都是靠約束文件來進(jìn)行驅(qū)動的。所以工作的主要內(nèi)容除了軟件的使用外最重要的就在于如何編寫約束文件。一般而言,約束主要有面積約束,扇入扇出約束,時序約束等約束條件。如果RTL代碼不滿足約束,則必須根據(jù)具體情況修改約束條件或者是修改RTL代碼。約束條件是用TCL腳本語言來寫。綜合和時序分析會生成基于所采用的工藝的電路網(wǎng)表,這個網(wǎng)表將是下一步自動布局布線所用到的主文件。
主要工作內(nèi)容:
1、準(zhǔn)備好選定的工藝庫文件(綜合網(wǎng)表文件、時序文件庫);
2、根據(jù)設(shè)計要求編寫TCL約束腳本;
3,操作軟件,生成約束報告;
4,分析約束報告,修改或調(diào)整不合理的約束或者修改RTL代碼(RTL代碼不會輕易修改,這要求在RTL設(shè)計時就要考慮這些約束要求,以便于能夠通過約束分析)。
七、 形式驗證
綜合出來的網(wǎng)表正確與否如何判定呢?這需要用到形式驗證技術(shù),該技術(shù)與RTL的仿真不同,它是從數(shù)理邏輯出發(fā),來對比兩個網(wǎng)表在邏輯上的等效性。如果等效,則綜合的網(wǎng)表就是符合要求的。用到的工具為synopsys 公司的Formality 形式驗證工具。其實,形式驗證是在每一次芯片的邏輯電路轉(zhuǎn)換為另一種表達(dá)形式的時候都需要做的工作。具體來說,在綜合生成網(wǎng)表后做一次,主要對比的文件為RTL仿真之后的文件和綜合之后的網(wǎng)表,在布局布線之后還需要做一次,主要對比文件為綜合之后的網(wǎng)表與布局布線之后的網(wǎng)表。主要工作內(nèi)容:
1、準(zhǔn)備好待比較的兩份文件及各種工藝技術(shù)庫文件;
2、用TCL腳本編寫腳本程序,設(shè)置其中一份文件為比較標(biāo)準(zhǔn),其中一份為待比較文件;
3、運行Formality,分析生成的比較報告;
八、自動布局布線
這個步驟嚴(yán)重依賴于軟件和經(jīng)驗,目前常用的軟件為Cadence Encounter不同版本的自動布局布線軟件名字可能不一樣。Synopsys公司也有對應(yīng)的自動布局布線的軟件ASTRO,最新版本為ICC套件。軟件的使用同樣可以在網(wǎng)上找到相關(guān)資料,這里就不細(xì)說了。主要工作內(nèi)容:
1、準(zhǔn)備好工藝文件(時序文件庫 數(shù)字版圖庫);
2,準(zhǔn)備好綜合之后的電路網(wǎng)表文件及約束文件;
3,根據(jù)設(shè)計要求,設(shè)置好版圖面積等相關(guān)參數(shù),
4,進(jìn)行自動布局布線,檢查時序和功耗,如果不滿足要求,則再次修改相關(guān)參數(shù),直到符合設(shè)計要求為止。
自動布局布線需要注意的是:數(shù)字信號一定要關(guān)注好關(guān)鍵路徑的延時問題,這一點曾經(jīng)是數(shù)字設(shè)計的關(guān)鍵問題。現(xiàn)在,據(jù)說,時序已經(jīng)不再是芯片設(shè)計的主要難題了,主要難題已經(jīng)轉(zhuǎn)移到了功耗上,在設(shè)計的每一個階段都要考慮功耗的問題。
模擬部分似乎是沒有數(shù)字部分那么多的工具需要使用,但模擬部分的電路設(shè)計最考究的還是工程師們的設(shè)計經(jīng)驗,而這些經(jīng)驗都是要靠時間才能堆出來的。模擬電路的每一個模塊都需要很多的時間去驗證,比說一個高性能的放大器,一個與工藝和電壓無關(guān)的帶隙基準(zhǔn)等等。模擬的版圖只能是一個一個管子的畫,沒有自動布局布線的必要,因為模擬電路的管子也不會很多。
剩下的工作就是合并整體的版圖,并進(jìn)行DRC、LVS的各種驗證,通過之后就可以tapeout。之后再制定測試規(guī)范,這與反向設(shè)計的剩余步驟是一樣的。另外,有時候版圖還需要做ECO(Engineering Change Order)工程修改命令,是指在原有的設(shè)計 的基礎(chǔ)上如果要作一些改動,可不必從頭再來,可以在原來的布局上通過eco步驟快捷地 完成設(shè)計。
芯片設(shè)計流程(五)——工藝文件說明
在芯片的設(shè)計重要設(shè)計環(huán)節(jié),像綜合與時序分析,版圖繪制等都需要用到工藝庫文件,而大家往往又對工藝文件缺乏認(rèn)識,所以導(dǎo)致想自學(xué)一些芯片設(shè)計的東西就顯得很困難。例如,沒有工藝版圖庫文件,學(xué)習(xí)版圖設(shè)計就是紙上談兵。這篇文章主要介紹一下工藝庫相關(guān)的知識。
工藝文件由芯片制造廠提供,所以概括性的了解國內(nèi)和國際上有哪些芯片制造廠是很有必要的。國際上,主要有臺積電,英特爾,三星等主要半導(dǎo)體制造商。國內(nèi),主要有中芯國際,華潤上華,深圳方正等公司。這些公司都提供相關(guān)的工藝庫文件,但前提是要與這些公司進(jìn)行合作才能獲取,這些工藝文件都屬于機密性文件。
完整工藝庫文件主要組成為:
1,模擬仿真工藝庫,主要以支持spectre和hspice這兩個軟件為主,后綴名為scs——spectre使用,lib——hspice使用。
2,模擬版圖庫文件,主要是給cadence版圖繪制軟件用,后綴名為tf,drf。
3,數(shù)字綜合庫,主要包含時序庫,基礎(chǔ)網(wǎng)表組件等相關(guān)綜合及時序分析所需要用到的庫文件。主要是用于DC軟件綜合,PT軟件時序分析用。
4,數(shù)字版圖庫,主要是給cadence encounter軟件用于自動布局布線,當(dāng)然自動布局布線工具也會用到時序庫,綜合約束文件等。
5,版圖驗證庫,主要有DRC,LVS檢查。有的是專門支持calibre,有的專門支持dracula,diva等版圖檢查工具用。每一種庫文件都有相應(yīng)的pdf說明文檔。
反向設(shè)計會用到1,2,5等工藝庫文件,3和4是不會用到了。正向設(shè)計(從代碼開始設(shè)計的正向設(shè)計)則所有的文件都需要用到。由于工藝文件在芯片設(shè)計中占有極重要的位置,在每一個關(guān)鍵設(shè)計環(huán)節(jié)都要用到,再加上它的機密屬性,所以網(wǎng)絡(luò)上很難找到完整的工藝文件對于個人學(xué)習(xí)用,EETOP上有一份cadence公開的用于個人學(xué)習(xí)的工藝庫文件可以方便大家學(xué)習(xí),但似乎也是不完整的。
芯片設(shè)計流程 (六)——綜合
本文是根據(jù)《綜合與Design Compiler》文章,寫就的一篇關(guān)于綜合的簡要總結(jié),供自己整理思路之用。算是對前文《芯片設(shè)計流程(八)——正向設(shè)計2》中的綜合分析做一個進(jìn)一步的展開說明。
什么是綜合?綜合就是將RTL級verilog代碼用Design Compiler 工具 轉(zhuǎn)換/映射成用基礎(chǔ)門級單元表示的電路的過程。基礎(chǔ)門級單元也就是平時我們學(xué)的與非門,或非門,寄存器之類的,只不過,這些門級單元已經(jīng)做成了標(biāo)準(zhǔn)的單元庫,我們可以直接使用軟件來調(diào)用,而不需要自己調(diào)用門級單元來搭建電路。簡單的來說,Design Compiler軟件就是做翻譯的工作——將代碼翻譯成實際電路,但又不僅僅是翻譯這么簡單,它涉及到電路的優(yōu)化與時序約束,使之符合我們做制定的性能要求。 前文提到該軟件是約束驅(qū)動型軟件,那么約束從何而來?答案是,設(shè)計規(guī)格書。每一個芯片設(shè)計項目都會有一個項目規(guī)格說明書,這是在芯片設(shè)計之初,整體規(guī)劃(見前文)的步驟中要制定好的。具體詳細(xì)的約束要求需要在綜合過程中仔細(xì)的斟酌決定。 綜合的一般流程:
1,預(yù)綜合過程;
2,施加設(shè)計約束過程;
3,設(shè)計綜合過程;
4,后綜合過程。
PS,使用Design Compiler軟件一個必備的條件是要學(xué)會使用DC TCL腳本。
預(yù)綜合過程。這部分主要是準(zhǔn)備好綜合過程所使用的庫文件(包括工藝庫、鏈接庫、符號庫、綜合庫)、設(shè)計輸入文件,設(shè)置好環(huán)境參數(shù)。
施加設(shè)計約束過程。這部分主要是用DC TCL腳本編寫約束文件。具體的約束項目可以分為三大類:
a,面積約束,定義時鐘,約束輸入/輸出路徑;
b(環(huán)境屬性),約束輸入驅(qū)動,約束輸出負(fù)載,設(shè)置工作條件(最好、典型、最差情況),設(shè)置連線負(fù)載模型;
c(高級時鐘約束),對時鐘的抖動、偏移、時鐘源延遲,同步多時鐘,異步時鐘,多周期路徑,這幾類進(jìn)行細(xì)致的約束。
約束的內(nèi)容具體就是這么多。一個詳細(xì)的TCL腳本約束文件基本包含上述所有的約束。后面有一個約束范文。
設(shè)計綜合過程。主要是介紹電路模塊設(shè)計規(guī)劃(以利于更好的進(jìn)行約束),Design Compiler綜合優(yōu)化的過程(三大優(yōu)化階段,結(jié)構(gòu)級,邏輯級,門級),時序分析的具體過程等綜合過程中的一些詳細(xì)信息。
后綜合過程。綜合完畢該怎么看結(jié)果,時序違反該如何解決?這就是后綜合過程所要解決的問題。在綜合之后,通過分析綜合報告,可以得知此次的電路綜合結(jié)果如何,根據(jù)不符合的要求,進(jìn)行重新約束,甚至重新設(shè)計電路。在這個階段特別值得一提的是綜合預(yù)估,因為在寫綜合約束腳本的時候,需要確定約束條件,規(guī)格書一般不能夠涉及到如此細(xì)節(jié)的部分,所以需要根據(jù)實際電路進(jìn)行綜合預(yù)估,這個步驟是在代碼編寫完之后,與驗證同時進(jìn)行的,目的在于大致估計電路是否符合要求,此時的預(yù)綜合過程與正式的綜合過成是一樣的,但,要求會寬松許多,時序違反的要求大概為10%-15%,也就是說電路即使有10%-15%的電路不滿足時序也沒有關(guān)系。
綜合約束過程是一個反復(fù)迭代的過程,需要多次設(shè)計預(yù)估,這樣才能不斷修正時序違反。范文:
# Set the current_design #
read_verilog {counter_pad.v counter.v} //讀取設(shè)計文件
current_design Cnt10_PAD
link
set_operating_conditions -max slow -max_library slow -min fast -min_library fast //設(shè)置工作條件
set_wire_load_mode enclosed //設(shè)置連線負(fù)載模型
set_wire_load_model -name tsmc18_wl10 -library slow //設(shè)置連線負(fù)載模型
set_local_link_library {slow.db fast.db}//設(shè)置鏈接庫
set_max_area 0 //設(shè)置面積
set_max_fanout 5 [get_ports reset_n]//設(shè)置最大扇出
set_max_fanout 4 [get_ports clk] //設(shè)置最大扇出
set_max_fanout 4 [get_ports in_ena]//設(shè)置最大扇出
set_max_transition 0.3 [get_ports reset_n]//設(shè)置信號翻轉(zhuǎn)時間
set_max_transition 0.3 [get_ports clk]//設(shè)置信號翻轉(zhuǎn)時間
set_max_transition 0.5 [get_ports in_ena]//設(shè)置信號翻轉(zhuǎn)時間
create_clock [get_ports clk]-period 10 -waveform. {0 5}//創(chuàng)建時鐘
set_clock_latency 1[get_clocks clk]//設(shè)置時鐘源延時
set_clock_latency -source 1[get_clocks clk]
set_clock_uncertainty -setup 0.5[get_clocks clk]//設(shè)置時鐘不確定度
set_clock_uncertainty -hold 0.4[get_clocks clk]
set_dont_touch_network [get_clocks clk]//設(shè)置偽路徑,不要約束
set_clock_transition -fall 0.3 [get_clocks clk]////設(shè)置下降沿信號翻轉(zhuǎn)時間
set_clock_transition -rise 0.3 [get_clocks clk]///設(shè)置上升沿沿信號翻轉(zhuǎn)時間
set_input_delay -clock clk-max 3[get_ports in_ena]//設(shè)置輸入延時
set_output_delay -clock clk -max 4 [get_ports cnt]//設(shè)置輸出延時
set_output_delay -clock clk -min 0.5 [get_ports cnt]
set_output_delay -clock clk-max 4[get_ports carry_ena]
set_output_delay -clock clk-min 0.5[get_ports carry_ena]
compile//編譯
report_timing -delay max > ./reports/pad_setup_rt.rpt//報告最大時序延時
report_timing -delay min > ./reports/pad_hold_rt.rpt//報告最小時序延時
report_constraint -verbose > ./reports/pad_rc.rpt
report_qor > ./reports/pad_rq.rpt
remove_unconnected_ports -blast_buses [get_cells -hierarchical *]
set bus_inference_style. {%s[%d]}
set bus_naming_style. {%s[%d]}
set hdlout_internal_busses true
change_names -hierarchy -rule verilog
define_name_rules name_rule -allowed {a-z A-Z 0-9 _} -max_length 255 -type cell
define_name_rules name_rule -allowed {a-z A-Z 0-9 _[]} -max_length 255 -type net
define_name_rules name_rule -map {{"\\*cell\\*" "cell"}}
define_name_rules name_rule -case_insensitive
change_names -hierarchy -rules name_rule
write -format verilog -hier -o ./outputs/pad_counter.sv
write -format ddc -hier -o ./outputs/pad_counter.ddc
write_sdc ./outputs/pad_counter.sdc
write_sdf ./outputs/pad_counter.sdf
-
IC
+關(guān)注
關(guān)注
36文章
5944瀏覽量
175477 -
電路仿真
+關(guān)注
關(guān)注
36文章
208瀏覽量
95679 -
工具
+關(guān)注
關(guān)注
4文章
311瀏覽量
27770
原文標(biāo)題:芯片設(shè)計全流程詳解
文章出處:【微信號:eetop-1,微信公眾號:EETOP】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論