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