上一篇我們把已經成為過去歷史的一部分的那些匯流排介面介紹完,接下來是時候回到現代了,從過去 20 年內的經驗我們大致上可以說這段歷史幾乎是重複著從大一統走向百家爭鳴,之後又因為太過複雜造成的麻煩而重新回歸大一統的循環,而目前正好是走到了大一統的時代。不過 PCI Express 也已經發佈超過十年了,或許此刻同時也是正要再次走向百家爭鳴的開始。
PCI Express
在 PCI 規範推出將近十年之後,人們意識到當年 ISA 末期的狀況似乎又重現了,甚至比當年還要更加複雜,光是 PCI 自己就有先後不同版本,還有使用不同電壓的問題,而後來為了顯示卡而另外設計的 AGP 某種程度上也重演了當年 PCI 末年衍伸出 VESA Local Bus 的歷史,甚至連當年 ISA 的後續延伸 EISA 這樣的歷史也在 PCI-X 的出現之下被重演了,於是重新統一匯流排介面的需求再次出現。
PCI Express 就是在這樣的背景下誕生的,與 PCI、AGP 一樣又是 Intel 主導 (Intel 在這幾年內關於規格標準制定方面特別活躍),開發階段中被稱為第三代 I/O (3GIO,命名來源是將 PCI 是為第二代 I/O,ISA 視為第一代 I/O),由 Intel 制定並轉交 PCI-SIG 進行審定作為 PCI 的後續標準發佈。
以 PCI 技術為底層基礎進行大改造
為了降低在軟體上需要的修改量,並且提高 PCI Express 能一口氣取代所有多種慣用介面的資本,所以 PCI Express 發展的時候使用了與 PCI 一致的通訊標準,不過除此之外基本上 PCI Express 與 PCI、PCI-X 已經大不相同,最明顯的差異就在於傳輸介面從原來的並列 (Parallel) 改為序列 (Serial),這和 IDE 升級到 SATA 的趨勢有點類似,所以 PCI Express 基本上在使用上與 PCI 是沒有直接相容性可言的,但由於在通訊標準上的一致,所以廠商可以很容易設計出橋接晶片在原生 PCI Express 介面上拉出 PCI 插槽來 (下圖左邊的 PCIe to PCI/PCI-X Bridge)。
從上面的拓樸圖中還可以看到 PCI Express 的另一個特性,不同於 PCI/PCI-X 是使用共享匯流排的設計,PCI Express 實際上比較接近 AGP,是採用點對點連線通道的方式組成,而且單一裝置可以使用複數條連線通道來達成更高的理論資料傳輸率 (例如顯示卡最多可以使用 16 條)。
可延伸性的通道設計
如同前面所說,PCI Express 的主要特色之一就是傳輸通道是可延伸的,就目前而言規格設計上有最窄是使用單一通道,最寬則可以一次使用 16 條通道,在 PCI Express 的插槽設計上可以很明顯看到這個特色,在防呆卡榫左側的 11 根針腳 x 2 面 (22 個觸點) 是共通的供電與系統管理匯流排,在防呆卡榫左側緊鄰的 2 根針腳 x 2 面 (4 個觸點) 則是用於控制時鐘頻率,這兩個部分不論是在 PCI Express x1,x4,x8,x16 上都是一樣的。
接下來從第 14 號針腳開始就是傳輸通道的部分,每個傳輸通道分別需要上行與下行各 2 根針腳 x 2 面 (4 個觸點) 組成,而在 x1 的結尾、x4 的結尾、x8 的結尾、x16 的結尾之前都額外設計了一到兩組接地。
而這樣的通道設計原則上是彈性且互相相容的,也就是將 x16 (最多支援 16 組通道) 的介面卡插到 x8、x4、x1 的插槽上基本上還是可以正常運作 (如果主機板的插槽是類似上圖這樣,沒有把右側封死的話),只是介面卡的性能會因為通道數量不夠而受到很大的影響 (資料傳輸變慢的關係)。
反過來說也是成立的,將 x1 的介面卡插到 x16 的插槽上是可以正常運作的,而且性能不會受到影響,但是插槽上實體拉線的剩下 15 個傳輸通道就用不到了,由於通道數通常有限所以一般而言我們會盡力避免這種配置。
這裡要特別提一下的是,近年來流行多顯示卡配置,但實際上處理器可以拉出來的 PCI Express 通道是有限的,因此在主機板上看到 x16 的插槽時其實不一定真的有拉出 16 條通道來 (例如上面這張 P6T Deluxe 的三條 PCI Express x16 就只能配置成 x16+x16+x1 或 x16+x8+x8 兩種),有時候第二、第三、第四顯示卡插槽雖然看起來都是 x16 的外型,但實際上其實只有拉 8/4/1 條通道 (仔細看可以看得出來,這類插槽的後半段可能都是沒有金屬觸點的),在這類主機板上要特別留意一號顯示卡插槽上一定要有裝顯示卡,才能發揮最高的性能。
序列點對點傳輸帶來大幅提升的理論資料傳輸率
前面提過 PCI Express 與 PCI 最大的差異在於 PCI Express 捨去過去的並列傳輸,改採序列訊號為基礎,並且捨去過去的多點共用匯流排架構改採點對點資料通道設計,這樣的特性主要是為了解決過去 PCI 使用並列訊號時必須做到每條訊號線路都能等長的問題 (其實等長只是簡單的說法,實際上是需要確保傳輸的時候不會因為速度落差造成訊號不同步產生扭曲的問題),讓線路設計變得更加簡單,而且可以很容易透過增加資料通道數量的方式來倍數提升資料傳輸速率,除此之外也解決了並列傳輸一直以來都有,而且隨著傳輸速率增加越來越嚴重的串音干擾問題 (其實理由跟從 IDE 轉換到 SATA 差不多)。
在改用序列傳輸技術再加上差動訊號的設計等改進之後,PCI Express 的運作時脈有了近乎瘋狂的提升,還記得前面討論 PCI、AGP 等介面的時候都是 33 / 66 MHz,最高也只看到 533 MHz 嗎?PCI Express 1.0 的傳輸時脈是 2.5 GHz (25 x 100 MHz),在 2006 年發佈的 PCI Express 2.0 中還直接提高一倍來到了 5 GHz (50 x 100 MHz)。
除了時脈以外,追求進一步提升資料傳輸率的手段
然而我們都知道運作時脈是不可能無限往上增加的,所以在設計 PCI Express 3.0 的時候就把腦筋動到了資料的編碼方式上,原先 PCI Express 1.0/2.0 使用的是 8b/10b 編碼法,也就是將原先占用 8 個 bit 的資料編碼為 10 個 bit,目的在於以增加冗餘資料的方式來達到降低資料誤傳時造成系統出錯的機率的目的,於是實際的編碼效率僅有 80%。
而到了 PCI Express 3.0 時改採 128b/130b 編碼法,也就是每 128 個 bit 的資料只搭配 2 個 bit 的冗餘,新的編碼法效率可以高達 98.46%,也就是用於冗餘資料而被「浪費掉」的資料傳輸率僅有 1.54 %,這使得規格制定者只需要將運作時脈拉高到 8 GHz 就可以實現頻寬兩倍成長的預期目標,而不需要直接撐上 10 GHz。
修訂版本 | 運作時脈 | 編碼方式 | 編碼效率 | 單通道傳輸率 | 單通道頻寬 | 最大傳輸率 | 最大頻寬 |
1.0 | 2.5 GHz | 8b/10b | 80% | 2.5 GT/s | 250 MB/s | 40 GT/s | 4 GB/s |
2.0 | 5 GHz | 8b/10b | 80% | 5 GT/s | 500 MB/s | 80 GT/s | 8 GB/s |
3.0 | 8 GHz | 128b/130b | 98.5% | 8 GT/s | 984.6 MB/s | 128 GT/s | 16 GB/s |
供電能力的提升
考慮到 PCI Express x16 主要用於顯示卡,而且顯示卡的供電需求越來越高,早在 AGP 的中後期就已經有需要外接 4-pin 電源的顯示卡出現 (上圖這張就是),到晚期甚至有需要兩個 4-pin 電源接頭 (傳統硬碟用的那種) 的顯示卡,顯然 AGP 的 25W 供電能力是遠遠不夠的,所以在設計 PCI Express 介面的時候就有特別考慮到這個問題,將 PCI Express x16 的供電能力一舉提高三倍,來到了 75W 之譜。
以 7600GT 為例,PCI Express 版本 (上圖) 基本上是不需要外接電源的,供電電路也相對簡單許多,而 AGP 版本除了多了一顆橋接晶片之外,還需要額外的外部電源 (下圖)。
不過呢,後來發生的事情大家都知道了,在 PCI Express 的時代開始之後,顯示卡的功率需求馬上就破百瓦了,所以現在的顯示卡通常都還是有外部輔助電源,而且電源供應器也發展出專門用於顯示卡的 6-pin 與 8-pin 電源接頭了,硬要說的話,當年對供電能力的強化其實並沒有如同預期發揮在滿足顯示卡需求上,倒是給了開發擴充卡時更加充裕的電源,使得一些相較於過去而言強化許多的擴充介面卡 (例如高性能的磁碟陣列卡) 得以成為可能。
PCI Express 的下一步
雖然 PCI Express 從 2004 年正式發佈到現在已經將近 12 個年頭了,但就目前我們所知道的消息,PCI Express 的發展還沒到尾聲,原先預定在今年要隨 Skylake 架構推出進軍消費性電腦市場的 PCI Express 4.0 已經被延期到 2017 年 (其實我個人是不看好在 2017 年有辦法釋出,很有可能要到 2018 或 2019 年,說起來最早的排程是下圖中的 2014~2015 年呢)。
PCI Express 4.0 的預期資料傳輸率將會比 PCI Express 3.0 再高出一倍,被認為這應該會是銅纜接觸技術的極限,接下來大概要往光纖發展了,沒有意外的話 PCI Express 4.0 應該會是 PCI Express 的最後一次大改版。