關於Xilinx PCIE DMA的問答

關於Xilinx PCIE DMA的問答

好久沒上博客園了,但因爲以前在博客園寫了幾篇關於PCIE DMA的文章,不少同窗給我發消息詢問相關知識點,以前有空的時候都是語音一小時跟人細講,最近因爲工做繁忙,有回覆不周的,敬請諒解。綜合你們提出的問題,對其中幾個有表明性的問題,在這裏作一下統一回復。後端

:PCIE DMA主要用來作什麼?緩存

:PCIE DMA主要用來解決數據在FPGA和PC之間高速通訊的問題app

:學習PCIe,應該從什麼地方起步?學習

:分研究型和應用型,研究型從XAPP1052起步,應用型從XDMA起步接口

:XILINX提供了三種PCIE IP核,各有什麼區別?事務

:第一種 7 Series Integrated Block for PCI Express,這個是最基礎的PCIE硬核,實現的是PCIE的物理層、鏈路層和事務層,提供給用戶的是以AXIS接口定義的TLP包。用戶若是要往PC發數據,就要在邏輯端組好MEM_WR事務包送到AXIS接口上,一樣要從PC獲取數據,就要發送MEM_RD事務包,而後獲取到COMPLETE事務包,再從COMPLETE事務包中提取出數據。要用這個IP核,須要對PCIE協議有清楚的理解,若是你只是想用PCIE傳輸數據,又不想去深究協議,那麼建議您使用其他兩個IP核。第二種 AXI Memory Mapped To PCI Express,這個是本人最喜歡用的PCIE IP核,它的做用就是一座橋,一座FPGA端直通上位機內存的橋,用戶如需讀寫上位機內存空間,只須要操做這個IP核的S_AXI接口,就能夠像讀寫普通AXI接口的BRAM/DDR同樣讀寫上位機內存,對於採集卡而言,FPGA收到AD數據後,只須要根據上位機配下來的寫內存地址寄存器,就能夠將數據以 AXI Memory接口標準發往上位機,而後產生中斷讓CPU從相應內存地址去取數據就行了,這種IP就省卻了組事務層包的煩惱,你只要把數據發上去就行了,組包的事IP會解決。第三種 DMA/Bridge Subsystem for PCI Express (PCIe),俗稱XDMA,這個IP核更狠,不但把事務層的組包解包作了,還把DMA的事也一起作了,俗稱傻瓜式PCIe傳輸,爲了完全解放邏輯工程師,它甚至把PC端的驅動都幫你寫好了,一經推出就是受到了廣大FPGA工程師的歡迎。內存

:XDMA那麼好用,它有什麼侷限嗎?開發

:XDMA是好用,但倒是把雙刃劍,使用過的工程師會發現這個XDMA只有M_AXI接口,沒有像上述第二個PCIE IP同樣的S_AXI接口,這說明什麼問題?說明全部的PCIE讀寫請求只能由上位機發起!FPGA端沒法主動發起讀寫請求。有人問爲啥要作成這樣,我認爲多是爲了系統穩定,控制權必須緊緊掌握在官方驅動手裏。要是任由FPGA主動訪問內存,分分鐘就死機了。又有同窗問,爲啥AXI Memory Mapped To PCI Express這個IP核能夠由FPGA主動發起讀寫請求,那是由於用這個IP的人都是本身寫驅動的,這些高級玩家不會傻到把不能訪問的地址空間分配給FPGA。博客

:XDMA的效率怎麼樣?效率

:XDMA效率其實還能夠,實測傳輸帶寬大約在滿帶寬的70%-80%左右。

:XDMA官方驅動好用嗎?

:BUG有一些,但基本可用。本人試用過16 17 18三個版本的驅動,目前相對穩定的是18版本。Linux驅動主要問題在中斷處理上,硬件觸發了中斷,驅動也進了中斷服務程序,但進去後卻找不到對應的用戶中斷,因此須要在硬件端增長中斷持續時間,本人給出的建議是一直拉着中斷直到上位機識別到用戶中斷後,經過寫寄存器來清中斷。還有不要聽信用戶手冊上的建議,用AXI_LITE接口來配置用戶側的寄存器,由於驅動上這個接口讀寫延遲很是不穩定,親測從幾微秒到幾毫秒都有!建議使用BYPASS接口來配置寄存器。WIN驅動上bug就更多了,網上隨便一搜就能搜到。本人稍微改動了一些代碼,目前在MM模式下讀寫效率仍是能夠的,也在70%-80%。

:XDMA能夠用來作高速數據採集卡嗎?

:能夠,但有較多限制。首先須要有高速的板載DDR,最好上DDR4,由於數據須要先進到板載DDR作緩存,而後觸發中斷,讓CPU發起DMA讀請求,把數據從板載DDR讀到上位機內存。若是是連續數據採集,意味着FPGA要不間斷得寫DDR,同時PC也在不間斷得讀DDR,試想250M時鐘128位寬的採樣數據,進DDR的速率是4GB/s,出DDR的速率是4GB/s,同時讀寫也就是要達到8GB/s的吞吐率,請問你的板載DDR準備好了嗎?其次CPU不能太爛,由於是高速採集卡,數據不間斷採集的時候中斷是很頻繁的,CPU要是中斷處理不過來會很麻煩,並且CPU要是不行,後端數據來不及處理,那麼在FPGA板載DDR的地方就會出現進數據快,出數據慢的問題,丟數據就在所不免。最後FPGA器件等級也很重要,器件等級越高,XDMA支持的PCIe傳輸帶寬就越大,目前最高16x gen3,傳輸帶寬越大,CPU就能更快得把數據從板載DDR中取走,避免數據覆蓋。目前本人在KC705開發板上能夠作到2.5GB/s連續採集,基本能夠知足大部分高速採集卡傳輸需求。

相關文章
相關標籤/搜索