如果使用英特尔® FPGA可编程加速卡 N3000 工厂映像同时打开多个 DMA 手柄,您可能会出现分析(中断)超时错误。
超时错误是由于工厂图像设计有四个 DMA 模块共享一个中断。
如果您的应用程序需要多个开放的 DMA 句柄,则自定义下面列出的 AFU RTL 设计和软件代码:
1. RTL 设计:
默认 afu.sv 文件,第 257 行,dma_irq发送到 avmm_ccip_host_wr 模块的 irq[0]。
.irq({3'b000,dma_irq}),
自定义您的设计,以将每个 irq 从 DMA 模块映射到不同的位。
2. 软件代码:
在 fpga_dma.c 文件中,第 701~702 行中,FPGARegidiEvent 函数使用 0 作为固定的矢量 ID。
res = FPGARegidiEvent(dma_h->fpga_h,FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */);
为您的 dma 句柄注册不同的 ID,它们在 RTL 设计中被映射到 irq 位。
例如,要将两个 dma 句柄一起访问 DDRA 和 DDRB,您可以自定义 RTL 代码,以在 dma_irq afu_dma_0_inst中映射到 irq[0](用于 DDRA),并在 afu_dma_1_inst中将dma_irq映射到 DDRB 的 irq[1]。在软件代码中,使用矢量 ID 0 让 dma handle 0 访问 DDRA,使用 dma handle 1 的矢量 ID 1 访问 FPGARegregventevent 功能中的 DDRB。