一種對cpld數據包進行有序存儲的方法及系統的制作方法
【技術領域】
[0001]本發明涉及基于PCI Express高速總線的數據存儲領域,尤其涉及一種針對由PCIExpress端點設備向主機內存發起DMA讀請求而返回的CPLD (Complet1n Data)數據包有序存儲的方法及系統。
【背景技術】
[0002]第一代I/O總線包括ISA、EISA、VESA和微通道(Micro Channel)總線,而第二代I/O總線則包括了 PC1、AGP和PC1-X。而PCI Express是用來互聯諸如計算和通信平臺應用中的外圍設備的第三代高性能I/O總線。
[0003]前兩代的I/O總線是并行總線,多臺設備共享一條總線。而第三代總線PCIExpress繼承了第二代總線體系結構最有用的特點,并且采用了計算機體系結構中新的研究成果,它能夠實現用于兩臺設備之間通信的串行、點對點類型的互連。多臺PCI Express設備可以使用交換器(Switch)實現互連。PCI Express總線規范目前已經得到了廣泛的應用,規范也從初始的PC1-E 1.0發展到目前的PC1-E 3.0版本,總線數據傳輸速度,也從開始的 2Gbits/ 每通道(PC1-E 1.0),提高到目前的 8Gbits/s (PC1-E 3.0)。
[0004]PCI Express規范定義了一種分層的設備設計體系結構,分別是處理層(Transact1n Layer)、數據鏈路層(Data Link Layer)和物理層(Physical Layer)。對于絕大多數應用PCI Express芯片或者基于PCI Express IP核進行開發的設計者來說,主要關注的內容集中在處理層。處理層主要完成以下事務:存儲器讀或寫,10讀或寫,配置讀或寫以及消息處理。
[0005]在目前很多高速數據處理應用場景中,針對存儲器的讀寫事物處理占主導地位。在基于PCI Express的高速數據傳輸應用中,PCI Express端點(Endpoint)設備要發揮出最大的數據傳輸效能,同時盡可能的減少主機CPU的占用率,就要采用DMA方式,就是由PCI Express端點設備主動地向主機內存發起DMA讀請求,然后接收傳輸進來的數據;或者由PCI Express端點設備主動地對主機內存發起DMA寫請求,以完成數據傳輸功能。
[0006]PCI Express設備適合大數據量的高速傳輸,正常工作時DMA傳輸的數據量比較大,所以每次DMA讀請求時的數據包也比較大。但是PCI Express規范有個限制,一次DMA讀請求所能允許的最大數據傳輸量不能超過Max Request Size,而Max Request Size在PCI Express端點設備中一般為512,最大不能超過4096字節。但是很多應用中,要求DMA讀傳輸的數據是這個參數的幾十倍甚至上百倍。
【發明內容】
[0007]本發明所要解決的技術問題是針對現有技術的不足,提供一種針對由PCIExpress端點設備向主機內存發起DMA讀請求而返回的CPLD (Complet1n Data)數據包有序存儲的方法及系統。
[0008]本發明解決上述技術問題的技術方案如下:
[0009]—種對CPLD數據包進行有序存儲的方法,包括如下步驟:
[0010]步驟1,利用標簽有序分發體制將PCI Express端點設備向主機內存發起的DMA讀請求分割成帶有連續標簽的多個子DMA讀請求發送至主機;
[0011 ] 步驟2,接收主機返回的CPLD數據包,根據CPLD數據包的標簽確定所述CPLD數據包在PCI Express端點設備的存儲基址;
[0012]步驟3,對帶有相同標簽的CPLD數據包進行偏移地址計算,確定所述CPLD數據包的偏移地址;
[0013]步驟4,根據確定的所述CPLD數據包在PCI Express端點設備的存儲基址和偏移地址對相應CPLD數據包進行存儲。
[0014]本發明的有益效果是:本發明建立了標簽有序分發體制,將大數據量DMA讀請求分割成多個子DMA讀請求,并以標簽標記,實現大數據量的DMA讀操作,但由于CPLD數據包的返回并非全部按照標簽的順序返回的,這樣對于采用FIFO存儲或者順序RAM存儲的方案就會存在數據存儲地址亂序的問題,本發明建立了針對完成數據包(CPLD)的同一標簽數據的偏移地址計算體制,實現了 PCI Express端點設備高速DMA讀和CPLD數據在RAM中有序存儲的高效高速無延遲存儲方案,大大提高了數據吞吐率。
[0015]在上述技術方案的基礎上,本發明還可以做如下改進。
[0016]進一步,步驟1的具體實現為:當PCI Express端點設備向主機內存發起DMA讀請求時,根據DMA讀請求包的大小和PCI Express總線規范中的Max Request Size的大小將DMA讀請求包分割成多個子DMA讀請求包,多個子DMA讀請求包對內存的尋址地址前后銜接,每個子DMA讀請求包按照發送順序依次被標簽有序分發體制分配以連續的標簽號碼Tag以區別不同的尋址空間。
[0017]采用上述進一步方案的有益效果:將一個大的DMA請求包分割成多個子DMA讀請求包,實現了數據的分散傳輸,進而實現了大數據量的DMA讀操作。
[0018]進一步,當PCI Express端點設備一次發起的DMA讀的尋址范圍超過所述標簽有序分發體制所有標簽的一次最大尋址量時,啟動標簽頁指針體制,以區分不同的尋址空間,其中每個標簽具有一個頁指針;當啟動所述標簽頁指針體制后,步驟2中根據CPLD數據包的標簽及相應標簽的頁指針確定所述CPLD數據包在PCI Express端點設備的存儲基址。
[0019]采用上述進一步方案的有益效果:基于標簽有序分發體制中的標簽數量有限,每一個標簽代表一定數量的尋址范圍,可能出現PCIE Express端點設備一次發起的DMA讀的尋址范圍超過了這一套標簽分發體制所能分發的最大數量,通過建立一套標簽頁指針體制,來區分不同的尋址空間,以擴大尋址范圍。
[0020]進一步,所述標簽頁指針體制具體為:如果一個標簽未被使用時,將該標簽對應的頁指針為零,如果該標簽被使用過一次,那么該標簽對應的頁指針自動加一。
[0021]進一步,所述步驟3的具體實現為:帶有相同標簽的第一個收到的CPLD數據包的偏移地址為0,第二個收到的CPLD數據包的偏移地址為第一收到的CPLD數據包的數據長度,第i個收到的CPLD的數據包的偏移地址為第一至第1-Ι個收到的CPLD數據包的數據長度之和,其中i為大于等于3的整數。
[0022]采用上述進一步方案的有益效果:每個標簽對應的子DMA讀請求獲取的數據可能需要多次CPLD才能接收到全部數據,這些多次返回的CPLD數據對應的是同一個標簽的DMA讀請求,但這些CPLD數據并不能保證是按照標簽的順序返回的,因此需要對這些先后返回的帶著相同標簽的CPLD數據進行偏移地址計算以實現準確的存儲。
[0023]—種對CPLD數據包進行有序存儲的系統,包括DMA請求發送模塊、存儲基址計算模塊、偏移地址計算模塊和數據包存儲模塊;
[0024]所述DMA請求發送模塊,其用于利用標簽有序分發體制將PCI Express端點設備向主機內存發起的DMA讀請求分割成帶有連續標簽的多個子DMA請求發送至主機;
[0025]所述存儲基址計算模塊,其用于接收主機返回的CPLD數據包,根據CPLD數據包的標簽確定所述CPLD數據包在PCI Express端點設備的存儲基址;
[0026]所述偏移地址計算模塊,其用于對帶有相同標簽的CPLD數據包進行偏移地址計算,確定所述CPLD數據包的偏移地址;
[0027]所述數據包存儲模塊,其用于根據確定的所述CPLD數據包在PCI Express端點設備的存儲基址和偏移地址對相應CPLD數據包進行存儲。
[0028]在上述技術方案的基礎上,本發明還可以做如下改進。
[0029]進一步,所述DMA請求發送模塊包括DMA請求分割單元和標簽分發單元;
[0030]所述DMA請求分割單元,其用于在PCI Express端點設備向主機內存發起DMA讀請求時,根據DMA讀請求包的大小和PCI Express總線規范中的Max Request Size的大小將DMA讀請求包分割成多個子DMA讀請求包,多個子DMA讀請求包對內存的尋址地址前后銜接;
[0031]所述標簽分發單元,其用于為子DMA讀請求包按照發送順序依次分配以連續的標簽號碼Tag以區別不同的尋址空間
[0032]進一步,還包括頁指針觸發模塊,其用于在PCI Express端點設備一次發起的DMA讀的尋址范圍超過所述標簽有序分發體制所有標簽的最大尋址量時,啟動標簽頁指針體制,以區分不同的尋址空間,其中每個標簽具有一個頁指針;當啟動所述標簽頁指針體制后,所述存儲基址計算模塊根據CPLD數據包的標簽及相應標簽的頁指針確定所述CPLD數據包的存儲基址。
[0033]進一步,所述標簽頁指針體制具體為:如果一個標簽未被使用時,將該標簽對應的頁指針為零,如果該標簽被使用過一次,那么該標簽對應的頁指針自動加一。
[0034]進一步,所述偏移地址計算模塊計算偏移地址具體為::帶有相同標簽的第一個收到的CPLD數據包的偏移地址為0,第二個收到的CPLD數據包的偏移地址為第一收到的CPLD數據包的數據長度,第i個收到的CPLD的數據包的偏移地址為第一至第1-Ι個收到的CPLD數據包的數據長度之和,其中i為大于