Linux kernel 如何从PCIe Verilog内核实现DMA?

Linux kernel 如何从PCIe Verilog内核实现DMA?,linux-kernel,verilog,dma,pci-e,Linux Kernel,Verilog,Dma,Pci E,我在开发板上使用xilinx core generator工具为spartan6 fpga生成了一个PCIe核心/端点,我对其进行了一些修改,以启用MSI,并每隔几秒钟发送一次 另外,我在我的linux桌面上做了一个简单的C内核模块,我在其中插入了开发板。这将注册设备、分配内存、启用设备的总线主控以及处理中断等 我现在想做的是从主板到PC的DMA传输,然后在完成时发送一个中断,这样cpu就可以去读取它了。我不是Verilog专家,我的代码似乎不具备任何DMA功能 我在网上找不到任何相关信息,所以

我在开发板上使用xilinx core generator工具为spartan6 fpga生成了一个PCIe核心/端点,我对其进行了一些修改,以启用MSI,并每隔几秒钟发送一次

另外,我在我的linux桌面上做了一个简单的C内核模块,我在其中插入了开发板。这将注册设备、分配内存、启用设备的总线主控以及处理中断等

我现在想做的是从主板到PC的DMA传输,然后在完成时发送一个中断,这样cpu就可以去读取它了。我不是Verilog专家,我的代码似乎不具备任何DMA功能


我在网上找不到任何相关信息,所以这是我最后的希望。

上面评论的原文:

您是否在生成的PCIe核心上实现了事务层?如果您的HDL技能不是很高,为什么不使用免费PCIe核心?PCIe是一件非常重要的事情

是的,Xilinx IPCore生成器在链接层的顶部添加了一个非常简单的PIO接口来处理简单的PIO事务。注意:PIO事务已过时,不允许用于新设备

目前我知道两个相当不错的IPCores:

    • 免费教育许可证
    • 在线为FPGA设备创建IPCore并下载网络列表
    • 免费linux和windows驱动程序(linux驱动程序将包含在标准内核中)
    • 8位和32位FIFO接口以及内存接口
    • linux驱动程序将FPGA映射到
      /dev/xillybus\u read
      /dev/xillybus\u write
      设备
    • 我不确定这个核心是否还保留着
    • 免费司机
    • 它有一个奇怪的接口,最多有12个FIFO通道
    • 免费HDL源

  • 所有这些核心都需要Xilinx核心生成器为您的设备/板生成PCIe核心。核心本身提供事务处理,…

    您是否在生成的PCIe核心上实现了事务层?如果您的HDL技能不是很高,为什么不使用免费PCIe核心?PCIe是一件非常重要的事情……感谢这一点,我认为这已经在PIO中完成了,因为Tx/Rx引擎在那里?我不知道提到的免费PCIe内核;如果你能给我指出一个已经实现TLP的版本,那就太好了,因为这个版本是我唯一可以访问的免费版本。谢谢,我会尝试将它与我当前的设置集成。