您的位置:首頁>正文

「博文連載」PCIe掃盲——PCIe匯流排實體層入門

前面的文章簡單的介紹了一些關於PCIe匯流排事務層(Transaction Layer)和資料連結層(Data Link Layer)的一些基本概念。 這篇文章來繼續聊一聊PCIe匯流排的最底層——實體層(Physical Layer)。 在PCIe Spec中, 實體層是被分為兩個部分單獨介紹的, 分別是實體層邏輯子層和實體層電氣子層, 其中後者一般都是採用SerDes來實現的。 本篇文章只是簡單地介紹一些PCIe實體層的基本概念, 關於實體層詳細、深入地介紹, 請關注我後續的連載博文。

由於實體層處於PCIe體系結構中的最底層, 所以無論是TLP還是DLLP都必須通過實體層完成收發操作。 來自資料連結層的TLP和DLLP都會被臨時放入實體層的Buffer中,

並被加上起始字元(Start & End Characters), 這些起始字元有的時候也被稱為幀字元(Frame Characters)。 具體如下圖所示:

注:這裡所說的TLP和DLLP指的是包的原始發送者發的包, 即TLP表示這個包的原始發送者為事務層, 而DLLP則為資料連結層。 但是TLP仍然會被資料連結層轉發, 並添加Sequence和LCRC。

實體層完成的一個重要的功能就是8b/10b編碼和解碼(Gen1 & Gen2),

Gen3及之後的PCIe則採用了128b/130b的編碼和解碼機制。 關於8b/10b, 這裡不再詳細地介紹了, 有興趣的可以去參考一下我之前的文章:http://blog.chinaaet.com/justlxy/p/5100052814。

實體層的另一個重要的功能時進行鏈路(Link)的初始化和訓練(Initialization & Training), 且是完全自動的操作, 並不需要人為的干預。 完成鏈路的初始化和訓練之後, 便可以確定當前PCIe設備的一些基本屬性:

· 鏈路的寬度(Link Width, x1還是x2, x4……)

· 鏈路的速率(Link Data Rate)

· Lane Reversal - Lanes connected in reverse order

· Polarity Inversion – Lane polarity connected backward

· Bit Lock Per Lane – Recovering the transmitter clock

· Symbol Lock Per Lane – Finding a recognizable position in the bit-stream

· Lane-to-Lane De-skew Within a Multi-Lane Link

實體層的電氣子層主要實現了差分收發對, 如下圖所示:

由於其速度很高, 因此採用的是交流耦合的方式(AC-Coupled), 說白了就是在信號線上加了電容Ctx, 此時低頻信號和直流信號都會被抑制。

需要注意的是, PCIe實體層處理可以轉發LTP和DLLP之外, 還可以直接發送命令集(Ordered Sets)。 之所以稱其為命令集, 是因為它並不是真正意義上的包(Packet), 因為實體層不會為其添加起始字元(Start & End Characters)。 並且命令集始於發送端的實體層, 結束語接收端的實體層。 雖然命令集沒有起始字元, 但是對於Gen1&Gen2版本的PCIe實體層來說, 會為其添加一個叫做COM的字元作為開始字元,

隨後跟著三個或者更多的資訊字元。

注:PCIe Gen3及之後的版本處理方式有所不同, 但是Gen3是向前相容Gen1 & Gen2的。 由於本文主要還是基於Gen2來介紹的, 所以關於Gen3的更多資訊, 大家可以自行參考PCIe Gen3 的Spec。

命令集(Ordered Sets)的收發示意圖, 如下圖所示:

命令集(Ordered Sets)的結構圖如下圖所示:

命令集主要用於鏈路的訓練操作(Link Training Process)。 此外, 命令集還用於鏈路進入或者退出低功耗模式的操作。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示