英特爾8086微處理器是在42年前的上個月推出的, 我們為此款晶片製作了一些高解析度的裸片以示紀念。8086是有史以來最有影響力的晶片之一。它開創了x86體系結構,該體系結構如今仍佔據著臺式機和伺服器計算的主導地位。
下圖是8086的裸片照片。在這張照片中,可以看到晶片的金屬層,大部分遮住了其下的矽片層。在裸片的邊緣,細細的綁定線提供了晶片上的焊盤和外部引腳之間的連接。(電源和接地焊盤各有兩根綁定線,以支持較大的電流)。該晶片在當時是很複雜的,包含29000個電晶體。
觀察晶片內部
大多數集成電路都是用環氧樹脂封裝的,為了觀察到內部的裸片,對於環氧樹脂封裝的晶片我們需要用到危險的酸來溶解封裝。為了避免這種情況,我採用陶瓷封裝的8086來替代。打開陶瓷封裝很簡單,就是用鑿子沿著縫隙敲擊,然後將陶瓷頂蓋彈開即可。
除去頂部,可以在中心看到矽晶片。晶片通過微小的綁定線連接到晶片的金屬引腳。這是40針DIP封裝,當時是微處理器的標準封裝。請注意,矽晶片本身僅佔晶片尺寸的一小部分。
我們採用冶金顯微鏡拍攝了數十張裸片的照片,並使用名為Hugin的程序將它們貼合成高解析度的圖像,文章開頭的照片顯示了晶片的金屬層,但該層隱藏了其下方的矽。
在顯微鏡下,可以看到8086部件號以及版權日期。綁定線連接到焊盤和位於頂部的一部分微碼ROM
對於下面的管芯照片,去除了金屬和多晶矽層,顯示了具有29,000個電晶體的底層矽。2 標籤是根據我的逆向工程顯示的主要功能塊。晶片的左側包含16位數據路徑:晶片的寄存器和算術電路。加法器和高位寄存器構成與外部存儲器通信的總線接口單元,而低位寄存器和ALU構成處理數據的執行單元。晶片的右側具有控制電路和指令解碼,以及控制每個指令的微碼ROM。
在下面的晶片照片中,去掉了金屬和多晶矽層,顯示了底層的矽和29,000個電晶體。標籤顯示了主要的功能塊。晶片的左側包含16位數據通路:寄存器和算術電路。加法器和上層寄存器構成與外部存儲器通信的總線接口單元,下層寄存器和ALU構成處理數據的執行單元。晶片的右側有控制電路和指令解碼,以及控制每條指令的微碼ROM。
8086的一個特點是指令預取,它通過在需要指令之前從內存中獲取指令來提高性能。這是由左上方的總線接口單元實現的,它可以訪問外部存儲器。高位寄存器包括8086的臭名昭著的段寄存器,它提供對比16位地址所允許的64 KB更大的地址空間的訪問。對於每次存儲器訪問,都添加了段寄存器和存儲器偏移量以形成最終的存儲器地址。為了提高性能,8086有一個單獨的加法器用於這些內存地址計算,而不是使用ALU。高位寄存器還包括六個字節的指令預取緩衝區和程序計數器。
晶片的左下角存放著執行單元,該單元用於執行數據操作。低位寄存器包括通用寄存器和堆棧指針等索引寄存器。16位ALU執行算術運算(加減法)、布爾邏輯運算和移位。ALU不執行乘法或除法,這些運算是通過一連串的移位和加/減法來完成的,所以速度相對較慢。
微碼計算機設計中最困難的部分之一就是創建控制邏輯,該邏輯用來告知處理器的每個部分如何執行每條指令。1951年,莫裡斯·威爾克斯(Maurice Wilkes)提出了微代碼的想法:代替由複雜的邏輯門電路構建控制邏輯,可以用稱為微代碼的特殊代碼代替控制邏輯。為了執行一條指令,計算機在內部執行一些更簡單的微指令,這些指令由微碼指定。使用微碼,構建處理器的控制邏輯成為編程任務,而不是邏輯設計任務。
微代碼在20世紀60年代的大型計算機中很常見,但早期的微處理器如6502和Z-80並沒有使用微代碼,因為早期的晶片沒有空間來存儲微代碼。但是,後來的8086和68000等晶片,利用晶片密度不斷增加的優勢,使用了微代碼。這使得8086可以實現複雜的指令(如乘法和字符串複製),而不會使電路更加複雜。缺點是微碼佔用了8086的很大一部分裸片;在裸片照片的右下角可以看到。
上面的照片顯示了微碼ROM的一部分。在顯微鏡下,可以看到微碼ROM的內容,並且可以根據每個位置上是否存在電晶體來讀取位。ROM由512條微指令組成,每條21位寬。每個微指令指定數據在源和目標之間的移動。它還指定了微操作,可以是跳轉,ALU操作,內存操作,微代碼子例程調用。微碼非常有效;一個簡單的指令(例如遞增或遞減)由兩個微指令組成,而更複雜的字符串複製指令則由八個微指令實現。
8086的歷史
通往8086的道路並不像你想像的那樣直接和有計劃。它最早的祖先是1970年的桌上型電腦/終端機Datapoint 2200。Datapoint 2200是在微處理器誕生之前,所以它使用的是由一塊布滿獨立TTL集成電路的電路板構建的8位處理器。Datapoint諮詢英特爾和德州儀器公司是否可以用一塊晶片取代那塊板子。複製Datapoint 2200的架構,德州儀器在1971年推出了TMX 1795處理器,而英特爾推出的是8008處理器(1972年)。然而,Datapoint拒絕了這些處理器,這是一個致命的決定。儘管德州儀器公司找不到TMX 1795處理器的客戶而放棄了它,但英特爾還是決定將8008作為產品出售,就此開創了微處理器市場。英特爾在8008之後又推出了改進的8080(1974)和8085(1976)處理器。
1975年,英特爾的下一個重大計劃是將8800處理器設計為1980年代英特爾的主要架構。由於計劃的高性能,該處理器被稱為「微型大型機」。它具有為Ada等高級語言設計的全新指令集,並在硬體級別支持面向對象的編程。不幸的是,該晶片當時過於雄心勃勃,大大落後於計劃。它最終在1981年推出(作為iAPX 432),性能令人失望,是一款商業失敗的產品。
由於iAPX 432進度落後,因此英特爾在1976年決定在iAPX 432就緒之前需要一個簡單的,權宜之計的處理器來銷售。英特爾迅速將8086設計成一個16位處理器,與1978年發布的8位80804有一定的兼容性。隨著1981年IBM個人電腦(PC)的推出,8086有了很大的突破。到1983年,IBM PC成為最暢銷的計算機,並成為個人計算機的標準。IBM PC中的處理器是8088,是8086的變種,採用8位總線。IBM PC的成功使8086體系結構成為仍然持續了42年的標準。
IBM PC為什麼選擇Intel 8088處理器?據最初的IBM PC工程師之一David Bradley博士說,關鍵因素是團隊對Intel開發系統和處理器的熟悉程度。(他們在較早的IBM Datamaster臺式計算機 中使用了Intel8085 。)另一位工程師Lewis Eggebrecht表示,Motorola 68000是值得競爭的產品,但其16位數據總線將大大增加成本(與8086一樣)。他還稱讚了英特爾更好的支持晶片和開發工具。
無論如何,使用8088處理器的決定鞏固了x86系列的成功。IBM PC AT(1984)升級到兼容但功能更強大的80286處理器。1985年,x86系列產品的80386移植到32位,然後在2003年採用AMD Opteron架構的移植到 64位。x86體系結構仍在通過AVX-512 矢量操作(2016)等功能進行擴展 。但是即使進行了所有這些更改,x86體系結構仍保留了與原始8086的兼容性。
電晶體
8086晶片採用了一種叫做NMOS的電晶體。可以將電晶體視為開關,控制電流在稱為源極和漏極的兩個區域之間流動。這種電晶體是通過在矽基底的區域摻雜雜質來製造具有不同電性能的 "擴散 "區域。電晶體由柵極激活,柵極由一種特殊類型的矽製成,稱為多晶矽,層疊在矽基板之上。電晶體通過上面的金屬層連接在一起,構建了完整的集成電路。現代的處理器可能有十幾層金屬層,而8086的金屬層只有一層。
下圖是矽的特寫照片,顯示了算術邏輯單元(ALU)的一些電晶體。摻雜的導電矽呈深紫色。白色條紋是多晶矽線穿過矽的地方,形成了電晶體的柵極。(23個電晶體形成7個門)電晶體的形狀很複雜,以使布局儘可能高效。此外,電晶體有不同的尺寸,以便在需要的地方提供更高的功率。請注意,相鄰的電晶體可以共享源極或漏極,從而使它們連接在一起。圓圈是矽層和金屬布線之間的連接(稱為過孔),而小方塊是矽層和多晶矽之間的連接。
8086中一些電晶體的特寫鏡頭,金屬和多晶矽層已在這張照片中去除。由於薄膜幹擾,摻雜的矽具有深紫色外觀。
結論
8086的本意是在英特爾發布他們的旗艦iAPX 432晶片之前,作為一個臨時性的臨時處理器,它是由一塊滿是TTL晶片的電路板構建的處理器的「後代」。但從這些不起眼的開始,8086的架構(x86)意外地最終主導了桌面和伺服器計算,直到現在。
雖然8086是一個複雜的晶片,但可以在顯微鏡下檢查單個電晶體。這裡有一張8086去除金屬和多晶矽後的高解析度照片,點擊查看大圖。