Xilinx XDMA 上位机应用程序控制逻辑
Xilinx XDMA pcie 上位機應用程序控制邏輯
1. 驅動安裝的參數
關于驅動的編譯和安裝這里就不多講了,無非就是make 和 insmod 。這里講一下驅動安裝時,控制驅動屬性的幾個參數:
1.中斷模式
中斷模式分為三種,MSIX是最新的中斷模式,老版本的內核可能不支持。就比如說我的內核。如果不指定驅動安裝額中斷參數,那么就會產生內核安裝的錯誤。所以這里我們選擇MSI的中斷模式。
2.驅動運行模式
static unsigned int poll_mode; module_param(poll_mode, uint, 0644); MODULE_PARM_DESC(poll_mode, "Set 1 for hw polling, default is 0 (interrupts)");驅動的運行模式分為兩種, 中斷模式和poll_mode 模式,默認是中斷模式,設置為1是硬件polling模式。根據實際應用場景可以選擇相應的設置。
3.sgdma傳輸延時
默認是10s鐘, 可以自定義設置。
4.其他參數
static unsigned int enable_st_c2h_credit = 0; module_param(enable_st_c2h_credit, uint, 0644); MODULE_PARM_DESC(enable_st_c2h_credit,"Set 1 to enable ST C2H engine credit feature, default is 0 ( credit control disabled)");unsigned int desc_blen_max = XDMA_DESC_BLEN_MAX; module_param(desc_blen_max, uint, 0644); MODULE_PARM_DESC(desc_blen_max,"per descriptor max. buffer length, default is (1 << 28) - 1");這兩個參數,沒有使用過,基本上也沒怎么了解。 大概也就是數據傳輸的認證和描述符的buf長度吧 。
2.驅動安裝后生成的幾個設備
驅動安裝成功后,會生成幾個設備文件。對應的應用編程, 就是操作這些設備文件來實現對應的業務邏輯。簡單的介紹一下幾個設備的功能:
1. xdma0_h2c_0 xdma0_c2h_0
這兩個設備就是用來讀寫的設備文件,h2c 是寫設備,c2h是讀設備。對應的是FPGA端設置的通道。
2. xdma0_events_x
用于處理中斷事件的設備,IP核內設置對應的中斷號,對應的中斷設備。
3. xdma0_user
xdma_user設備節點用于實現PCIe的地址映射,為上層應用提供編程控制接口、AXI接口等
4. xdma0_control
xdma0_control設備節點主要是為上層提供DMA寄存器接口
比較常用的就這幾個設備。
3.應用程序邏輯
兩個線程:一個線程用于處理中斷事件,另外一個線程用于處理數據讀取。線程之間的同步用信號量。
讀取的數據保存在文件。
讀取的數據保存在以4096字節的堆區。函數調用時:
/*4096字節對齊分配內存*/ posix_memalign((void **)&c2h_align_mem,4096, frame_bytes);設備xdma_usr的使用,之前有說過,xdma_user設備節點用于實現PCIe的地址映射,為上層應用提供編程控制接口、AXI接口等。
那么FPGA端可以設置一些屬性放在寄存器中供我們讀取。比如我這邊就從寄存器a4獲取的幀的大小,
mmap 函數是將硬件的地址硬件映射至linux 用戶層可訪問的虛擬地址空間。
測試代碼很簡單,邏輯基本上就是這樣。
最近我會去研究XDMA的驅動,看他的實際邏輯時如何的。之后會更新一篇文章,來梳理我之后的學習內容。
相關的的驅動及測試代碼,以及FPGA工程,已經上傳至網盤,有需要的朋友可以自行下載。
鏈接:https://pan.baidu.com/s/1wdPqUf8_2K6r8ZbVupizrw
提取碼:i2sw
總結
以上是生活随笔為你收集整理的Xilinx XDMA 上位机应用程序控制逻辑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生产者和消费者模型介绍
- 下一篇: 判断三个数是否能构成三角形_七年级 初一