為什麼擁有巨大規模集成電路的cpu不會出錯?

cpu擁有大規模集成電路,數以億計的電路晶體管,由於量大,電路損壞或者失效的概率來說應該不小,可是就日常使用的系統Windows或Macos或者Linux很少出現明顯的錯誤。感覺這個不符合常理?誰能詳細解釋一下

1、cpu為什麼能保證巨大規模集成電路的情況下是如何保證不出錯的?

2、比如一個晶體管或者電路損壞會發生什麼情況?


謝邀。CPU會出錯,而且一旦出錯以後,會越來越頻繁出錯。出錯還不是最可怕的,怕的是出錯了你都不知道出錯了,因為CPU裡面有自動校正錯誤的機制。我們先腦洞一個場景:

某天,你坐在電腦前,與遊戲中的怪物奮戰時,一個神秘的宇宙射線到達地球。它逃過臭氧層的阻隔,穿過你的身體,擊中電腦的內存條。你因為吸收了宇宙射線的能量變成了奧特曼,你的遊戲人物屬性也因為內存某個bit的翻轉實力爆表,一刀把大Boss斬於馬下。怎麼樣,就問你刺激不刺激?

也許變身只存在於好夢中,但硬體錯誤卻時時刻刻在發生:一個電源的浪涌,電磁干擾和輻射等等都可能讓電腦中的某些部分發生錯誤,而我們卻很少看到這個錯誤:

這是為什麼呢?

其實硬體出錯可以分為已被糾正的(Corrected)和不能糾正的(Uncorrected):

1. Corrected:硬體發生錯誤,但已經被硬體或者固件糾正,不需要操作系統做出動作。

2.Uncorrected: 硬體發生錯誤,不能被糾正。它又分為兩種:Recoverable, 錯誤被限制在一定範圍內,可以進行隔離恢復;Fatal,致命錯誤,除了重啟別無他法。

硬體可以有很多種方法來糾正錯誤,本質上都是提供冗餘。以ECC內存來舉例,相對於奇偶校驗位(Parity)技術,ECC通過附加額外的5個比特可以發現2個bit錯誤或者糾正1個bit錯誤。內存的Mirror技術,利用雙備份內存,發現並糾正出錯的內容。如此種種,電腦硬體/固件利用各種冗餘來發現和糾正錯誤。

那是不是糾正了就完了呢?實際上除非偶然的浪涌產生的錯誤,因為製造工藝、老化等產生的錯誤有愈演愈烈的趨勢。這次的一位錯誤被糾正了,不加處理和重視,下次可能產生兩位錯誤,那時就有可能從Corrected變成Uncorrected!

Intel的CPU利用MCE和CMCI來向操作系統報告錯誤;PCIe子系統有標準的AER來報告錯誤;其他的硬體部分由BIOS通過WHEA/APEI來通知操作系統。下面我們重點來介紹MCE/CMCI。

MCE/CMCI

Intel從奔騰4開始的CPU中增加了一種機制,稱為MCA——Machine Check Architecture,它用來檢測硬體(這裡的Machine表示的就是硬體)錯誤,比如系統匯流排錯誤、ECC錯誤等等。這套系統通過一定數量的MSR(Model Specific Register)來實現,這些MSR分為兩個部分,一部分用來進行設置,另一部分用來描述發生的硬體錯誤。

當CPU檢測到不可糾正的MCE(Machine Check Error)時,就會觸發#MC(Machine Check Exception),通常操作系統會來處理#MC,它通過讀取MSR來收集MCE的錯誤信息,併產生上面第一個藍屏。當然由於發生的MCE可能是非常致命的,CPU直接重啟了,沒有辦法完成MCE處理函數;甚至有可能在MCE處理函數中又觸發了不可糾正的MCE,也會導致系統直接重啟。

當然CPU還會檢測到可糾正的MCE,當可糾正的MCE數量超過一定的閾值時,會觸發CMCI(Corrected Machine Check Error Interrupt),此時軟體可以捕捉到該中斷並進行相應的處理。CMCI是在MCA之後才加入的,算是對MCA的一個增強,在此之前軟體只能通過輪詢可糾正MCE相關的MSR才能實現相關的操作。

MC BANK

每個邏輯CPU實現了一整套錯誤屬性、狀態和控制寄存器。

它分為左右兩個部分,左邊的是全局的寄存器,右邊表示的是多組寄存器(Banks)。全局相關的寄存器組定義了如何開啟 MCA 的能力。Bank的數目由IA32_MCG_CAP MSR裡面的Count來決定

每一個BANK則具體對應一類錯誤源,如 CPU,MEMORY,CACHE,CHIPSET 等等。每一個BANK都可以進行單獨的控制,這樣軟體就能夠針對每一個BANK使用特定的方式進行處理。

隨著越來越多的器件被整合進入CPU,Bank的數目也有越來越多的趨勢,詳細可以參閱晶元的Spec。

CMCI

Corrected machine-check error interrupt (CMCI) 是在酷睿CPU時引入的新特性,叫做eMCA。不同於原先需要操作系統來輪詢(Polling)MC Bank的方式,CMCI 提供了一種機制,當corrected error發生側次數到達閥值的時候,就會發送一個信號給本地的CPU來通知系統軟體。當然,系統軟體可以通過IA32_MCi_CTL2 MSRs來控制該特性的開關。

操作系統可以選擇合適的Error count從而在問題嚴重了才讓硬體報告,並在CMCI的local APIC的LVT Entry中填入合適的中斷向量號碼和模式等(計算機中斷體系一:歷史和原理 - 知乎專欄)

WHEA和APEI

看過了可糾正的錯誤,那麼其他錯誤的處理呢?其實,更重要的問題是,可糾正和不可糾正錯誤發生了,不能簡單的重啟了事,錯誤的原因應該被記錄和報告出來,便於管理員找出問題點。可糾正的錯誤我們可以記錄在系統日誌中,因為系統還可以使用。但是發生不可糾正的致命錯誤後,系統處於不穩定狀態,誰來記錄呢?這是個大問題。

因為伺服器系統對可靠性的要求,微軟很早就提出Windows Hardware Error Architecture(WHEA),主要用於伺服器操作系統Windows Server系列。它一改以往由BIOS和BMC對錯誤進行單獨處理,OS不知情的狀態:

WHEA通過擴展ACPI(ACPI與UEFI - 知乎專欄),加入了四個table,用於固件向OS報告錯誤源,記錄錯誤和注入錯誤,改進後的系統框圖如下:

注意PCI和CPU都有自己的LLHEH來處理MCE和AER。

由於WHEA的成功,ACPI 4.0引入了它的幾乎全部,只是給了個新的身份證(GUID)並起了個新的名字:APEI(ACPI Platform Error Interface)。畢竟WHEA裡面的Windows並不合適作為工業標準的名字。

WHEA/APEI十分複雜,我們單獨撰文進行了介紹(WHEA原理和架構)。

結論

硬體的糾錯機制會讓細微的偶然錯誤化於無形,看來依靠宇宙射線屬性+100000的美夢並不現實。但同時也避免了數據的錯誤,幫助計算機系統健康穩定運行。也許我們可以打開Windows的系統日誌看一下,你可能會發現計算機真是雷鋒,做好事不留名!

該文被整理髮布在專欄:UEFI和BIOS探秘。那裡還有別的文章。歡迎大家關注UEFI專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。

用微信掃描二維碼加入UEFIBlog公眾號


晶元也會出錯啊,晶元除了datasheet還有erratasheet,就是記錄已知晶元bug的手冊,裡面有針對bug的workaround. 系統驅動里會根據這些來避免特殊時序下的bug.

當然晶元流片前的詳細的模擬測試是避免重大bug的必要手段,否則冒冒失失流片出來沒法用就虧大了。實體晶元也會有封測步驟確保剔除生產時的不良品,所以也就有所謂的KGD(know good die).


首先明確我們說的錯誤,主要指程序崩潰,或者是程序的運算結果出錯。後者SDC(silent data corruption)通常更嚴重,比如說計算機結果不對但程序沒有崩潰,錯誤結果最終也許會導致更嚴重後果。

電路晶體管出現錯誤並不少見,不過從整個計算機系統來看,統計講到某個特定的使用者,出現錯誤,並且能被體驗到並不會很頻繁。即使硬體出現錯誤,並不會都傳遞到最上層的軟體,比方說,只有5%的錯誤會影響到處理器的狀態,最終用戶觀察到的比如程序崩潰,計算結果出錯實際上會很少。

通常我們說的硬體錯誤有兩種,一種是soft error;另一種是hard error。soft error,不是軟體錯誤,是指因為背景輻射(alpha射線、高能輻射)造成的隨機翻轉,0變成1或者1變成0。這種錯誤是瞬時發生的,很難復現。hard error或者permanent faults就是題主說的電路損壞或者失效。

先講soft error,大部分soft error並不會影響結果,比如說某個晶體管臨時的位翻轉,但是邏輯門的輸出不依賴這個晶體管的狀態;或者出錯的時候時鐘正好不在那個狀態去用那個值;或者說出現在一個位置,很快被新的值覆蓋;或者說那個錯誤的值不影響軟體執行結果。因為種種原因,只有很少的錯誤會傳到到最終用戶可見的程度。在處理器架構設計中,還會針對關鍵電路採用容錯機制,檢測或者糾正錯誤,常見的,比如奇偶校驗、ECC等。

hard error,是永久性的電路失效,表現形式就是部分電路的輸出不變,永遠是1或者0。有的器件,會有備份電路,有檢測手段可以測試並用備份電路替代壞掉的。另外在實際情況中,損壞的電路並不會每次都被用到,比方說,晶元上有個buffer,其中壞了一個bit,但因為我的實際應用不會把這個buffer用完,也不會用到壞掉的那個bit,於是不會受那個壞掉的bit影響。

硬體也會提供機制向軟體報告錯誤。軟體(操作系統)也會有容錯機制去處理硬體報告的異常。比如說重試,很可能就不會再出錯。出現無法恢復的錯誤就是變成我們常見的程序崩潰了、kernel panic、死機之類的。

實際上,很多錯誤並不會影響用戶體驗,比如某個後台程序報一個錯,或者崩潰了;再比如屏幕上某個像素值有一瞬間不對;玩遊戲的時候某個NPC走位不對;或者點了下按鈕第一下沒動... 這些我們都不會直接想到是某個晶體管工作不正常。

有意思的是,統計結果表明,大部分的系統錯誤或者崩潰是軟體bug造成的(數據以後再加上)。


說實話軟體的同學們就不要過來強答了好嗎? 題主問的是高集成度的晶元會否因為電路問題/物理損害等造成失效,為什麼在使用的時候很少見到壞片.

一, 百萬門級/千萬門級甚至以上的晶元會不會出問題. 答案是肯定會而且所有晶元在剛回片的時候百分之百有問題,區別只在於是否致命以及問題數量多少.

二,為什麼我們用的晶元很少看到有問題. 答:因為你用的晶元在正式量產前已經經過數月的debug甚至修改電路重新投片. 而且,你在市場上買到的晶元都是經過ATE篩片確認工作正常的好片. 由於生產或者bug有問題晶元在foundry 生產完就會被篩選出來扔掉. 所以你買到的晶元都是工作正常的晶元.

如果在市場上買到一個不工作的晶元,這屬於晶元設計商量產篩片的重大事故. 證明ATE向量失誤一般會造成停止生產-》debug問題-〉找到root cause-》驗證解決方案-〉重新修改ATE向量-》確認新向量能夠正確篩掉壞片並不會對好片造成over kill -〉恢復生產. 其造成的損失可想而知. 所以一般在量產時篩片的向量準確性一般接近百分比(為了不漏篩壞片一般寧殺錯不放過,當然有誤殺也算是缺陷畢竟增加公司成本.

另外系統跟晶元是兩個東西.

功能電路壞了根本系統就起不來更不要說進系統了

保護性電路壞了比如ESD 相關不會影響使用但是影響安全性,也就是說你現在開機可能沒問題,然後晚上也許在USB口上不小心碰了一下結果晶元介面被打壞了.

可靠性設計同樣不影響功能但是影響壽命, 別人晶元操3年,你的搞不好2個月玩完.

用車舉個例子,功能電路是發動機變速箱這些. 有問題你根本跑不起來. 保護性電路是車門防撞桿這類,你沒有照樣開. 可靠性設計屬於做工,是不是用兩天天窗就漏雨了剎車就失靈了.至於windows啊這些就是車子的各種輔助娛樂功能. 然而如果發動機都起不來電都沒有系統能起的來嗎


晶元是有容錯的,不是說不出錯。intel當年有個著名的bug就是CPU算除法算錯的,這不是什麼不可能的事。

晶元有錯誤,或者說bug不是什麼大不了的問題,對於複雜的CPU來說有糾錯機制,所以你感覺不到他出錯了。對於設計出錯,比如上面說的除法算錯的,可以通過其他邏輯路徑來替代當前的邏輯實現同樣的功能,只要在編譯時做出相應的參數改動就行了。


回答這個問題,還有個目的,看看傳言是否真的。

先答,會出問題。

然後說說傳聞,年初遇到思科的人說,2017年初華為在北歐遭到巨額索賠,該國的通信網路大量採用華為設備,但在16年底17年初,北歐某國重要場合,出現涉及骨幹網路,熱點地區等大規模的網路故障,當時並未進行相關設備升級維護。根據事後排查,涉及設備都是華為的。(這部分內容是做實驗時聽說)

然後華為大規模尋求相關失效分析,詢問了多家儀器儀錶,測試方案供應商。(這部分是聽做方案和設備供應商)

最後,是思科的人說法,說華為的設備沒做過24小時全天候實驗,在高緯度地區由於大氣在極光區域,遇到磁暴等事件導致高能粒子穿透,進入地球表面,影響通信設備。(這部分我去檢索了下,的確思科有關於高能粒子實驗的論文,華為沒有)


少而已……類比編程,就像你寫個程序也不僅能編譯(模擬),還有一大幫子人做設計規則檢查DRC、電路和版圖一致性檢查LVS、寄生參數提取PEX,可製造性測試DFM還是啥的茫茫多一大票東西,可靠性也會上升很多。另外集成電路也有版本,新版本會把之前發現的BUG Fix掉。


馮·諾伊曼雙手過頂,莊嚴地喊道:「奉聖上御旨,計算機啟動!系統自檢!」

在金字塔的中部,一排旗手用旗語發出指令,一時間,下面大地上三千萬人構成的巨型主板彷彿液化了,充滿了細密的粼粼波光,那是幾千萬面小旗在揮動。在靠近金字塔底部的顯示陣列中,一條由無數面綠色大旗構成的進度條在延伸著,標示著自檢的進度。十分鐘後,進度條走到了頭。

「自檢完成!引導程序運行!操作系統載入!!」

下面,貫穿人列計算機的系統匯流排上的輕轉兵快速運動起來,匯流排立刻變成了一條湍急的河流。這河流沿途又分成無數條細小的支流,滲入到各個模塊陣列之中。很快,黑白旗的漣漪演化成洶湧的浪潮,激蕩在整塊主板上。中央的CPU區激蕩最為劇烈,像一片燃燒的火藥。突然,彷彿火藥燃盡,CPU區的擾動漸漸平靜下來,最後竟完全靜止了,以它為圓心,這靜止向各個方向飛快擴散開來,像快速封凍的海面,最後整塊主板大部分靜止了,其間只有一些零星的死循環在以不變的節奏沒有生氣地閃動著,顯示陣列中出現了閃動的紅色。

「系統鎖死!」一名信號官高喊。故障原因很快查清,是CPU狀態寄存器中的一個門電路運行出錯。

「系統重新熱啟動!」馮·諾伊曼胸有成竹地命令道。

「慢!」牛頓揮手制止了信號官,轉身一臉陰毒地對秦始皇說,「陛下,為了系統的穩定運行,對故障率較高的部件應該採取一些維修措施。」

秦始皇拄著長劍說:「更換出錯部件,組成那個部件的所有兵卒,斬!以後故障照此辦理。」

馮·諾伊曼厭惡地看了牛頓一眼,看著一組利劍出鞘的騎兵衝進主板,「維修」了故障部件後,重新發布了熱啟動命令。這次啟動十分順利,二十分鐘後,三體世界的馮·諾伊曼結構人列計算機在「秦1.0」操作系統下進入運行狀態。

——節選自《三體》,內容來自網路。


首先所有晶元都是可能出錯的,對於可靠度,iso有專門的標準來衡量.

ASIL-D級別的可靠度是現在大規模量產所達到的最高水平.

這種級別的晶元是用在汽車上.

而這個級別單點故障率要求不超過1%,潛在故障率不超過10%

一號問題答案:

答案是通過系統的冗餘及糾錯設計,在設計工況下,故障率已經趨近於零了.

而比亞迪的電動公交 .... 嘿嘿嘿嘿嘿

另外必須注意設計工況,一般晶元直接放衛星上用,肯定要撲街的.

二號問題:

就是問壞了會怎樣唄

民用晶元,壞了靠設計預留的糾錯能力(通常較小),損壞超過設計預留,電腦就壞了唄.

高安全級別的晶元,則會檢測到失效,屏蔽掉壞了的電路,盡量維持正常運轉,並報告失效.

顯然安全性高了要犧牲性能啊,家用電腦崩了就崩了唄,反正也是小概率了.


隨手回不是很精準不要怪我。

在IC設計裡你可以想像Analog的人在磁磚上雕花,數字的人拿這些磁磚拼成一幅巨大的美術品。在每一個階段其實都需要去做風險掌控。

在類比工程師雕磁磚最重要是燒磁磚的窯工廠(Foundry)的製造力。不要燒破燒壞。因為有許多像溫度 土的黏稠度 雕花的間隙(SPICE Model / RC extraction / LVS / DRC). 等確保每一塊磁磚都沒問題。

再磁磚還沒燒好前,數字前面就有很多對於我整張圖的構圖合不合理,畫完的成品能不能賣出高價符合市場預期 (Design verification/ Functional check) 等磁磚燒好,就是拼拼樂時間。你就想成構圖佈局放磁磚拉線,這些都還要去用很多極端的條件去確認這畫會不會賣掉非洲或北歐買家裂開來。最後燒窯的也有很多道流程驗證你的作品。

做這麼多就一定不會有事嗎?當然不一定,所以每個晶元收回來還要測試。所以拿到的時候多數都已經千錘百煉。

如果你覺某晶元很爛,多半是它本來就這麼爛。


問題前提不對,這類晶元肯定會出錯,從設計到生產都肯定會引入錯誤,而且數量不會少。如果你知道很多日常使用的晶元裡面bug的數量,估計會嚇你一跳。這其中很多是廠商知道但沒改過來的,一般是權衡了改正的代價和bug的影響後決定的。

對這些問題最常見的就是通過底層軟體後期fix。譬如某個加速器有bug,而剛好有個處理器有剩餘處理能力,就通過軟體/固件實現相同功能。我還遇到過少數情況下編譯器也得針對bug進行修改。當然這樣一般會導致產品的spec下降,但一般最終用戶不會有直接的感覺。

另外現在複雜SoC的頂層設計都會確保單個IP出問題不會影響整個系統,所以對於沒法fix的嚴重bug,可以把對應的模塊禁用掉,說不定還能繼續賣(類似於Intel的i7-&>i3)。


不是沒有錯,是出了錯你也幾乎感覺不到。。

一方面設計開始就會考慮到良率,做冗餘設計,還有通過軟體屏蔽的方式禁用一部分異常電路。絕大部分邏輯和時序錯誤在最初通過模擬,還有流片回來之後的debug都會被消滅。一些不可避免的情況,比如跨時鐘域訪問(FIFO)就一定會有空翻,程序分支預測也有失敗的情況,這種時候就一方面靠工程手段壓縮問題發生的概率,另一方面就是將錯就錯,一次結果不對就多來幾次,直到正確為止。。所以對於更高層次的抽象(軟體開發),經過這樣層層把關,你就幾乎感覺不到錯誤的存在了。


晶元當然也會出錯,但是題主的問題不是特別明確,不知道指的是哪種錯誤,雖然這些錯誤最後表現可能都是一致的,不通的錯誤還是有不同的手段來應對的。

具體來說,集成電路從設計到製造到最後的應用大致分成這麼三類錯誤:

  1. 邏輯、物理設計錯誤
  2. 製造(工藝環節引起的)錯誤
  3. 由於複雜的應用場合引起的電路誤動作(比如高輻射或者電磁干擾等)

對於第一類錯誤,目前晶元設計環節中最為耗時的步驟應該就算是邏輯驗證了。因為硬體不像軟體一樣可以通過發布新的版本來糾正bug(準確的說是硬體修復成本高,難度大),而且目前最先進的工藝節點流片成本極為高昂,所以硬體設計對邏輯正確的要求可謂嚴苛,一家設計公司的水平也很大程度上可以從一次性流片成功率上來反應(當然除了邏輯驗證之外,晶元設計其他方面方面也有極高的要求,比如物理設計,甚至散熱,封裝等等都是很大的學問)。在設計環節大量時間(可能高達70%)花在設計各種測試向量,直接的隨機的等等,並且利用各種輔助設計工具,比如最基本模擬器對設計的電路進行測試(行話叫bake,可以體會一下);還有使用其他的高速驗證平台,比如將電路映射到FPGA上來跑實際的應用,或者使用硬體加速器來跑儘可能多的向量。總之無所不用其極,這也是晶元設計高門檻的原因,越是規模大的電路越不是一般公司可以搞定的。在比較新的工藝節點上,一個邏輯bug的價值可能超過100萬美金,在流片前儘可能多的發現問題是至關重要的。通常晶元是否可以流片也是通過衡量bug rate來決定的,比如連續兩周發現的bug數量小於某個指標就可以安全流片。設計中通常也會留一些『後門』,一般是一些秘密的寄存器,不會出現在用戶手冊裡面,就是為了萬一有問題可以把一些高風險的feature給關掉。

對於第二類錯誤,晶元出廠前都需要經過嚴格的測試來篩除那些由於製造過程中引入錯誤的壞片,這也有好幾道關來篩選,一般覆蓋率很高,基本上不會有漏網之魚。晶元在設計過程中一般會加入DFT(Design For Test)電路,這就是專門用來測試晶元生產過程中引入的錯誤的電路。這種電路可以把晶元置於『測設』狀態,跟普通工作模式是不一樣的,通常這會帶來更高的測試覆蓋率和更短的測試時間(測試台的收費是按照秒來計算的),從而降低晶元成本。越早排除壞的晶元付出的代價越低,越到後面越貴,想像一下一台筆記本組裝好了結果發現cpu或者gpu有問題,那該是多麼尷尬的一件事情。

對於第三類錯誤,前面Drazi答得很全面了。需要指出的是使用冗餘手段和各種安全措施給晶元的成本帶來的壓力是巨大的,在一般應用場景下的消費類電子產品,基本上其電磁環境是在一個可控的狀態的,即使出錯大不了就重啟一下,所以一般不會如此大動干戈。只有對安全性要求極高的場合,比如汽車上用的晶元,一旦出錯就是人命關天的事情,才會不計成本的進行高安全性設計,當然羊毛出在羊身上,最後還是消費者買單。這種安全性要求高的場合通常有自己的認證要求,也有ISO或者行業的標準來指導設計規範;有專門的公司來進行audit,所以安全性是有保障的。

啰哩啰嗦一大堆,題主湊合看一下,知乎首答,如有不合適多多包涵。


1994年6月,英特爾公司剛剛推出其劃時代產品一一奔騰處理器。在晶元推出的前幾天,英特爾公司的技術人員在做測試的時候發現,奔騰晶元的除法運算會發生某種偏差,這個問題是在90億次除法運算中才可能出現1次錯誤。


跑步前答一下

首先,晶元製造(特別是大規模的晶元比如cpu)一定會出錯,概率問題,晶圓廠(製造晶元的工廠)一般把這個稱為良率

那麼為什麼一般消費者不會碰到?原因很簡單,一般出問題的晶元都被檢測出來丟掉。數字晶元檢測一般用到一個叫做DFT(Design for test)的技術,簡單來說,就是會插入檢測的電路(scan chan),測試的時候輸入相應數據(patten),根據輸出就能夠判斷晶元是否有問題。

如果晶元壞了,可能會1 直接丟棄 2屏蔽錯誤的模塊,作為低端產品(cpu很多時候用的就是這種方法)

至於有些回答說的ECC,一般用於存儲器(sram/dram等)的校驗or糾錯,消費品用的比較少,工業級用的稍微多點

當然還有其他方法,比如直接跑程序之類,我就不多說了(其實因為我也不懂,哇哈哈)


我來跑個題

3DS的ARM11 CPU在啟動bootloader時的校驗有一個bug,而這個bug促成了A9和B9自製固件的誕生

由於可能牽扯到D版方面的討論,我還是匿了比較好……


我感覺好多回答都沒有答到點子上。樓主問的是cpu硬體吧,為什麼很多人答軟體問題呢?

首先晶元投片前會有大量模擬驗證工作,相信我,一款晶元專門從事模擬工作的人會有4-10個左右,大型處理器晶元可能更多,他們會隨著晶元設計進展用半年時間模擬晶元的絕大多數功能用例,盡最大可能避免設計錯誤。

之後晶元製造出來,還在晶圓上沒被切割,就會進行一輪測試,稱為cp測試,這輪測試會覆蓋99%以上的數字邏輯和一定比例的模擬器件,大概有十分之一左右的晶元在此階段被淘汰。還沒出晶圓廠就被拋棄了。

合格的晶元會被送去封裝場封裝成我們常見的cpu的樣子。然後送去測試場,進行ate機台測試,處理器晶元大概每塊晶元要經歷一到三分鐘測試,包括數字邏輯,memory,各種模擬ip,io等等,整體覆蓋99%以上。一般測試頻率最低在40m左右,也就是25ns周期的時鐘,你可以想像一下一分鐘測試時間能跑多少東西。另外還會跑shmoo,就是吧頻率,電壓拉偏,要求晶元有一個較大的工作區間,不符合的晶元全扔了。這部分工作根據不同工藝,幹掉的比例不同,比較先進的16nm大概會幹掉30%左右。

你以為這就完了?早著呢,每一個批次的晶元,都會進行char測試,就是看一下正常工作邊界,還有老化測試,就是連續運行幾百小時再測,一旦這兩個測試出現異常,那麼對不起這個批次的晶元全等著不能出廠,等定位出異常原因再說。

然後晶元會到達設計方和產品方,設計方會在單板上運行功能用例,覆蓋重點邏輯。產品方會進行裝備測試,覆蓋重點功能。所有一切都合格了,這顆晶元才會裝到產品上面,產品組裝完成出廠前還會進行一系列測試才能發貨到達你的手上!

這麼一系列工作下來,一顆晶元過五關斬六將才能上市,怎麼可能隨隨便便壞了呢?


@Drazi 以及 @王瑋琦 的答案非常詳細啊。

想補充的一點是針對容錯的策略方面的。事實上,並不是電路中的所有部分,都需要進行容錯設計和保護,因為針對超大規模集成電路中發生的大部分錯誤,系統和軟體的態度基本上都是:「主不在乎」

關於哪些部分的錯誤可以被忽略,而哪些部分特別重要,一定要設置容錯機制,上個世紀就提了一個指標叫做體系結構脆弱因子(AVF)的指標:

引用來源:中科院博士學位論文:基於脆弱因子的微處理器體系結構級可靠性分析與優化

事實上,對於那些並不重要的部分,我們甚至還是很鼓勵隨便算一算甚至是愛算不算的,這就涉及到用精度來換性能的近似計算問題了。


同一個晶圓上由於ocv和其他原因肯定會出現良率問題,為了儘可能減少這種情況就有drc和lvs檢查以及其他的,嚴格按照design rule設計會保證一定的良率。還有就是不合格的晶元出廠就廢棄了,合格但是性能不合適的,通過鎖頻之類的措施,就是i7 i5 i3啦


因為加班驗證,看波形眼睛都綠了,各種log文件,report文件看的都作嘔


推薦閱讀:

晶元的設計與製造,哪個更重要?
在理想狀態下,CPU需不需要工作在一個時鐘下?
為什麼不能將計算機內所有原件集成到一塊晶元上?
製造 CPU 需要哪些技術,中國在其中哪幾項落後國外?
用ARM公版就能搭出手機晶元SOC嗎?

TAG:操作系統 | 中央處理器CPU | 硬體 | 晶元集成電路 | 晶體管 |