portant;">PCIe還在很多方面和PCI有很大不同:
portant;">1. PCI是總線結(jié)構(gòu),而PCIe是點對點結(jié)構(gòu)。一個典型的PCIe系統(tǒng)框圖如下:
portant;">
portant;">一個典型的結(jié)構(gòu)是一個root port和一個endpoint直接組成一個點對點連接對,而Switch可以同時連接幾個endpoint。一個root port和一個endpoint對就需要一個單獨的PCI bus。而PCI是在同一個總線上的設(shè)備共享同一個bus number。過去主板上的PCI插槽都公用一個PCI bus,而現(xiàn)在的PCIe插槽卻連在芯片組不同的root port上。
portant;">2. PCIe的連線是由不同的lane來連接的,這些lane可以合在一起提供更高的帶寬。譬如兩個1lane可以合成2lane的連接,寫作x2。兩個x2可以變成x4,直到x16,往往給帶寬需求的顯卡使用。
portant;">3. PCI配置空間從256B擴展為4k,同時提供了PCIe memory map訪問方式,我們在軟件部分會詳細介紹。
portant;">4.PCIe提供了很多特殊功能,如Complete Timeout(CTO),MaxPayload等等幾十個特性,而且還在隨著PCIe版本的進化不斷增加中,對電源管理也提出了單獨的State(L0/L0s/L1等等)。這些請參見PCIe 3.0 spec,本文不再詳述。
portant;">5. 其他VC的內(nèi)容,和固件理解無關(guān),本文不再提及。INT到MSI的部分會在將來介紹PC中斷系統(tǒng)時詳細講解。
portant;">
portant;">PCIe 1.0和2.0采用了8b/10b編碼方式,這意味著每個字節(jié)(8b)都用10bit傳輸,這就是為什么2.5GHz和5GHz時鐘,每時鐘1b數(shù)據(jù),結(jié)果不是312.5MB/s和625MB/s而是250MB/s和500MB/s。PCIe 3.0和4.0采用128b/130b編碼,減小了浪費(overhead),所以才能在8GHz時鐘下帶寬達到1000MB/s(而不是800MB/s)。即將于今年發(fā)布的PCIe 4.0還會將頻率提高一倍,達到16GHz,帶寬達到2GB/s每Lane。
portant;">
后記
portant;">對于一般用戶來說,PCIe對用戶可見的部分就是主板上大大小小的PCIe插槽了,有時還和PCI插槽混在一起,造成了一定的混亂,其實也很好區(qū)分: