Tillamook

**奔騰**是 Intel 於 1993 年 3 月 22 日推出的微處理器，是奔騰系列品牌中的第一款 CPU。 它是與 80486 兼容的指令集，但它是一種全新的、非常不同的微架構設計。 P5 奔騰是第一個超純量 x86 微架構，也是世界上第一個量產的超純量微處理器。它包括雙整數管道、更快的浮點單元、更寬的數據匯流排、單獨的代碼和數據緩存以及許多其他技術和功能，以提高性能並增強安全性。

它被認為是 8086 兼容處理器系列中的第五代主要產品，其代號和微架構稱為 _P5_ 。與自奔騰以來英特爾的所有新處理器一樣，P5 添加了一些新指令以增強特定類型工作負載的性能。

奔騰是第一個為類似於大型 IBM 大型計算機的多處理提供強大硬體支持的 Intel x86 處理器。這種新能力在之前的 x86 處理器代和競爭對手的處理器中是不存在的。
為了發揮其最大潛力，必須優化編譯器以利用新的超純量雙流水線和需要重新編譯的應用程式提供的指令級並行性。英特爾花費大量精力和資源與開發工具供應商，主要的獨立軟體供應商 (ISV) 和作業系統 (OS) 公司合作，在產品發布之前針對奔騰優化他們的產品。

1996 年 10 月，推出了類似的**奔騰 MMX** ，採用 MMX 指令集、擁有更大的緩存和其他一些增強功能補充了相同的基本微架構。

競爭對手包括摩托羅拉 68040 、摩托羅拉 68060 、PowerPC 601 ，以及 SPARC、MIPS 、Alpha 系列，其中大多數有時也使用超純量有序雙指令流水線配置。

英特爾在 2000 年初停止了 P5 奔騰 處理器（自 1997 年奔騰 II 發布以來作為更便宜的產品銷售），轉而使用 Celeron 處理器。

## 開發

P5 微架構是由曾經設計 386 和 486 的 Santa Clara 團隊設計的。 設計工作始於 1989 年； 團隊決定使用具有片上緩存、浮點和分支預測的超純量架構。初步設計於 1990 年成功模擬，隨後設計了布局。到了這個時候，這個團隊已經有幾十名工程師了。該設計於 1992 年 4 月流片（轉移到矽片上），此時 beta 測試開始。 到 1992 年年中，P5 團隊已有 200 名工程師。 英特爾最初計劃於 1992 年 6 月在 PC Expo 貿易展上展示 P5，並於 1992 年 9 月正式宣布該處理器， 但設計問題迫使演示被取消，晶片的正式推出也被推遲直到 1993 年春天。 

最初 386 的首席設計師約翰・克勞福德 (John H. Crawford) 與管理架構團隊的唐納德・阿爾珀特 (Donald Alpert) 共同管理了 P5 的設計 。 Dror Avnon 管理了 FPU 的設計。 Vinod K. Dham 是 P5 計劃的總經理。 

英特爾的 Larrabee 多核架構項目使用源自 P5（P54C） 的處理器內核，並通過使用多執行緒、 64 位指令和 16 寬矢量處理單元進行了增強。 早期 Atom 處理器內核中採用的英特爾低功耗 Bonnell 微架構也使用類似於 P5 的有序雙流水線。 

因為數字不能註冊商標，所以英特爾將此系列命名為奔騰而非 80586 

### 對 i486 的改進

P5 微架構比之前的 i486 架構帶來了幾個重要的進步。

* _性能_：
  * 超純量架構 —— 奔騰有兩條數據路徑（流水線），在許多情況下允許它在每個時鐘周期完成兩條指令。主管（U）可以處理任何指令，而另一個（V）可以處理最常見的簡單指令。一些精簡指令集計算機 (RISC) 的支持者認為，「複雜的」x86 指令集可能永遠不會通過緊密流水線的微架構實現，更不用說雙流水線設計了。但 486 和奔騰 證明了這確實是可能和可行的。
  * 64 位外部數據匯流排使每次內存訪問時可能讀取或寫入的信息量翻倍，因此奔騰加載其代碼緩存的速度比 80486 快；它還允許更快地訪問和存儲 64 位和 80 位 x87 FPU 數據。
  * 更快的浮點單元。一些指令顯示出巨大的改進，尤其是 FMUL，其吞吐量比 80486 FPU 高出 15 倍。 奔騰還能夠與普通（算術或加載 / 存儲）FPU 指令並行執行 FXCH ST (x) 指令。
  * 與 80486 相比，四輸入地址加法器使奔騰能夠進一步減少地址計算延遲。奔騰可以在單個周期內計算_段基址_ + _基址暫存器_ + _縮放暫存器_ + _立即偏移量_的全尋址模式； 而 486 隻有一個三輸入地址加法器，因此必須在兩個周期之間進行此類計算。
  * 微碼可以使用兩條流水線來啟用自動重複指令，例如 REP MOVSW 每個時鐘周期執行一次迭代，而 80486 每次迭代需要三個時鐘（最早的 x86 晶片明顯多於 486）。此外，在解碼階段優化對第一個微碼字的訪問有助於使幾個頻繁的指令執行得更快，尤其是在它們最常見的形式和典型情況下。例子有：（486→奔騰，時鐘周期）：CALL（3→1），RET（5→2），移位 / 旋轉（2-3→1）。
  * 更快、完全基於硬體的乘法器使 MUL 和 IMUL 等指令比 80486 快幾倍（且更可預測）；對於 32 位操作數，執行時間從 13 到 42 個時鐘周期減少了到 10-11 個。
  * 分支預測
* _其他特點_：
  * 通過引入基於處理器的調試埠增強了調試功能（請參閱《開發人員手冊》第 1 卷中的_奔騰處理器調試_）。
  * 增強的自檢功能，例如 L1 緩存奇偶校驗檢查（參見開發人員手冊第 1 卷中的_緩存結構_）。
  * 新指令：CPUID、CMPXCHG8B、RDTSC、RDMSR、WRMSR、RSM。
  * 測試暫存器 TR0-TR7 和訪問它們的 MOV 指令被取消。
* 後來的**奔騰 MMX** 還添加了 MMX 指令集，這是一種基本的整數_單指令、多數據_(SIMD) 指令集擴展，用於多媒體應用程式。 MMX 不能與 x87 FPU 指令同時使用，因為暫存器被重用（以允許快速上下文切換）。更重要的改進是指令和數據緩存大小翻了一番，以及為了獲得更好的性能而做出的一些微架構更改。

奔騰可以每秒執行超過 1 億條指令 (MIPS)， 75MHz 模型在某些基準測試中能夠達到 126.5 MIPS。 在普通基準測試中，奔騰架構的每個時鐘周期通常可以提供略低於 486 處理器性能的兩倍。最快的 80486 部件（使用略有改進的微架構和 100MHz 操作）幾乎與第一代 奔騰一樣強大，而 AMD Am5x86 在純 ALU 性能方面與 奔騰 75 大致相當。

部分 60-100MHz 的早期版本 P5 奔騰處理器在浮點單元中存在問題，導致某些除法運算的結果不正確（但此問題可預測）。這個漏洞是由維吉尼亞州林奇堡學院的 Thomas Nicely 教授於 1994 年發現的，它被廣泛稱為奔騰 FDIV 漏洞，並讓英特爾顏面掃地，該公司隨後啟動了一個換貨計劃來更換有故障的處理器。

1997 年，發現了另一個錯誤，它可能允許惡意程序在沒有任何特殊權限的情況下使系統崩潰，即「 F00F 錯誤」。所有 P5 系列處理器都受到了影響，並且沒有發布任何已修復此問題的 P5 處理器，但是現代作業系統已經修補了此錯誤。

## 核心和後續產品

奔騰是英特爾在 1990 年代中期用於個人計算機的主要微處理器。原始設計在更新的處理器中重新實現，並添加了新功能以保持其競爭力，並針對可攜式計算機等特定市場推出了其他變體。因此，P5 微體系結構有幾種變體。

### P54C

第一個奔騰微處理器內核的代號為「P5」。它的產品代碼是 80501。80501 有兩個版本，指定運行在各 60 兆赫和 66MHz，皆使用 Socket 4 。 奔騰 的第一個實現使用傳統的 5 伏電源（源自通常的電晶體 - 電晶體邏輯 (TTL) 兼容性要求）。它包含 310 萬個電晶體，測得 16.7 毫米乘 17.6mm，面積為 293.92 毫米 2 。 它使用 0.8μm 雙極互補金屬氧化物半導體 (BiCMOS) 工藝。 與隨後緊跟的型號相比，80851 的 5 伏設計導致其工作頻率的能耗相對較高。

1994 年 P5 的後續型號的是 P54C (80502)，其版本指定為各版本在 75、90 或 100MHz 運行，使用 3.3 伏電源和 Socket 5 ，這是第一個在 3.3 伏電壓下運行的奔騰處理器，降低了能耗，但需要在主板上進行電壓調節。與時鐘頻率較高的 486 處理器一樣，它使用內部時鐘倍頻器，讓內部電路以比外部地址和數據匯流排更高的頻率工作，但是由於物理限制，其調節外部頻率更加複雜和麻煩。它還允許雙向多處理，並具有集成的本地 APIC 和新的電源管理功能。它包含 330 萬個電晶體，面積 163 個平方毫米。 它使用 BiCMOS 製程製造。

### P54CQS

1995 年初，P54C 的的後續產品是 P54CQS，其運行速度為 120MH。它使用 0.35μmBiCMOS 工藝，是第一個以 0.35 微米工藝製造的 P5 處理器。 它的電晶體數量與 P54C 相同，儘管工藝較新，但它的晶片面積也相同。晶片使用引線鍵合連接到封裝，僅允許沿晶片邊緣連接。因為導線的長度有限制，而且晶片的邊緣會遠離封裝上的焊盤，所以較小的晶片需要重新設計封裝，。此問題解決方案是保持晶片尺寸不變，保留現有的焊盤環，只減小奔騰邏輯電路的尺寸，使其能夠實現更高的時鐘頻率。 

### P54CS

P54CQS 緊隨其後的是 P54CS，它在 133、150、166 和 200MHz 下運行，並引入了 Socket 7 。它包含 330 萬個電晶體，晶片面積為 90 mm 2 並以 0.35μm BiCMOS 工藝生產。

### P24T

用於 486 系統的 P24T 奔騰 OverDrive 於 1995 年發布，基於 3.3V 0.6μm 製程，使用 63 或 83 MHz 時鐘。由於這些處理器使用 Socket 2 / 3 ，因此必須進行一些修改以補償 486 主板的 32 位數據匯流排和較慢的板載 L2 緩存。因此，他們配備了 32KB 的 L1 緩存（是 P55C 之前 奔騰 CPU 的兩倍）。

### P55C

P55C（或 80503）由位於以色列海法的英特爾研發中心開發。它以 **採用 MMX 科技的奔騰處理器** 的名字出售（通常簡稱為**奔騰 MMX** ）；儘管它基於 P5 內核，但它具有一組新的 57 條「MMX」指令，旨在提高多媒體任務的性能，例如編碼和解碼數字媒體數據。 奔騰 MMX 系列於 1996 年 10 月 22 日宣布，並於 1997 年 1 月發布。 

新指令適用於新的數據類型：8 個 8 位整數、四個 16 位整數、兩個 32 位整數或一個 64 位整數的 64 位壓縮向量。因此，例如，PADDUSB（Packed ADD Unsigned Saturated Byte）指令將兩個向量相加，每個向量包含八個 8 位無符號整數，按元素計算；每個溢出的加法都會_飽和_，產生 255，這是可以用一個字節表示的最大無符號值。這些相當專業的指令通常需要程式設計師進行特殊編碼才能使用。

內核的其他變化包括一個 6 級管道（與 P5 上的 5 個）和一個返回堆疊（首先在 Cyrix 6x86 上完成）和更好的並行性、改進的指令解碼器、16KB L1 數據緩存 + 16KB L1 指令緩存，兩者都有 4 路關聯性（與 P5 上 2 路的 8KB L1 數據 / 指令相比），4 個寫入緩衝區現在可由任一管道使用（與一個對應於 P5 上的每個管道）和改進的分支預測器取自 奔騰 Pro， 具有 512 個條目的緩衝區（與 P5 上的 256 個相比）。 

它包含 450 萬個電晶體，面積為 140 平方毫米 。該過程具有四個互連級別。 

雖然 P55C 仍然與 Socket 7 兼容，但為晶片供電的電壓要求與標準的 Socket 7 規格不同。在 P55C 標準建立之前為 Socket 7 製造的大多數主板不符合該 CPU 正常運行所需的雙電壓軌（2.8 伏核心電壓，3.3 伏輸入 / 輸出 (I/O) 電壓）。英特爾通過 OverDrive 升級套件解決了這個問題，該套件採用具有自己電壓調節功能的內插器。

### Tillamook

奔騰 MMX 筆記本 CPU 使用了一個固定 CPU 的_移動模塊_。該模塊是一塊印刷電路板 (PCB)，CPU 以較小的形式直接連接到其上。模塊卡在筆記本主板上，通常會安裝一個散熱器並與模塊接觸。隨著 0.25μm _Tillamook_ Mobile Pentium MMX（以俄勒岡州的一個城市命名）的推出，該模塊還添加了 430TX 晶片組以及系統的 512 KB 靜態隨機存取存儲器 (SRAM) 高速緩存。

## 型號和變體

## 關聯閱讀

* IA-32 指令集架構 (ISA)

### 競爭對手

* AMD K5, AMD K6
* Cyrix 6x86
* WinChip C6
* NexGen Nx586
* Rise mP6

## 參考

* CPU-Collection.de （頁面存檔備份，存於網際網路檔案館） - Intel Pentium 圖像和描述
* Plasma 在線 Intel CPU 識別 （頁面存檔備份，存於網際網路檔案館）
* Pentium Timeline 項目 （頁面存檔備份，存於網際網路檔案館）Pentium Timeline 項目映射了已知的每個 s-spec 中最古老和最年輕的晶片。數據顯示在交互式時間線中。

### 英特爾數據表

* 奔騰 (P5) （頁面存檔備份，存於網際網路檔案館）
* 奔騰 (P54) （頁面存檔備份，存於網際網路檔案館）
* 奔騰 MMX (P55C) （頁面存檔備份，存於網際網路檔案館）
* 移動奔騰 MMX (P55C) （頁面存檔備份，存於網際網路檔案館）
* 移動奔騰 MMX (Tillamook) （頁面存檔備份，存於網際網路檔案館）

### 英特爾手冊

這些官方手冊提供了奔騰處理器及其特性的概述：

* 奔騰處理器系列開發人員手冊奔騰處理器（第 1 卷） （英特爾訂單號 241428）
* 奔騰處理器家族開發者手冊第 2 卷：指令集參考 （頁面存檔備份，存於網際網路檔案館）（Intel 訂單號 243191）
* 奔騰處理器家族開發者手冊第 3 卷：架構和編程手冊（Intel 訂單號 241430）