AMD FPGA自帶PCIE硬核,實現(xiàn)了PCIE協(xié)議,把串行數(shù)據(jù)轉(zhuǎn)換為并行的用戶數(shù)據(jù),以UltraScale系列FPGA為例,其支持Gen1.02.03.04.0,1~16 Lanes,如下圖所示:
另外當(dāng)前最新7nm系列器件Versal? ACAP可支持到PCIE Gen5.0,單個Lane可達32G的線速率,如下圖所示:
1.1 PCIE IP功能介紹
用戶接口采用AXI接口實現(xiàn)PCIE TLP報文收發(fā),從而完成PCIE傳輸事務(wù)的收發(fā),最終實現(xiàn)PCIE的各種數(shù)據(jù)傳輸模式,系統(tǒng)架構(gòu)如下圖所示:
圖左側(cè)為FPGA PCIE IP,實現(xiàn)了PCIE協(xié)議,其與用戶邏輯的數(shù)據(jù)交互主要通過AXI CQ,CC,RQ,RC四個接口,可以實現(xiàn)PCIE上行和下行的數(shù)據(jù)傳輸。
1.2 PCIE協(xié)議TLP報文介紹
使用PCIE IP用戶需要了解PCIE協(xié)議,至少了解TLP報文的構(gòu)造,如下圖所示為32位地址寫請求TLP報文:
R:保留位,一般填0;
Fmt:報文長度類型,指示當(dāng)前TLP報文是3DW長度還是4DW長度(此處主要是跟地址位寬相關(guān),PCIE協(xié)議可支持32位地址和64位地址);
Type:包類型,指示包括Mrd(讀數(shù)據(jù))、Mwr(寫數(shù)據(jù))、Cfg(配置PCIe)、Msg(消息事務(wù))、Cpl(讀地址數(shù)據(jù)請求后返回的數(shù)據(jù)包);
TC:傳輸優(yōu)先級,數(shù)值越大表示優(yōu)先級越高;
Attr:包屬性,指示當(dāng)前包是順序或者是亂序,cache一致性等;
TH:PCIe V2.1 總線規(guī)范引入的一個重要功能。TLP 的發(fā)送端可以使用 TPH 信息,通知接收端即將訪問數(shù)據(jù)的特性,以便接收端合理地預(yù)讀和管理數(shù)據(jù),一般很少應(yīng)用;
TD:指示接收端是否需要做ECRC校驗;
EP:指示當(dāng)前TLP包的有效性;
AT:地址種類,與 PCIe 總線的地址轉(zhuǎn)換相關(guān);
Length:指示TLP長度;
Requester ID:請求者ID,包括PCIe設(shè)備的總線號(Bus Number)、設(shè)備號(Device Number)和功能號(Function Number),通過該ID可以找到對應(yīng)的目標(biāo)設(shè)備;
Tag:數(shù)據(jù)包標(biāo)簽,可以指示當(dāng)前TLP數(shù)據(jù)包是屬于哪一組數(shù)據(jù)中分拆的數(shù)據(jù)塊;
Last DW BE:指示最后一個DW中有效的字節(jié),主要是針對在傳輸數(shù)據(jù)粒度比較小的情況,比如最小粒度為1字節(jié);
1st DW BE:指示第一個DW中有效的字節(jié)。
1.3 PCIE IP邏輯設(shè)計
用戶在實現(xiàn)PCIE數(shù)據(jù)傳輸功能時可通過上圖中AXI CQ,CC,RQ,RC四個接口來完成各種PCIE事務(wù)的數(shù)據(jù)收發(fā):
RQ:請求者請求接口,通常是主機向終端設(shè)備發(fā)送數(shù)據(jù)傳輸請求;
RC:請求者完成接口,通常是終端設(shè)備向主機發(fā)送需要的返回數(shù)據(jù);
CQ:完成者請求接口,通常是終端設(shè)備向主機發(fā)送數(shù)據(jù)傳輸請求;
CC:完成者完成接口,通常是主機向終端設(shè)備發(fā)送需要的返回數(shù)據(jù);
用戶需要通過這4個接口構(gòu)造TLP報文可以實現(xiàn)從主機到終端或者終端到主機的訪問請求和相應(yīng)的數(shù)據(jù)傳輸,下面是主機向終端發(fā)起寫數(shù)據(jù)請求的時序:
用戶在邏輯設(shè)計時可以先通過右鍵IP生成一個example工程,工程里面就有構(gòu)造TLP報文的代碼,用戶可以在這個工程代碼上修改TLP報文的相關(guān)數(shù)據(jù)來實現(xiàn)具體的數(shù)據(jù)傳輸需求。
二、AMD PCIE DMA功能實現(xiàn)
AMD PCIE DMA功能主要是通過XDMA IP來實現(xiàn),其作用本質(zhì)上是通過這幾個接口實現(xiàn)PCIE DMA傳輸流程,用戶不需要關(guān)注PCIE TLP報文的構(gòu)造細節(jié),只需要通過XDMA的AXI接口完成數(shù)據(jù)傳輸即可,如下圖所示:
用戶只需關(guān)注AXI用戶接口的邏輯設(shè)計,通過該接口就可以實現(xiàn)DMA傳輸。另外,AXI用戶接口包括MM接口和ST兩種接口,MM接口是可以直接對接內(nèi)存,其包括了地址控制,可以直接實現(xiàn)內(nèi)存讀寫。
2.1 XDMA AXI-MM接口實現(xiàn)DMA傳輸
AXI-MM接口的操作相對簡單,其與用戶邏輯對接的接口為標(biāo)準(zhǔn)的AXI接口,包括了地址信息,可以直接對接內(nèi)存,最簡單的方式就是例化一個AXI接口的RAM直接對接,PC端就可以直接訪問該RAM,如下圖所示:
AXI-MM接口主要應(yīng)用場景是直接訪問FPGA內(nèi)存,但對于視頻流,采集數(shù)據(jù)流等場景,特別是需要用到多通道的場景通常采用ST接口會更加方便。
2.2 XDMA ST接口實現(xiàn)DMA傳輸
ST(AXI4-Stream)接口是實現(xiàn)數(shù)據(jù)流傳輸接口,用于傳輸連續(xù)的數(shù)據(jù)流,比如視頻數(shù)據(jù)流,特別是在實現(xiàn)多通道DMA的情況下通常會采用該接口,如下圖所示:
S_AXIS_C2H是終端設(shè)備向主機發(fā)送數(shù)據(jù)接口,S_AXIS_H2C是主機向終端設(shè)備發(fā)送數(shù)據(jù)接口,均為AXI Stream接口,只實現(xiàn)數(shù)據(jù)流傳輸,典型特征是不傳輸?shù)刂罚?a target="_blank">端口如下圖所示:
其時序跟上述PCIE IP的AXI接口類似,所以,通過XDMA的ST接口可以很方便實現(xiàn)數(shù)據(jù)流傳輸,只需要跟PC驅(qū)動程序配對好地址和長度信息,邏輯設(shè)計只需要通過ST接口收發(fā)數(shù)據(jù)。
2.3 DMA邏輯設(shè)計方法
邏輯與主機上層軟件實現(xiàn)DMA數(shù)據(jù)傳輸主要有查詢和中斷兩種方式,以ST接口為例,邏輯可以通過AXI LITE接口實現(xiàn)PC的寄存器訪問,PC可以通過查詢寄存器來確定是否可以啟動DMA下發(fā)數(shù)據(jù),或者通過發(fā)起DMA獲取邏輯需要上傳的數(shù)據(jù),邏輯根據(jù)當(dāng)前數(shù)據(jù)需要上傳或者允許PC下發(fā)數(shù)據(jù)的具體情況來設(shè)置寄存器的狀態(tài)。
中斷模式首先要在例化XDMA IP時要選擇一個中斷,IP自動生成一個可供用戶產(chǎn)生中斷的接口,時序如下圖所示:
用戶產(chǎn)生中斷的方法很簡單,只需要拉高usr_irq_req,等待usr_irq_ack拉高即可產(chǎn)生中斷。需要注意的是當(dāng)usr_irq_ack拉高時用戶不能立刻把usr_irq_req拉低,因為此刻不能確定PC已經(jīng)響應(yīng)并完成中斷處理,最簡單的方式是設(shè)置一個清中斷寄存器,PC通過向這個寄存器寫1來通知邏輯,中斷事務(wù)已經(jīng)被處理完成。
另外,PCIE協(xié)議支持3種中斷:
INTx中斷:主要是為了兼容PCI設(shè)備,是電平觸發(fā)中斷;
MSI中斷:消息中斷,PCIE設(shè)備通過構(gòu)造對應(yīng)的中斷消息發(fā)送到主機,從而觸發(fā)中斷;
MSI-X中斷:是MSI中斷的擴展,可以通過中斷向量表的方式把中斷個數(shù)擴展到2048個;
當(dāng)PC啟動DMA下發(fā)數(shù)據(jù)時,XDMA IP會通過H2C接口向邏輯發(fā)送數(shù)據(jù),邏輯可以通過s_axis_h2c_tready信號來決定是否允許數(shù)據(jù)下發(fā);當(dāng)邏輯向PC上傳數(shù)據(jù)時可通過C2H接口向PC傳輸數(shù)據(jù),在發(fā)送數(shù)據(jù)前邏輯需要向PC產(chǎn)生一個中斷,PC檢測到中斷后就會啟動DMA上傳數(shù)據(jù),邏輯側(cè)看到的是s_axis_c2h_tready信號拉高,說明邏輯可以開始通過C2H接口發(fā)送數(shù)據(jù)給PC。所以,整個DMA傳輸都是由PC發(fā)起的,無論是上傳還是下發(fā)數(shù)據(jù),邏輯只是被動完成數(shù)據(jù)傳輸。
值得注意的是當(dāng)使用多通道DMA時每個通道的操作是完全獨立的,包括ST接口和中斷都是獨立的,相關(guān)的寄存器用戶最好也采用獨立的寄存器來實現(xiàn)與PC的交互。
責(zé)任編輯:彭菁
-
FPGA
+關(guān)注
關(guān)注
1643文章
21987瀏覽量
615104 -
amd
+關(guān)注
關(guān)注
25文章
5573瀏覽量
136026
發(fā)布評論請先 登錄
基于AMD Versal器件實現(xiàn)PCIe5 DMA功能

基于PCIE(mcap)的部分可重構(gòu)實現(xiàn)方案

基于Xilinx V6的PCIE DMA高速傳輸模塊
Xilinx PCIe Master DMA設(shè)計
PCIe DMA設(shè)計實現(xiàn)
關(guān)于PCIE DMA操作的一個疑問
尋求fpga大牛開發(fā)一個簡單的fpga pcie設(shè)備
采用FPGA實現(xiàn)PCIe接口設(shè)計
如何通過PCIe進行FPGA到PC的通信?
如何利用PCIe DMA總線實現(xiàn)一個基于FPGA的PCIe 8位數(shù)據(jù)采集卡?
基于FPGA的PCIe總線接口的DMA控制器的實現(xiàn)并進行仿真驗證

基于AMD FPGA的PCIE DMA邏輯實現(xiàn)

PCIe控制器(FPGA或ASIC),PCIe-AXI-Controller

Xilinx高性能PCIe DMA控制器IP,8個DMA通道

評論