在介紹事務層之前,首先簡單地了解一下pcie匯流排的通訊機制。假設某個裝置要對另乙個裝置進行讀取資料的操作,首先這個裝置(稱之為requester)需要向另乙個裝置傳送乙個request,然後另乙個裝置(稱之為completer)通過completion packet返回資料或者錯誤資訊。在pcie spec中,規定了四種型別的請求(request):memory、io、configuration和messages。其中,前三種都是從pci/pci-x匯流排中繼承過來的,第四種messages是pcie新增加的型別。詳細的資訊如下表所示:
從表中我們可以發現,只有memory write和message是posted型別的,其他的都是non-posted型別的。所謂non-posted,就是requester傳送了乙個包含request的包之後,必須要得到乙個包含completion的包的應答,這次傳輸才算結束,否則會進行等待。所謂posted,就是requester的請求並不需要completer通過傳送包含completion的包進行應答,當然也就不需要進行等待了。很顯然,posted型別的操作對匯流排的利用率(效率)要遠高於non-posted型。
那麼為什麼要分為non-posted和posted兩種型別呢?對於memory writes來說,對效率要求較高,因此採用了posted的方式。但是這並不意味著posted型別的操作完全不需要completer進行應答,completer仍然可採用另一種應答機制——ack/nak的機制(在資料鏈路層實現的)。
pcie的tlp包共有以下幾種型別:
tlp傳輸的示意圖如下圖所示:
tlp在整個pcie包結構的位置如以下兩張圖所示:(第一張為傳送端,第二張為接收端)
其中,tlp包的結構圖如下圖所示:
圖中的tlp digest即ecrc(end-to-end crc),是可選項。此外,tlp的長度(包括其中的header、data和ecrc)是以dw(雙字,即四個位元組)為單位。
PCIe掃盲 PCIe匯流排事務層入門(一)
在介紹事務層之前,首先簡單地了解一下pcie匯流排的通訊機制。假設某個裝置要對另乙個裝置進行讀取資料的操作,首先這個裝置 稱之為requester 需要向另乙個裝置傳送乙個request,然後另乙個裝置 稱之為completer 通過completion packet返回資料或者錯誤資訊。在pcie...
PCIe掃盲 PCIe匯流排事務層入門(二)
前面的文章介紹了tlp的幾種型別以及tlp的包結構。這篇文章來詳細地聊一聊non posted transaction 包括ordinary read locked read和io configuration writes 與posted writes 包括memory writes和message...
第5章 PCIe匯流排的事務層
事務層是 pcie 匯流排層次結構的最高層,該層次將接收 pcie 裝置核心層的資料請求,並將其轉換為 pcie 匯流排事務,pcie 匯流排使用的這些匯流排事務在 tlp頭中定義。pcie 匯流排繼承了 pci pci x 匯流排的大多數匯流排事務,如儲存器讀寫 i o讀寫 配置讀寫匯流排事務,並...