當前位置: 華文星空 > 心靈

據說大型芯片有幾十億個晶體管,一個都容不得出錯,但為何芯片可靠性還這麽高?

2020-09-12心靈

我怎麽發現截至12月5日我發帖前,幾乎所有答案都機智的繞開了問題核心,抓住最粗淺最不足以說明原因的東西一通振振有詞呢?

先來剖析問題。

我看到的問題是「據說大型芯片有幾十億個晶體管,一個都容不得出錯,但為何芯片可靠性還這麽高?」。

這個問題問的很好,但不夠專業。

專業的問法可能是:

1、大型芯片(如CPU)有幾十億個晶體管,如果晶體管有制作缺陷,芯片當然就會執行出錯。請問如何保證它們不被做壞?

2、大型芯片(如CPU)有幾十億個晶體管,而且每秒可以執行幾十億條指令;發生任何錯誤都可能影響程式的正確性。請問為何它可以抵抗諸如電壓波動等諸多環境幹擾,實作7X24小時的可靠性(7X24小時指的是一周七天,每天24小時,一秒休息都沒有的連續服務)。

對這兩個問題,各有不同的答案。

對問題一,問的是硬體生產的可靠性。

這個可靠性依靠的是很多很多方面的協同努力。

首先,我們需要提純矽。矽片越純,雜質的幹擾就越小。

一般的半導體器件,比如你家老式收音機裏用的三極管之類,就要求99.9999%以上的高純矽(6個9);而大規模積體電路需要至少99.9999999%以上的高純矽(9個9);如CPU這樣的電腦芯片,則需要99.999999999%以上的高純矽(11個9);人類目前能制造的最純的矽材料,純度可達12個9。

換句話說,矽片本身就有極高的純度,以致於用於CPU生產的一千億個矽原子中,只允許含有最多一個其它原子。

——千億綠豆中只有一顆紅豆太誇張?萬一五顆紅豆好死不死恰好一起出現在10厘米範圍內呢?

僅僅純度高還不夠。用來做芯片的矽,它還必須「生長」為「單晶矽」——也就是說,矽原子的晶格排布必須整齊劃一,像多晶矽那樣雜亂無章是不行的。

如果你問「如此高純度的矽是如何提純的?」,那麽我只能回答「這是生產廠家的技術秘密,全世界都沒多少人知道」。

單晶矽裏面,雜質分布並不均勻。雜質富集區很容易導致(意料之外的)漏電流增大、晶格缺陷等諸多問題(現代芯片制造甚至會借助各向異性刻蝕等手段,晶格缺陷必然導致刻蝕出的溝道畸形),這些都可能加大芯片的失敗率、增加它的發熱量、限制它的效能。

【圖文】第10章 幹法刻蝕_百度文庫

因此,普通的晶體管,6個9的矽便可滿足需求;大規模積體電路就必須9個9;CPU這樣的超大規模積體電路,11個9的高純矽才可能把良品率提高到可行範圍——芯片行業可不缺聰明人,10個9夠用他們就絕不會像個冤大頭一樣,掏大價錢買11個9的昂貴材料。畢竟純度加一個9可不是多敲一下鍵盤那麽簡單:你猜人類已經能造12個9的矽材料了為什麽不大量套用呢?

有了最好的原料,才有可能做出最高品質的成品——讓你在沾了油的宣紙上寫字,這副作品是不是就很難完美了?一樣的道理。

把我的一段評論貼上來:

現在積體電路的線寬只有幾十個奈米(甚至十幾個奈米)。

摻雜的目的,是在這幾十個奈米的範圍內、該磷是磷該硼是硼、準確的把它註入純凈的矽晶格之間,從而在局部生成P型和N型半導體,使得它們恰好組成電氣效能合格的場效應管(構成的門電路)。

說場效應管有點粗糙了。實質上,因為半導體原理以及電路原理,芯片上幾十個奈米寬度的P區和N區交錯縱橫,它們彼此之間還能形成許多寄生電路——而CMOS工藝甚至能利用這些寄生電路為我們服務。

把如此精確的、定點生成P/N型半導體的工藝叫「摻雜」,是因為半導體材料方面的研究以矽鍺為主——或者說,半導體就是往矽/鍺裏摻入不同物質、然後研究它們的導電性的一門學科。

為了便於討論,當我們談起半導體時,如果總是說「往矽中摻入五價元素A」「摻入三價元素B」實在太麻煩了。尤其是不關心或者不知道究竟摻了什麽時,這樣就更啰嗦了。

半導體主要就是利用它的電氣特性,因此絕大多數場合都不關心摻了什麽只關心電氣特性。

因此,在不需要討論具體工藝參數時,業內就籠統的說「摻入雜質」或者「摻雜」。

習慣這麽說之後,積體電路工藝裏,準確的在矽片某個區域的晶格間註入某種五價元素/三價元素這一步,就也被簡稱為「摻雜」。

因此,再強調一遍: 千萬不要望文生義,以為純凈的矽不好用,做積體電路前還得添點雜質進去

事實上, 這一步工藝雖然叫「摻雜」,但實際上是在矽片上就地制作晶體管
註意PN接面兩側摻的東西可是不一樣的,容不得半點混淆!每種元素的摻入位置也必須絕對精確,不然將來只有幾十甚至十幾個奈米的路線搭不上,這芯片可就做廢了。

敢把這個真當成「隨隨便便撒點雜質」那種「摻雜」,那可丟人丟大發了

【圖文】CMOS積體電路制造工藝介紹_百度文庫

和對矽片的苛刻要求一樣,光刻機本身,從透鏡的磨制精度到光刻膠到切割出的晶圓的平整度再到用到的一切一切,幾十項工藝以及這些工藝需要用到的工具/材料,幾乎全都有很高級別的苛刻要求(註意這幾十項僅僅是工藝,真正要做的事項可不止這麽一點點)。

任何方面微乎其微的、拿最好的光學顯微鏡都看不清的一丁點缺陷,都可能導致芯片良品率直線下降——甚至,哪怕一切到位,哪怕Intel這種業界頂尖公司,新工藝上馬,良品率往往也相當的低。經常需要長時間的偵錯、磨合,才能保證良品率達到可用範圍。

是什麽問題導致 10 奈米制程芯片良品率過低?會對下遊產品有何影響?

不僅光刻機本身。它所處的環境也都要求苛刻。

比如,它必須置於嚴格無塵的環境裏。因為落到芯片上的一粒灰塵,就可能毀掉數百個門電路。

https:// wenku.baidu.com/view/13 c777aebd64783e09122be9.html

請註意,這是一個很老的規範了,可能無法滿足現代光刻機的需要。

類似的,如果不采取嚴格避震措施,光刻機工作時,800公尺外一輛汽車開過,引起的顫動都可能導致大批芯片報廢!

總之,透過數不清的方面無數科研人員、工程師以及技術工人的各種努力,彌補一切方面的一切短板,該妥協的地方酌情妥協,人類終於可以保證,CPU芯片上光刻出的門電路,出錯機率可低於億分之幾(老黃歷了,現在能達到多少我還不清楚)。

對於普通級別的芯片,這個工藝水平已經可以保證「出錯幾乎是不可能的」——因此頗有一些人以為「做芯片什麽都不用管壞了就扔就行」。但他們並不知道,別人為了把芯片產線品質穩定度提高到這個程度付出了多少辛勞。

但對CPU這樣最為尖端的、同時挑戰整合度和可靠性的芯片,這樣往往也還不夠。

因此,人類在設計CPU電路時,便將其模組化;然後故意制造出冗余的重復模組來;當CPU光刻完成後,透過測試,遮蔽掉不良模組(不良模組不僅僅是出錯的模組,還包括熱穩定性不佳等缺陷)。這樣哪怕發生了少量錯誤,制作成功的機率也不會太低。

更進一步的,如果不良模組實在太多、以至於整個核心都不能用了,還可以遮蔽掉整個核心——原始設計是8核,遮蔽4個就可以當4核賣了。六核雙核等情況依此類推。

(當然,有時候運氣好良品率特高,但舍不得掏錢的使用者對低端CPU有需求,高端的生產太多又賣不掉,廠商也可能故意把高端CPU的核心遮蔽掉、頻率限低,當低端CPU賣給使用者——這和主題無關,就不討論了)

但是,請註意, 這個冗余設計既浪費芯片面積,又加大了研發投入、增加了諸多方面的復雜性 只有類似CPU這樣挑戰人類極限的工程,迫不得已才會采用 ——所以才說,拿「壞了就遮蔽/壞了就扔」當真相的都欠缺常識。

打個比方的話,問「我要經常開車跑長途,這可能做到嗎?」

正確回答是,先挑選品質足夠高的車,汽車工業剛起步時幾十公裏就得修一次的爛車是沒法用的(提高原料品質工藝可靠性);然後選用更容易排錯維修的車型(設計時考慮可維修性);最後,真跑廢了就扔掉再買一輛。

嗯,跑長途基本靠扔車?你覺得這回答過腦子了嗎?真拿扔車不當回事的那叫F1,不是長途司機。

——那些張嘴就拿遮蔽說事的,多半是懶得動腦。他們就沒想過,如果拿6個9的矽片造CPU,這密密麻麻的缺陷,靠遮蔽能遮蔽過來嗎?更不用說隨便抓把石英砂拿電爐土法上馬搞的渾濁不堪的垃圾矽了。

必須先有一個極高穩定度的平台,才有耍遮蔽之類小聰明的余地

——換句話說,遮蔽是很有效,但它在這個問題裏,是最不重要最沒技術含量的因素。

PS:鑒於某些假裝專家的外行搗亂,我在這裏科普下所謂的「遮蔽」究竟是怎麽一回事。

我們知道,記憶體有很多很多單元,但匯流排只有一條。那麽,當CPU要存取64g記憶體中的其中一個單元時,它就要在地址線上輸出一組電平,使得該記憶體單元被選中(實際相當於透過一組與門,切斷了除被選擇單元外其它任何記憶體單元的輸出訊號),然後就可以讀到正確的值了。

實際上,電腦裏的一切,上至寄存器下至鍵盤,都是以同樣的邏輯控制輸入輸出的。只不過未必都在匯流排上(或者說沒有統一編址)而已。

CPU內部也是如此。核心之間有通訊路線,核心內部,從加法器到寄存器再到緩存,全都有類似匯流排的數據―地址路線相互連線。

因此,只需記錄錯誤單元的地址,避免存取它甚至不給它供電,就可以達到遮蔽的目的了(反過來也行:比如記錄寄存器EAX等和內部地址的對應表,不註冊壞掉的寄存器或其它單元,也可達到遮蔽的目的)。

這種遮蔽甚至可以是自動的:透過檢測,給壞掉的單元置位;然後在CPU自檢流程排除它們即可。

總之,可行的做法很多很多,具體某個廠商用了哪種是不可預測的。我們只需知道「能做到」就對了。

假專家只知道硬連線、跳線,說明他還是有點電路基礎的。但他顯然不懂數位電路的地址機制,不知道就連寄存器都是有地址的(但註意和記憶體地址區分。它是CPU核心內部地址,這個地址甚至對同一顆CPU的另一個核心都可能是不可見的);有地址,只要不是短路型故障(短路故障還需要從供電上遮蔽),就可以用簡單的「避免存取」達到「遮蔽」目的。換句話說就是:這人電腦原理學的一塌糊塗,數位電路基本還是沒入門水平。大二相關科目也不知怎麽混過去的。

當然,我拿寄存器舉例是為了說明問題,證明哪怕寄存器這種粒度都有辦法遮蔽,並不代表CPU就真的細致到了寄存器這個粒度。實際上,有工藝精度保證,粒度太小了反而增加成本,工程是需要根據實際情況取舍的。

——這段嚴格來說是廢話,不用說大家都知道;但萬一遇到手電筒專家一樣只照別人不照自己的家夥……還是明確寫出來省事。

對問題二,這個要透過軟硬體配合來解決。

首先,成熟的硬體本身就非常非常的穩定,可以長時間執行不發生任何錯誤(但很多情況下,錯誤在所難免。比如電磁幹擾、機械振動、宇宙射線等等)。

其次,電腦硬體本身也可以內建校驗功能。比如伺服器經常用帶ECC校驗的記憶體條。

當硬體出錯時,它可以自動發現,然後透過中斷通知軟體處理(或自動嘗試恢復)。

然後,程式設計師在寫程式時,也會有很多錯誤檢查;一旦校驗出錯,程式便立即結束。

為了保證7X24小時安全性,業界有許多成熟的經驗甚至現成的框架。

比如,有一種硬體叫「看門狗(watchdog)」,它相當於一個自動遞減的計數器;如果軟體執行正常,那麽它就應該不停復位這個計數器,避免它遞減到零;如果計數器遞減到零,就說明軟體執行出錯了;於是芯片立即重新開機、然後軟體嘗試恢復執行——微控制器系統經常用到它。

當恢復時間足夠短時,人就不會覺察到系統曾經失敗過(但一般會記入日誌,以便分析故障原因);對很多系統,包括汽車/飛機/衛星上的各種系統,只要恢復時間足夠短(依設計允許的余量而定),也不會影響它們正常執行。

PC/伺服器一般不用簡陋的看門狗,它們有完善得多的錯誤發現/恢復機制。包括但不限於許可權檢查、錯誤中斷以及程式語言提供的結構化異常等等機制。

出錯了的程式會立即結束?你可能會說,不對啊,這樣服務不就中斷了嗎?

沒關系。我們可以準備一個監控程式,定時檢查,發現服務程式失敗就重新拉起它。

這個監控邏輯也可置於服務套用本身,然後同時執行兩個同樣的套用,讓它們互為備份。這就是著名的「雙行程相互監控、相互喚醒」——這個技術之所以如此著名,是因為有人拿它不辦正事,而是拿來做流氓軟體坑使用者了。嗯,好的技術落到壞人手裏就是這種下場。

對各種網站/搜尋引擎之類龐然大物,依靠單台伺服器的自我恢復能力已經不夠。這時候還可以透過雙機熱備份/多機熱備份(多台機器執行同樣的程式,只是其它機器只執行但不輸出結果;當其中一台出錯時,另一台便可立即頂替它)、集群計算(如Google透過map-reduce靈活組合使用數萬甚至更多台電腦,可自動分配任務、自動發現故障節點並遮蔽它)等等更為復雜、高級的架構,使得偶發故障不會影響它們的服務能力。

更進一步的,針對天災、戰爭甚至核戰爭等等罕見事件,人們還開發了「異地容災系統」,使得哪怕城市A的服務節點因重大事故無法服務,遠隔千裏的城市B的服務節點也可立即接替它,從而達到「不可摧毀」的目的。

化不可能為現實,這就是人類的智慧