如何从PCIe Verilog核心实现DMA?

时间:2015-02-01 13:31:25

标签: linux-kernel verilog dma pci-e

我有一个PCIe生成的核心/端点,带有xilinx核心生成器工具,用于开发板上的spartan6 fpga,我已经修改了一点来启用MSI并每隔几秒发送一次。

另外,我在linux桌面上做了​​一个简单的C内核模块,我在其中插入了开发板。这可以注册器件,分配存储器,为器件启用总线主控权并处理中断等。

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

  1. XILLYBUS

    • 免费教育许可证
    • 在线创建FPGA设备的IPCore并下载网表
    • 免费的linux和Windows驱动程序(linux驱动程序将包含在标准内核中)
    • 8位和32位FIFO接口和存储器接口
    • linux-driver将FPGA映射到/dev/xillybus_read /dev/xillybus_write设备
  2. RIFFA

    • 我不确定这个核心是否仍然存在
    • 免费驱动程序
    • 它有一个奇怪的接口,最多有12个FIFO通道
    • 免费HDL来源
  3. 所有这些内核都需要Xilinx内核生成器为您的设备/电路板生成PCIe内核。核心本身提供交易处理,......