Wenn mit dem Intel® FPGA Programmable Acceleration Card N3000 Factory Image gleichzeitig mehrere DMA-Handles geöffnet werden, können Poll(Interrupt)-Timeout-Fehler auftreten.
Die Timeout-Fehler sind darauf zurückzuführen, dass das Werkbilddesign vier DMA-Blöcke aufweist, die einen Interrupt teilen.
Wenn Ihre Anwendung mehrere offene DMA-Handles erfordert, passen Sie dann das AFU RTL-Design und den Softwarecode wie unten aufgeführt an:
1. RTL-Design:
In der Standard-afu.sv datei, Zeile 257, wird dma_irq an irq[0] des avmm_ccip_host_wr Moduls gesendet.
.irq({3'b000, dma_irq}),
Passen Sie Ihr Design so an, dass jedes IRQ von DMA-Blöcken zu einem anderen Bit abzubilden ist.
2. Softwarecode:
In fpga_dma.c-Datei, Zeile 701~702, verwendet die fpgaRegisterEvent-Funktion 0 als feste Vektor-ID.
res = fpgaRegisterEvent(dma_h->fpga_h, FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */);
Registrieren Sie verschiedene IDS für Ihre DMA-Handles, die den IRQ-Bits im RTL-Design zugeordnet sind.
Um beispielsweise auf DDRA und DDRB mit zwei dma-Handles zusammen zuzugreifen, können Sie Ihren RTL-Code anpassen, um dma_irq in afu_dma_0_inst für DDRA zu irq[0] zu mapen und dma_irq zu irq[1] in afu_dma_1_inst für DDRB zu mapen. Verwenden Sie im Softwarecode Vektor-ID 0 für dMA-Handle 0, um auf DDRA zuzugreifen, und verwenden Sie Vektor-ID 1 für DMA-Handle 1, um in der fpgaRegisterEvent-Funktion auf DDRB zuzugreifen.