Quando più handle DMA vengono aperti contemporaneamente con l'immagine di fabbrica della scheda di accelerazione programmabile Intel® FPGA N3000, è possibile che si verifichino errori di timeout poll(interrupt).
Gli errori di timeout sono dovuti alla progettazione dell'immagine di fabbrica con quattro blocchi DMA che condividono un interrupt.
Se l'applicazione richiede più handle DMA aperti, personalizzare la progettazione RTL AFU e il codice software come indicato di seguito:
1. Progettazione RTL:
Nel file afu.sv predefinito, riga 257, dma_irq viene inviato all'irq[0] del modulo avmm_ccip_host_wr.
irq({3'b000, dma_irq}),
Personalizza il tuo design per mappare ogni irq dai blocchi DMA a un bit diverso.
2. Codice software:
Nel file fpga_dma.c, riga 701~702, la funzione fpgaRegisterEvent utilizza 0 come ID vettoriale fisso.
res = fpgaRegisterEvent(dma_h->fpga_h, FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */);
Registrate ID diversi per i vostri handle dma che sono mappati ai bit irq nella progettazione RTL.
Ad esempio, per accedere a DDRA e DDRB con due handle dma insieme, è possibile personalizzare il codice RTL per mappare dma_irq a irq[0] in afu_dma_0_inst per DDRA e mappare dma_irq a irq[1] in afu_dma_1_inst per DDRB. Nel codice software, utilizzare vector id 0 per dma handle 0 per accedere a DDRA, utilizzare vector id 1 per dma handle 1 per accedere a DDRB nella funzione fpgaRegisterEvent.