该IP在user_irq_req_i输入的中断位,寄存中断位号,并且输出给XDMA IP ,当上位机的驱动响应中断的时候,在中断里面写uixdmairq 的寄存器,清除已经处理的中断。 另外本方案中通过AXI-BRAM来演示用户user空间的读写访问测试。 3.3XMDA概述 Xilinx 提供的DMASubsystem for PCIExpressIP是一
四:软件设计 XDMA的驱动是官方提供的,这里不做详细解读,总之XDMA驱动就是把PCIE DMA包成了多种字符设备:xdma_h2c,xdma_c2h,xdma_user,xdma_control,xdma_bypass,xdma_events 经过本人测试使用,我只推荐使用xdma_h2c,xdma_c2h,xdma_bypass,xdma_events这四个字符设备。xdma_h2c用来把数据从内存写到FPGA的DDR,xdm...
XDMA关键代码分析: rx_userapp和tx_usrapp是通过rootport和DUT进行TLP报文的收发。DUT包括XDMA IP core. rootport模拟数据链路层 和物理层在数据通信中的核心处理。 userapp_com模块是一些共享逻辑,TLP处理和log…
打完驱动断电重启后会出现XDMA设备 第⼆步:找设备并打开和关闭 通过设备实例路径来识别每⼀个XDMA设备,因为每个XDMA设备的设备实例路径是唯⼀的。 如果想打开读写寄存器设备 1 : 设备实例路径 + “\\user” (中间有些步骤省略详情查看便携式记录仪V1.0//MyWinDriverLib.cpp 中的openControl...
xdma_inter.v模块的设计是本设计的核心。该模块提供了AXI-LITE接口,使得上位机可以通过访问user空间地址来读写xdma_inter.v的寄存器。在user_irq_req_i输入的中断位,该模块会寄存中断位号,并输出给XDMA IP。当上位机的驱动响应中断时,它会在中断里面写xdma_inter.v的寄存器,从而清除已经处理的中断。
该用来配合驱动处理中断,uixdmairq提供了AXI-LITE接口,上位机通过访问user空间地址读写uixdmairq的寄存器。该IP在user_irq_req_i输入的中断位,寄存中断位号,并且输出给XDMAIP,当上位机的驱动响应中断的时候,在中断里面写uixdmairq的寄存器,清除已经处理的中断。
| run | PCIe | | PCIe-XDMA | AXI4 | User Logic | | | C/C++ |<--->|<-->| IP core |<--->| e.g. | | | software | | | |Master Slave| HW Accelerator | | | | | | (AXI-master) | Port Port | (AXI-slave) | | | | | |---| |---| | ...
User Interrupt Error Interrupt Queue Management Function Map Table Context Programming Queue Setup Queue Teardown Virtualization Mailbox Function Level Reset Mailbox IP Port ID System Management Resets VDM Config Extend Expansion ROM Errors Bridge Errors Slave Bridge Abnormal ...
2、xdma核提供了INTX中断和MSI中断的方式,xilinx官方测试程序也提供了user_event命令来进行中断测试,但是我设计了一个 中断测试程序发送了MSI0中断,根据手册时序图 抓取了信号,证明了上位机底层驱动确实收到了中断并返回了w_usr_irq_ack信号 不过上位机命令行的user_event命令却好像没什么反应,是我程序的问题还是use...
再调用get_user_pages_fast offset_in_page 获取页内偏移 flush_dcache_page 如果高速缓存包含几个虚拟地址不同项指向内存中的同一页,可能会发生所谓的alias问题,flush_dcache_page有助于防止该问题 sg_set_page 还有最后一点,使用spin_lock 和spin_lock_irqsave的区别: ...