[轉]老男孩讀PCIe之三:PCIe分層結構


來源: http://www.ssdfans.com/?p=3700


絕大多數的總線或者接口,都是采用分層實現的。PCIe也不例外,它的層次結構如下:

 
圖3.1

PCIe定義了下三層(彩色部分):事務層(Transaction Layer),數據鏈路層(Data Link Layer)和物理層(Physical Layer),每層職能是不同的,且下層是為上層服務的。分層設計的一個好處:如果層次分得夠好,接口版本升級時,硬件設計可能只需要改動某一層,其它層次可以保持不動。

PCIe傳輸的數據從上到下,都是以packet的形式傳輸的,每個packet都是有其固定的格式的。

事務層的主要職責是創建(發送)或者解析(接收)TLP (Transaction Layer packet),流量控制,QoS,事務排序等。

數據鏈路層的主要職責是創建(發送)或者解析(接收)DLLP(Data Link Layer packet),Ack/Nak協議(鏈路層檢錯和糾錯),流控,電源管理等。

物理層的主要職責是處理所有的Packet數據物理傳輸,發送端數據分發到各個Lane傳輸(stripe),接收端把各個Lane上的數據匯總起來(De-stripe),每個Lane上加擾(Scramble,目的是讓0和1分布均勻,去除信道的電磁干擾EMI)去擾(De-scramble),以及8/10或者128/130編碼解碼,等等。

今天只講個大概,這三層以后還會專門細講。這里先貼個這三層的細節圖,自己看:

 
圖3.2

數據從上到下,一層一層打包,上層打包完的數據,作為下層的原始數據,再打包。就像人穿衣服一樣,穿了內衣穿襯衫,穿了襯衫穿外套。

 
圖3.3

紅色的是TLP的格式,Header和Data是事務層上層給的信息,事務層給它尾巴上加個CRC校驗,就構成了一個TLP;這個TLP下傳到數據鏈路層,又被數據鏈路層頭上加了個包序列號,尾巴再加個CRC校驗,構成一個DLLP;然后DLLP下傳到物理層,頭上加個Start,尾巴加個End符號,把這些數據分派到各個Lane上,然后每個Lane上加擾碼,經8/10或128/130編碼,最后通過物理傳輸介質傳輸給接收方。

接收方物理層是最先接收到這些數據的,然后執行逆操作;在數據鏈路層,校驗序列號和LCRC,如果沒錯,剝掉序列號和LCRC,往事務層走;如果校驗出差,通知對方重傳;在事務層,校驗ECRC,有錯,數據拋棄,沒錯,去掉ECRC,獲得數據。整個過程猶如脫衣睡覺,外套脫了,襯衫脫了,內衣也脫了,光溜溜鑽進被窩。

 
圖3.4

和PCI數據裸奔不同,PCIe的數據是穿有衣服的。 PCIe數據以packet的形式傳輸,比起PCI冷冰冰的數據,PCIe的數據是鮮活有生命的。

每個Endpoint都需要實現這三層,每個Switch的每個Port也是需要實現這三層的:

 
圖3.5

上圖中,如果RC要與EP1通信,中間要經歷怎樣的一個過程?

 
圖3.6

如果把前述的數據發送和接收過程,我們通俗的叫做穿衣脫衣,那么,RC與EP1數據傳輸過程中,則存在好幾次這樣穿衣脫衣過程:RC跟數據穿好衣服,發送給Switch的上游端口,A為了知道該筆數據發送給誰,就需要脫掉該數據的衣服,找到里面的地址信息。衣服脫光后,Switch發現它是往EP1的,又幫它換了身新衣服,發送給端口B。B又不嫌麻煩的脫掉它的衣服,換上新衣服,最后發送給EP1。

Switch的主要功能是轉發數據,為什么還需要實現事務層?Switch必須實現這三層,因為數據的目的地信息是在TLP中的,如果不實現這一層,就無法知道目的地址,也就無法實現數據尋址路由。

 
圖3.7

今天就到這,關於這三層,以后還會展開講,敬請期待。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM