半導體廠商如何做晶元的出廠測試?

例如 Intel 的 i7,蘋果的 A6,這樣複雜的 IC 要測的功能恐怕很多。
我想得到的困難有
1、BGA 這樣的封裝,應該不能多次焊接吧,那又如何上電測試呢
2、那麼多的功能,真的要寫軟體一樣一樣測嗎?很費時間吧
求內行


不好意思, 我想先簡單回答一下, 以後有空補充詳細吧, 也歡迎各位提問, 儘力回答.

1. 為什麼要進行晶元測試?

晶元複雜度越來越高, 為了保證出廠的晶元沒有問題, 需要在出廠前進行測試以確保功能完整性等. 而晶元作為一個大規模生產的東西, 大規模自動化測試是唯一的解決辦法, 靠人工或者說bench test是沒法完成這樣的任務的.

2. 晶元測試在什麼環節進行?

晶元測試實際上是一個比較大的範疇, 一般是從測試的對象上分為wafer test 和final test, 對象分別是尚未進行封裝的晶元, 和已經封裝好的晶元. 為啥要分兩段? 簡單的說, 因為封裝也是有cost的, 為了儘可能的節約成本, 可能會在晶元封裝前, 先進行一部分的測試, 以排除掉一些壞掉的晶元. 而為了保證出廠的晶元都是沒問題的, final test也即FT測試是最後的一道攔截, 也是必須的環節.

3. 怎麼樣進行晶元測試?

這需要專業的ATE也即automatic test equipment. 以final test為例, 首先根據晶元的類型, 比如automotive, Mixed Signal, memory等不同類型, 選擇適合的ATE機台. 在此基礎上, 根據晶元的測試需求, (可能有專門的test specification的文檔, 或者乾脆讓測試工程師根據data sheet來設計test spec), 做一個完整的test plan. 在此基礎上, 設計一個外圍電路load board, 一般我們稱之為DIB or PIB or HIB , 以連接ATE機台的instrument和晶元本身. 同時, 需要進行test 程序開發, 根據每一個測試項, 進行編程, 操控instrument連接到晶元的引腳, 給予特定的激勵條件, 然後去捕捉晶元引腳的反應, 例如給一個電信號, 可以是特定的電流, 電壓, 或者是一個電壓波形, 然後捕捉其反應. 根據結果, 判定這一個測試項是pass或者fail. 在一系列的測試項結束以後, 晶元是好還是不好, 就有結果了. 好的晶元會放到特定的地方, 不好的根據fail的測試類型分別放到不同的地方.

所以樓主的問題里, 對於各種功能的測試, 確實可能需要一行一行寫代碼來做測試開發, 這也是我日常工作的一大部分.

4. 一般的晶元測試都包含哪些測試類型?

一般來說, 包括引腳連通性測試, 漏電流測試, 一些DC(direct current)測試, 功能測試(functional test), Trim test, 根據晶元類型還會有一些其他的測試, 例如AD/DA會有專門的一些測試類型.

晶元測試的目的是在找出沒問題的晶元的同時盡量節約成本, 所以, 容易檢測或者比較普遍的缺陷類型會先檢測. 一般來講, 首先會做的是連通性測試, 我們稱之為continuity test. 這是檢查每個引腳的連通性是否正常.

先說到這裡, 後續我有空繼續補充, 不好意思哈


對大公司來說, 這是需要幾千名員工協作的工作.

晶元測試的目的是快速了解它的體質.
大公司的每日流水的晶元就有幾萬片, 測試的壓力是非常大. 當晶元被晶圓廠製作出來後, 就會進入Wafer Test的階段. 這個階段的測試可能在晶圓廠內進行, 也可能送往附近的測試廠商代理執行. 生產工程師會使用自動測試儀器(ATE)運行晶元設計方給出的程序, 粗暴的把晶元分成好的/壞的這兩部分, 壞的會直接被捨棄, 如果這個階段壞片過多, 基本會認為是晶圓廠自身的良品率低下. 如果良品率低到某一個數值之下, 晶圓廠需要賠錢.

WT的測試結果多用這樣的圖表示:

通過了Wafer Test後, 晶圓會被切割. 切割後的晶元按照之前的結果分類. 只有好的晶元會被送去封裝廠封裝. 封裝的地點一般就在晶圓廠附近, 這是因為未封裝的晶元無法長距離運輸. 封裝的類型看客戶的需要, 有的需要球形BGA, 有的需要針腳, 總之這一步很簡單, 故障也較少. 由於封裝的成功率遠大於晶元的生產良品率, 因此封裝後不會測試.

封裝之後, 晶元會被送往各大公司的測試工廠, 也叫生產工廠. 並且進行Final Test. 生產工廠內實際上有十幾個流程, Final Test只是第一步. 在Final Test後, 還需要分類, 刻字, 檢查封裝, 包裝等步驟. 然後就可以出貨到市場.

Final Test是工廠的重點, 需要大量的機械和自動化設備. 它的目的是把晶元嚴格分類. 以Intel的處理器來舉例, 在Final Test中可能出現這些現象:
1. 雖然通過了Wafer Test, 但是晶元仍然是壞的.
2. 封裝損壞.
3. 晶元部分損壞. 比如CPU有2個核心損壞, 或者GPU損壞, 或者顯示介面損壞等
4. 晶元是好的, 沒有故障

這時, 工程師需要和市場部一起決定, 該如何將這些晶元分類. 打比方說, GPU壞了的, 可以當做無顯示核心的"賽揚"系列處理器. 如果CPU壞了2個的, 可以當"酷睿i3"系列處理器. 晶元工作正常, 但是工作頻率不高的, 可以當"酷睿i5"系列處理器. 一點問題都沒有的, 可以當"酷睿i7"處理器.
(上面這段僅是簡化說明"晶元測試的結果影響著產品最終的標籤"這個過程, 並不是說Intel的晶元量產流水線是上文描述的這樣. 實際上Intel同時維持著多個產品流水線, i3和i7的晶元並非同一流水線上產品. )

那這裡的Final Test該怎樣做?
以處理器舉例, Final Test可以分成兩個步驟: 1. 自動測試設備(ATE). 2. 系統級別測試(SLT). 2號是必要項. 1號一般小公司用不起.
ATE的測試一般需要幾秒, 而SLT需要幾個小時. ATE的存在大大的減少了晶元測試時間.
ATE負責的項目非常之多, 而且有很強的邏輯關聯性. 測試必須按順序進行, 針對前列的測試結果, 後列的測試項目可能會被跳過. 這些項目的內容屬於公司機密, 我僅列幾個: 比如電源檢測, 管腳DC檢測, 測試邏輯(一般是JTAG)檢測, burn-in, 物理連接PHY檢測, IP內部檢測(包括Scan, BIST, Function等), IP的IO檢測(比如DDR, SATA, PLL, PCIE, Display等), 輔助功能檢測(比如熱力學特性, 熔斷等).
這些測試項都會給出Pass/Fail, 根據這些Pass/Fail來分析晶元的體質, 是測試工程師的工作.

SLT在邏輯上則簡單一些, 把晶元安裝到主板上, 配置好內存, 外設, 啟動一個操作系統, 然後用軟體烤機測試, 記錄結果並比較. 另外還要檢測BIOS相關項等.

圖片是測試廠房的布置.

圖片是測試廠房的布置.

而所有的這些工作, 都需要晶元設計工程師在流片之前都設計好. 測試工作在晶元內是由專屬電路負責的, 這部分電路的搭建由DFT工程師來做, 在流片後, DFT工程師還要生成配套輸入矢量, 一般會生成幾萬個. 這些矢量是否能夠正常的檢測晶元的功能, 需要產品開發工程師來保證. 此外還需要測試工程師, 產品工程師, 和助手來一同保證每天能夠完成幾萬片晶元的生產任務不會因為測試邏輯bug而延遲.

考慮到每一次測試版本迭代都是幾十萬行的代碼, 保證代碼不能出錯. 需要涉及上百人的測試工程師協同工作, 這還不算流水線技工, 因此測試是費時費力的工作. 實際上, 很多大公司晶元的測試成本已經接近研發成本.


好像沒有答2的啊。我來簡答一下2,再有問題再補充吧。

2、那麼多的功能,真的要寫軟體一樣一樣測嗎?很費時間吧

這就是所謂functional test和structural test的區別。
Functional test的思想是很直觀的。我設計了一個加法器,我就給他倆數,看看加起來對不對。但是這個方法有很大缺陷。一是耗時,得費腦筋設計測試輸入。二是依靠具體設計者,假如他沒工夫就得等他,假如後來他跳槽了公司就傻眼了。三是依靠人類智力。萬一設計者腦殘有個情況沒想到也完蛋了。
所以後來有了structural test思想。這個思想是我不管你怎麼設計的。反正數字電路最大,而且數字電路可以靠拓撲關係完全描述。那麼每條連線我可以窮舉他所有可能的出錯情況:跟電源短路、跟地短路、斷路、升壓太慢、降壓太慢等等。這樣我就有了所有可能出錯情況的列表。然後我設計一個引擎計算任一給定輸入情況下可以發現的出錯情況列表。
再然後呢?沒有再然後了,你弄個隨機數發生器隨便生成一堆輸入我就能計算出來這些輸入可能檢測到的出錯情況,夠了就收手唄。
電路內部狀態怎麼辦?數字電路內部狀態全是寄存器存的。你加個開關把這些寄存器連起來,兩頭接輸入輸出,那寄存器里的數還不是你想讓他圓他就圓想讓他方他就方。
模擬測試怎麼辦?簡單的用老辦法,複雜的添個ADC,照數字電路辦理。
因為structural test有這些好處,所以測試是很快的。如果說生成測試序列因為優化的關係可能還慢一些,真正ATE上測試的時間很短,以秒計算。


焊接倒不需要,設計出適合BGA一類封裝的socket並非難事,比如socket下面是很多頂針構成的陣列,測試時只需要將抓取的晶元往上一壓就行。socket是做好的電板,連接到測試機的各個端子,測試機讀取預先標號的測試程序,一顆小型的IC幾秒鐘就可以搞定。
像處理器那種複雜IC功能很多,在晶元設計之初就會考慮到測試的方式, 我也不是很懂,猜想也許是每條指令跑一遍。DFT(design for test)應該就是專門講這方面的。
測試機器不像前段晶圓製造的機器那麼貴,封裝廠都是上百台。


@王樂 正好提到了WAT,CP和FT。我可以再深入講一點:
WAT: Wafer Acceptance Test,是晶圓出廠前對testkey的測試。採用標準製程製作的晶圓,在晶元之間的劃片道上會放上預先一些特殊的用於專門測試的圖形,我們叫testkey。這跟晶元本身的功能是沒有關係的,它的作用是Fab檢測其工藝上有無波動。因為代工廠只負責他自己的工作是無誤的,晶元本身性能如何那是設計公司的事兒。只要晶圓的WAT測試是滿足規格的,晶圓廠基本上就沒有責任。如果有失效,那就是製造過程出現了問題。

CP: Circuit Probe,是封裝前晶圓級別對晶元測試。這裡就涉及到測試晶元的基本功能了。不同項目的失效,會分別以不同顏色表示出來。失效的項目反映的是晶元設計的問題。

FT: Final test,封裝完成後的測試,也是最接近實際使用情況的測試,會測到比CP更多的項目,處理器的不同頻率也是在這裡分出來的。這裡的失效反應封裝工藝上產生的問題,比如晶元打線不好導致的開短路。


簡單的說就是ATE測試 auto test equipment.


以前做過ate系統。
大體分為晶圓(wafer test)測試和封裝後測試(final test)。
wafer test需要標註出測試未通過的裸片(die),只需要封裝測試通過的die。
final test是測試已經封裝好的晶元(chip),不合格品檢出。
wafer test和final test很多項目是重複的,final test多一些功能性測試。

wafer test需要探針接觸測試點(pad)。測試的項目大體有:
1. 開短路測試(Continuity Test)
2. 漏電流測試(Stress Current Test)
4. 數字引腳測試(輸入電流電壓、輸出電流電壓)
3. 交流測試(scan test)
5. 功能性測試

die

die


題主把問題想簡單也想複雜了。

簡單:晶元只要出廠前測試一下就行了。 no no no~
複雜:出廠前的測試要很全面很完整。 no no no~

樓上幾位前輩已經說得不錯了,但在小弟看來有些過於專業。
我們別那麼高大上,把一塊塊千元級的i7當成曲奇餅乾吧!

餅乾廠在餅乾出廠前也要檢驗的,但肯定不是把餅乾都吃掉啦,晶元也一樣。

其實我們早在設計階段就層層把關,盡量簡化出廠測試的複雜度。
這,主要是出於成本考慮。
你晶元都生產好了要出廠了才發現問題,那我不是虧大了!!

所以設計+生產過程是經歷了以下的系列測試:
1. 可行性論證
2. 模擬測試
3. 後端後模擬
4. 晶元圓片測試(Wafer Test)
5. 探針測試(CP Test)
6. 封裝測試(FT)
7. 出廠前測試

所以如果有什麼大問題,設計階段就解決了(或者比較慘的情況下放棄產品,重新設計)。如果生產過程有大的問題,從圓片測試開始也層層篩選掉了。所以剩下的晶元都是精英中的精英,一眼看過去都是完美的成品。

接著主要由探針測試來檢驗良率,具體是通過專業的探針上電,做DFT掃描鏈測試。這些掃描鏈是開始設計時就放好的,根據設計的配置,測試機簡單的讀取一下電信號就之後這塊晶元是不是外強中乾的次品。

其實好的、成熟的產品,到這一步良品率已經很高了(98%左右),所以更多時候抽檢一下看看這個批次沒出大簍子就行了。

回答題主的問題:
出廠測試要做的,對Intel等晶元公司來說,是區分產品等級。比如同批次的i7的工藝、設計都是一樣的,但默認運行頻率是不同的,怎麼區分?測試一下!
有時候高級規格的產品夠了,也會把質量夠好的產品降級處理一下,這是商業策略。但也造就了一些超頻神器。

最後附上幾張測試照片給大家一個感性認識,圖片來自泡泡網。

以上是晶圓測試。


以上是CP測試。


以上是出廠測試。測試完成後就包裝出貨了。(包括直接放在托盤裡給大客戶送去,或者裝到盒子里給經銷商)


當然具體是研發過程更為複雜和折騰,不過題主問的是量產成熟產品,就不一一展開了。
歡迎討論和指正。

利益相關:晶元工程師


現在晶元面積越來越大,測試相當具有挑戰性。所以如何測試其實是一門很深的學問。由於信號過多,不可能把每個信號都引出來測試,所以肯定在設計的時候就要做可測性實際,就是DFT。簡而言之,DFT就是通過某種方法間接觀察內部信號的情況,例如scan chain之類。然後通過特定的測試儀器來測試——這種儀器不是簡單的示波器,它要能產生各種測試波形並檢測輸出,所以一套平台大概要上百萬。而且這些DFT比較適合於小晶元,大晶元像CPU之類的還會使用內建自測試(built-in self test),讓晶元自己在上電後可以執行測試,這樣就大大減小了測試人員的工作量。
最後說一下,測試非常辛苦,晶元可測性設計以及測試方法論是非常重要也非常深刻的話題。


CPU封裝完成後,主要有兩次測試:
一個是電性能測試,主要是測試晶元裡面有沒有電路上面的開路和斷路。上面知友提到的問題,PGA和BGA都可以測試的,不同的測試板而已。測試完了以後,還能把一個批次的晶元分等級(Bin),不同等級買不同錢嘛。
一個是真實平台測試,我們這邊的做法是把CPU真實地安裝在主板中,運行各種操作系統,看下有沒有不能開機之類的問題。


我來說一下吧。晶元測試是一個比較大的問題,直接貫穿整個晶元設計與量產的過程中。
首先晶元fail可以是下面幾個方面:
1.功能fail,某個功能點點沒有實現,這往往是設計上導致的,通常是在設計階段前模擬來對功能進行驗證來保證,所以通常設計一塊晶元,模擬驗證會佔用大約80%的時間
2.性能fail,某個性能指標要求沒有過關,比如2G的cpu只能跑到1.5G,數模轉換器在要求的轉換速度和帶寬的條件下有效位數enob要達到12位,卻只有10位,以及lna的noise figure指標不達標等等。這種問題通常是由兩方面的問題導致的,一個是前期在設計系統時就沒做足餘量,一個就是物理實現版圖太爛。這類問題通常是用後模擬來進行驗證的。
3.生產導致的fail。這個問題出現的原因就要提到單晶硅的生產了。學過半導體物理的都知道單晶硅是規整的面心立方結構,它有好幾個晶向,通常我們生長單晶是是按照111晶向進行提拉生長。但是由於各種外界因素,比如溫度,提拉速度,以及量子力學的各種隨機性,導致生長過程中會出現錯位,這個就稱為缺陷。缺陷產生還有一個原因就是離子注入導致的,即使退火也未能校正過來的非規整結構。這些存在於半導體中的問題,會導致器件的失效,進而影響整個晶元。所以為了在生產後能夠揪出失效或者半失效的晶元,就會在設計時加入專門的測試電路,比如模擬裡面的testmux,數字裡面的scan chain(測邏輯),mbist(測存儲),boundry scan(測io及binding),來保證交付到客戶手上的都是ok的晶元。而那些失效或半失效的產品要麼廢棄,要麼進行閹割後以低端產品賣出。這個就叫做dft測試。通常dft測試會按照需求在封裝前或封裝後進行測試,工廠里有專門的ate測試機台,用探針來連接測試的io進行dft測試。通常dft測試不會測試功能,因為這貨是按時間收錢的..測試用例越簡潔有效越好。而且用例太複雜,會影響出貨速度,比如出100w的貨,一塊晶元測試一秒,單dft測試24小時不停就要11天多。


封裝之後的測試不熟,有FT、SLT等,具體不詳,yield map一類,以前在fab的時候,看到的是結果,具體測法不詳,說一下fab晶元製造完成之後的測試吧。

1,出廠必測的WAT,wafer acceptance test,主要是電性能測試,每一類晶體管的參數,電壓電容電阻等,每一層金屬的電阻,層間的電容等,12寸廠的晶圓抽測9顆樣點,均勻分布在整個wafer上,答主熟悉的55nm技術,每一個樣點上必測70~120個參數,整片wafer測完約需要10~15分鐘,設備主要是安捷倫和東電的;
2,在晶圓製造過程中監測膜厚、線寬等,膜厚是13點,線寬是9點;
3,光學鏡頭晶元還會測試wafer的翹曲度、整體厚度值,要配合後端晶元的再製備;
4,在測試晶元(非生產性正常檢測)的時候,還會測試NBTI、TDDB、GOV等;
5,其他根據晶元特性的測試。


前ATE初級從業者,曾在行業某TOP2公司工作過,主要從事Final Test部分。
==
對第二個問題:根據我之前的工作來看,確實是要寫出程序來把功能都測試一遍,所以複雜的晶元一個測試項目通常會有好多人一起負責,項目周期短則一年半載長則3年5年。
按我的工作經歷,一般一個項目的工作流程如下,如有錯誤請指正:
1-接到客戶的晶元資料,通常是正在開發的晶元,資料嚴格保密,有時候晶元還在design階段就會開始聯繫合作的測試公司開始準備測試項目,以縮短整個開發周期;
2-根據晶元資料設計測試方案(test plan),這個過程經常會有晶元功能或者邏輯不明確的地方,所以需要與設計工程師反覆溝通review。
3-根據測試方案需要設計硬體介面電路板(DIB:Device Interface Board)。
4-根據測試方案開發軟體程序,如果項目巨大會分成多個module由多名工程師合作完成。3和4一般會同步進行。
5-第3和4步準備好後,就開始在tester上進行調試,一般是在測試公司的demo room進行。Bin1後release到工廠開始產線調試。
6-以上各步驟偶爾會出現錯誤,就需要不斷調整返回到出現錯誤的地方更正。我經歷的最嚴重的錯誤是發現晶元設計有問題,項目推倒重來。
7- final release


fab廠的話,生產的是整片wafer,發到封裝廠前一般用probe測試os,會得到一張wafer mapping。
封裝廠拿到wafer後進行bg saw,die bond貼die上基板時是loading wafer mapping的,這樣能確保貼上去的die都是ok的。我只知道這些,我是後道的


wafer專門留了探針測試區域,對應的mapping文件


終於可以答題了,
1、BGA 這樣的封裝,應該不能多次焊接吧,那又如何上電測試呢
在晶元封裝好後,進行FT測試(final test),是用socket夾著晶元在tester上進行測試的,BGA 就有BGA封裝專用的socket。
如果是工廠批量生產,那麼機械手上就自帶夾子。
如果是少量評價,那麼就用個帶蓋子的socket就行了。我們公司用的一個socket的價格從幾千塊到10幾萬不等(汽車晶元的比較貴),原理上就是一個夾子把晶元夾住摁緊,然後通過下面連著的管腳接到測試基板上,手上就好幾個,可惜不給拍照。百度個圖供參考:


2、那麼多的功能,真的要寫軟體一樣一樣測嗎?很費時間吧
不管是對晶圓還是對封裝好了的晶元,晶元測試正常主要有電流測試,電壓測試,timming特性,功能測試,flash測試。當然還有一些老化測試,就是在高溫高壓條件下跑上面的測試。
你所說的功能測試只是其中一部分,以前一般都是手寫軟體來生成tester用的程序(一般叫做pattern)的,但這樣效率太低,於是有幾個公司(mentor,Cadence,Synopsys之流)發明了一種方案DFT(design for test),用dft方式來覆蓋功能測試,具體來說就是設計晶元的時候就加入一些迴路,後期可以用工具自動產生測試pattern,覆蓋95%以上的功能測試。一下就簡單了。只需要補充幾條DFT沒有覆蓋到的pattern就行了。
像電流電壓測試,timming特性的測試,flash擦寫測試,每家公司都有自己的方案,我們公司基本上是用腳本批量生成的。


其他:對應測試pattern,還有一部分工作是由測試工程師完成的,把你的pattern應用到對應機種的tester上。每個機種都不同,愛德萬測試機需要C++編程,泰瑞達是excel形式的。
對應測試,還需要有硬體板子來連接tester。晶圓測試需要多個同測,需要計算針腳扎在wafer什麼位置。高溫測試需要耐熱材料。


在IC晶元送交封裝然後出貨給客戶前,會做電性測試,我們叫做WAT測試,測試主要電性參數,不同metal layer的電流,電阻,漏極,N/Pmos的導通,在封裝時有封裝的測試

到客戶那裡有兩種,使用probe card做CP測試,或者做成品的final test。

而測試function是by bin的,哪些bin的fail對應相應的參數或者是defect~~


目前在做ATE封裝測試相關的工作。

簡單來說,需要tester(目前是日本公司advantest一家獨大)+專門為晶元設計的socket board+socket(一般是黃金的多針腳)+handler(自動裝載未測試的晶元和分類測試之後的晶元,handler滿了需要operator操作)

測試程序需要編程和晶元功能雙方面的工程師負責。

程序語言五花八門,看各個公司差別很大。

大概是這樣,等有時間再細說吧。


看見太多都是在說wafer的,這個我真不懂。不過看了半天都沒有說RTL和netlist啊,這可是CPU設計/測試的重頭!注意我要來裝逼了。
本人前AMD regression testing來補充答一下。
首先,本人就是AMD一小混子,如果有認出我的architect, designer,和前老闆請高抬貴手不要來呵呵,如有說錯地方也請指正好了(說實話沒有人理解你們的block design用意在哪裡)

我是做regression testing,包括設計regression flow和調和designer, architect,和testing engineer的(裝逼過頭了吧?就是一個幾個部門之間打雜的)

當年數學碩士畢業(完全和硬體一毛關係都沒有我tmd是做交換代數的好不好)加本科是學computer science的,在AMD招聘ASIC designer時候去碰運氣(人家明明寫著要EE的好吧?你來湊什麼狗屁熱鬧)果然人家覺得我既不會verilog,又不會SystemC,連邏輯門電路都看的磕磕碰碰,於是當場就問我對regression testing有興趣么?純軟的,就是scripting,寫寫C啊,我說有啊,就做了好幾個C/c++的測試題,居然不小心給我都答對了。於是1個星期後我順利進入AMD上班。

一般architect和designer設計一個框架,然後剩下的累活就又designing engineer用verilog來寫flip-flop拉,拉拉CLK,蒙蒙皮,化化妝什麼的(我在說什麼?),就把東西扔給了testing engineer啊。人家設計幾千個testing case啊,然後就扔給我了。 這個時候我的工作來了,就是做RTL的regression testing, 在邏輯上必須差不多無錯拉,比如指令在規定時鐘周期必須完成啊,否則就得我tmd先拿出waveform來debug(哭),因為直接交給deisgner,architect會被人家連testing engineer一起罵:「這麼蠢的問題你也好意思來問我,負分滾粗!」, 而且每天上班一群testing engineer就等著我的regression result,我粗!一有問題你妹的連santa clara的人都會打電話給我,我掙點錢容易么?這個時候各種大小問題,比如scripting沒有適應新的block鏈接啊,改變了verilog的輸出所以一大堆testing suite fail啊,而且主要不是只測試一款CPU哦,是好幾代同時測,你妹的,AMD節約錢也不至於到這種程度吧! waveform我從看不懂到能改一些小bug (比如clk管線接錯,漏寫了not D, dct壓縮圖片給的不對),說多了都是眼淚因為我是打雜的!整個過程就被各個部門詢問啊,差不多持續好幾個月到1年。

你以為結束了?呵呵,想得太美了。RTL code freeze了就來了重頭了,這個是最耗時間,最耗錢的步驟了! netlist regression粗線了!!!!Verilog在synthesizer作用下已經不是簡單的block和門表達了,進入transistor level了,就是實際到時候製造cpu的實體電路狀態了!這就是高潮了。因為synthesizer是不可能完全優化RTL狀態的,而且synthesized電路肯定肯定有成千上萬的bug,各種奇門的bug,所以register級別的代碼不但是海量級的,而且regression極難,這個時候一般都已經超過預期時間了,所以全公司上下就是加班加點趕著netlist regression讓他們通過。然後我就成夾心餅乾了。netlist regression非常難運行和難調試, testing cases增加了海量級別(因為netlist細節太繁瑣又不能出錯)。各種匪夷所思的bug, 比如heissenbug都會出現,然後眼睛盯著十幾G的waveform在哪裡扣扣扣扣,因為模擬器實在太不給力(其實是現代cpu netlist太複雜了,以至於後來都用hybrid模式,先造出一個asic專用的block做混合測試,比如decoder部分不用純軟模擬測試,太耗時,耗時耗到公司都等不起)。。。。。這個過程差不多是cpu製造最耗錢最豪時間的階段,一般要持續2年左右,這段時間連大股東都會過來看一下,因為每個月大筆鈔票付出東流而沒有一點響聲, cash flow噼里啪啦為負財報極難看,然後中間各種部門踢皮球,上海amd的浦東部門似乎也喜歡把什麼事都說是「哎呀,那個好像是regression的那個中國人的問題哦 (我滿臉黑線)」,滿雜誌都在討論你這個下一代cpu, 結果呢,regression scripting出錯,waveform有很非典型性 fail (幾百次好的,就那麼一次會超出clock時間,古怪的返回值問題,想debug又不見了的那種),老闆對你發火,architect一臉不屑的看著你,testing engineering 裝無辜(我給了testing case拉,好像是regression的問題哦,和我無關哦,blah blah blah),痛苦加班 7天無休持續快1年多。。。。。終於。。。netlist freeze了。。。然後就連architect都祈禱不要出現wafer返工重來改block的事情(算大事故,因為好像netlist送去做wafer很難大更改,wafer廠要搞一大筆賠償如果有重大改動,具體請上面做wafer的給說明一下,我硬體小白)

送回來的測試版wafer放在engineering 主板上做測試,然後來回幾個往複可能就如上面答題的那些人一樣在實體測試,這個時候我們這裡就可以鬆口氣了,因為差不多就好了,大股東也鬆了口氣,因為再也不會看到白花花的銀子溜出去了,santa clara也會發來賀電,這個時候大概是唯一architects,老闆和大頭目會給我開心一笑,大家都請我去sushi店吃點玩意,表示我工作很努力,regression 整體沒什麼很大問題(難道有很多小問題?什麼意思?!),然後做wafer的地方會給我(們)每人發一塊紀念版wafer ,一般都是良品率極低的一塊,我就把它釘在我的cubicle上,從我工作開始到離職為止我已經收集了20多塊了(打碎了3塊,這玩意真tmd的脆)。

一定要匿!否則分分鐘鐘被人肉。嘿嘿


我之前做普工的,測試的是金士頓內存的ic.一樓是製作要用金線很累,兩班倒,我在四樓是測試,先用爐職考,然後是在然後在在高低溫,的很大的機器裡面測試,兩次是不同的攻佔,然後在測試熬吧,然後是激光打條碼,機器檢測ic表面,然後是美女母艦,然後是另外的美女抽插母艦,然後是包裝,一樓要穿無塵服紙簍兩個眼鏡,四樓是半成品不需要,一樓是原材料。作為四樓的普工來說,比一樓好一些,穿衣服,因為穿衣服,一樓比四樓多300。機器會自動把不好的跳出來,從新用其他程序測試,金士頓這種做作為普工還好,不用處理憂慮,西部數據那種要普工自己處理憂慮,金士頓這種是技術員之類的處理,反正相對來說被欺負的最慘的就是我們普工,也不會反抗,只會主動迎合,罷工也是技術員帶頭,然後停止也是技術員帶頭,然後就不管我們普工啦 好幾把增長啊


晶元測試本身也是一個複雜的問題,也還有不少人和公司在做這方面的研究,這個還涉及到晶元驗證-生產之前很關鍵的階段。驗證加測試會佔到整個晶元研發的很大一塊比例,可能一半多的成本和時間花在這上面。
首先封裝都是很後面的階段了,在封裝之前,整個晶圓就會被測試,這個時候晶元是裸露的,內部有很多供測試的接觸點可供探針用,會更直接方便
流程來說,測試和驗證在晶元設計時就會考慮,甚至有些晶元會設計一些內部專門的特殊測試的電路及輸入輸出供後面的測試。一般的數字電路測試已經很標準化了,業界DFT有比較成熟的方法。數字電路來說,功能測試在生產之後是不需要的了,至少是絕大部分不需要,完備的驗證工作可以保證邏輯的功能,所以生產後的測試是驗證實際電路在生產中本身是否有缺陷,比如金屬線,邏輯門等等實際單元是否能工作正常。通過內建掃描鏈以及優化演算法計算出的測試向量,可以通過測試結果分析出哪些節點有問題。
對於晶元中的其他非數字電路來說,也會有相應的測試項目,涉及功能和指標
具體來說,在生產後,這些所有測試項目會分類別分階段來,最重要的會先測,如果有問題,這塊片子不能正常用,直接就會廢棄,根本不會等到後面封裝,這樣節省了封裝成本。
大部分測試都盡量在封裝前做完,在封裝之後,也還有針對封裝後的測試。這些都是測試機完成的。
總的來說,晶元測試的確是很複雜,也涉及到成本,測試時間越長成本越高,設計者需要在這之間平衡,最少的測試電路和時間達到足夠高的覆蓋率。不過現在業界提供了絕大部分標準流程,如前面所說,數字電路不必生產後測試功能,還有存儲器等也都有內建測試,所以實際來說不需要設計者自己寫代碼來測試的


上面只有一個兄弟講到了DFT中SCAN的內容,我想補充一下。
晶元裡面數字電路的規模越來越大,想通過一次功能測試到裡面所有的邏輯門,顯然是不可能的(時間長,又不一定覆蓋到)。因此工程師想出了一個簡單的辦法,把所有儲存數據的寄存器(reg,不是mem)串在一起,在一個特定的工作模式下可以通過串列的方式,把數據送進去,再取出來。寄存器間的邏輯,在串入結束後,傳遞給下一級寄存器,這個測試叫scan test。通過數學方法,我們可以比對出,晶元是否輸出正確的邏輯,以保證晶元中數字部分的寄存器和組合邏輯是正確的。
當然,這只是測試中的一項。


推薦閱讀:

TAG:中央處理器 (CPU) | 半導體 | 晶元(集成電路) |