将dma transfert与Cyclone V Avalon MM一起用于PCIe



是否可以使用altera在Qsys(夸脱14.0)中提供的IP核"Cyclone V Avalon MM for PCIe"进行DMA传输?

Altera提供了一个名为"Cyclone V Avalon MM DMA for PCIe"的ip核来进行DMA传输。但此ip核不支持具有1x通道的PCIe Gen1。

«Cyclone V Avalon MM for PCIe»的演示(ep_g1x1)设计包括一个连接在PCIe ip核的Avalon MM TX总线上的DMA块。

然后我想知道是否可以将数据从这个DMA块写入根复合体(主机)?因为我不知道该怎么做。

根据我对材料的简要浏览,应该可以使用您感兴趣的IP核心从RC向您的Cyclone V(EP)发出DMA读取或写入。

我在Stratix V上进行了DMA读写,但它是非Qsys设计的,只使用PCIe核心HIP块(自定义TLP编码和解码逻辑)。这个块似乎只是他们的PCIe HIP块的包装,它也为您处理事务层。

第一步是让RC发出PCIe DMA读取或写入请求。在读取请求的情况下,您将希望发送一个长度大于1 DWORD的内存读取完整数据(CplD)请求。我建议用一个完整的BAR来映射你想在FPGA上DMA的内存空间,以保持你的地址定位简单。

在FPGA方面,我建议使用Signal Tap并在内核上探测Rxm*接口信号。通过这种方式,您可以看到来自核心的DMA读取请求的确切时间。我的猜测是RXMRead_<n>_o信号将变高,指示请求的开始。此时,您必须对RxmAddress_<n>_oRXMBurstCount_<n>_o进行解码并将其传递给某个粘合逻辑,该逻辑将从FPGA的内存中获取所请求的数据。一旦准备好发送回数据,就为发送的每个有效字断言RXMReadDataValid_<n>_i

我猜您提到的«Cyclone V Avalon MM DMA for PCIe»核心可以处理我为您提到的"粘合"逻辑,并允许您直接连接到Qsys总线上的SDRAM控制器。Altera通常不会加密他们的超级功能代码,所以如果你的系统verilog很强,那么可能值得仔细研究他们生成的文件,看看你是否可以以某种方式重用这部分代码。

至于核心设置,我看到的唯一需要注意的是确保Single DW Completer设置关闭。否则,核心将中止其接收到的长度大于1 DWORD的任何请求。

希望这能有所帮助。

我终于用«Cyclone V Avalon MM for PCIe»altera core ip发出了DMA请求。那么,是的,这是可能的。

在我的Linux系统上,rootcomplex(RC)包含在带有Linux操作系统的i.MX6下。事实上,大多数技巧都在Linux方面。

在Linux驱动程序下,必须使用dma_alloc_coherent()调用请求PAGE,并且此页面的地址必须写入名为ADDR_MAP_LO0和ADDR_MAP_HI0的CRA寄存器中。

在我的系统中,内存页面大小为4k,然后我必须将页面大小为4k的PCIe硬盘的"地址转换设置"配置为一致。

完成后,我只需在PCIe IP的TX avalon MM从属端口上连接Qsys提供的DMA控制器。告诉DMA在该端口上写入数据将自动从FPGA生成TLP以写入i.MX6 ram。

相关内容

  • 没有找到相关文章

最新更新