一、link和lane
一組link就是連接兩個port之間的若干條lane,通常為x1/x2/x4/x8/x16。每條lane包含四根線tx_p/m,rx_p/m(兩組差分對)。
這里的port/component可以理解為一個設備,如果pcie支持bifurcation,則一個x16的接口可以連接多個port(2個x8/1個x16/4個x4/8個x2等),每個port中每條lane的linkID相同,不同port間的linkID不同。
二、PCIE體系結構說明
Root Complex:
RC是CPU和PCIE總線連接的接口。主要功能是完成存儲器域到PCIE總線域的地址轉換,隨著虛擬化技術的引入,RC功能也越來越復雜。RC把來自CPU的request轉化成PCIE的4類request(configuration、memory、I/O、message)并發送給下面的設備。
Switch & Bridge
Switch提供了分散/聚合的功能,它允許更多的設備接入到一個PCIE port。它扮演了數據包路由的功能。Bridge提供了一個轉換接口用來連接其他的總線,如PCI/PCI-X。這樣可以允許在PCIE的系統中接入一張舊的PCI設備。
PCIE Endpoint:
它只有一個上游端口,位于PCIE拓撲結構的樹的末端。他作為請求的發起者或者完成者。分為Legacy Endpoint、PCIE Endpoint和Root Complex Integrated Endpoint三種。
虛擬化技術:
虛擬化可以理解為一臺電腦運行了兩套系統,比如我們在windows下安裝linux虛擬機,兩套操作系統共用一套硬件,這要求每套系統的存儲域范圍不重疊,即對應了兩套地址轉換,將存儲器地址轉換為不同的物理地址,以此實現一套硬件運行多系統。虛擬化技術的核心是地址的映射和轉換。
三、PCIElane翻轉和PN翻轉
為了方便板子布線,允許lane翻轉
每條lane的差分信號也可翻轉。
lane翻轉和pn極性翻轉有以下要求:
1、PN翻轉無限制,可翻轉部分lane,也可只翻轉TX或RX
2、lane翻轉必須全部翻轉,不能部分翻轉
3、lane翻轉TX/RX必須同時翻轉,不能只翻轉TX或RX
4、lane翻轉和PN翻轉可以同時存在
四、吞吐量
PCIE gen1/2使用8b/10b編碼,編碼效率為0.8
PCIE gen3/4/5使用128b/130b≈0.985
PCIE 5.0x4的速率為:32Gbpsx4x128÷130÷8b/B≈15.754GB/s
?
五、PCIE枚舉圖
開機啟動時軟件會掃描系統中的所有PCIE設備(PCIE枚舉),對軟件而言,Bus/Device/Function是必不可少的。
Bus:在一個系統中存在1~256個bus; Device:在一條bus中存在1~32個設備; Function:每個設備有1~8個功能;
對于每個中間橋而言,三條Bus必須知道:Primary Bus/Secondary Bus/Subordinate Bus: Primary Bus:上游bus號 Secondary Bus:下游第一級bus號 Subordinate Bus:下游最大的bus號
?
六、PCIE設備與系統地址映射
PCIE設備有四種地址空間:
1、Configuration Space配置空間;
2、Memory Space存儲空間;
3、I/O Space空間,存在于老的PCI設備;
4、Message Space,PCIE設備新增,包含邊帶指示信號,比如中斷; 這些PCIE總線地址空間需要在初始化時就映射為存儲器域的存儲器地址空間,方便處理器訪問。
系統軟件對PCIE總線進行配置時,首先獲得BAR寄存器的初始化信息,之后根據處理器系統的配置,將合理的基地址寫入到相應的BAR寄存器中,這個過程在BIOS運行階段和OS啟動階段完成。
系統軟件還可以使用該寄存器獲得PCIE設備使用的BAR空間的長度,其方法是向BAR寄存器寫入0xFFFF_FFFF后再讀取該寄存器。
每個PCIE設備在BAR中描述自己需要占用多少地址空間,BIOS或OS通過所有設備的這些信息構建一張完整的地址映射表,描述系統中資源的分配情況,然后再合理地將地址空間配置給每個PCI設備。
BAR在bit0來表示該設備是映射到memory還是I/O,BAR的bit0是readonly的,就是說設備寄存器映射到memory還是I/O是由設備制造商決定的,其他人無法修改。
PCI的配置空間如上圖所示,每個設備的每個function都有獨立的配置空間,大小為256B,前64B為表頭,PCIE設備的配置空間拓展為4KB。 所有PCI的配置空間為: 16MB=256Busx32Device/Busx8Function/Devicex256B/Func 所有PCIE的配置空間為: 256MB=256Busx32Device/Busx8Function/Devicex4KB/Func X86架構地址又分為memory space和I/O space。
I/O space可以理解為直接寄存器讀寫地址空間,屬于X86早期產物,訪問速率較慢。 x86:32bit(4GB) x64:64bit(16EB) I/O space:16bit(64KB)
從上圖可知Memory地址前640KB為Conventional Memory,1MB間的為Boot ROM,中間一段為DRAM內存,其余的分配給PCI存儲器域。I/O地址中可以通過CF8-CFB和CFC-CFF訪問PCI的16MB配置空間,剩下的為各PCI設備映射的I/O地址空間。
對于PCIE而言,配置空間通過memory的方式映射(MMIO),不再通過I/O Map的方式訪問,這會占用一部分系統內存,也是內存用不滿的原因(還有主板上的集成顯卡/BIOS等也會占用內存)。
審核編輯:劉清
-
存儲器
+關注
關注
38文章
7511瀏覽量
163980 -
差分信號
+關注
關注
3文章
378瀏覽量
27719 -
虛擬機
+關注
關注
1文章
918瀏覽量
28263 -
LINUX內核
+關注
關注
1文章
316瀏覽量
21672 -
PCIe接口
+關注
關注
0文章
120瀏覽量
9742
原文標題:技術交流 | 協議類 — PCIE協議
文章出處:【微信號:IP與SoC設計,微信公眾號:IP與SoC設計】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論