關于Xilinx PCIE DMA的問答
很久沒上博客園了,但由于之前在博客園寫了幾篇關于PCIE DMA的文章,很多同學給我發訊息詢問相關知識點,之前有空的時候都是語音一小時跟人細講,最近由于作業繁忙,有回復不周的,敬請諒解,綜合大家提出的問題,對其中幾個有代表性的問題,在這里做一下統一回復,
問:PCIE DMA主要用來做什么?
答:PCIE DMA主要用來解決資料在FPGA和PC之間高速通信的問題
問:學習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連續采集,基本可以滿足大部分高速采集卡傳輸需求,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/140200.html
標籤:其他
上一篇:過來看嗎?教你如何使用Python爬蟲從酷狗爬取出喜歡聽的音樂!
下一篇:python的練習
