Gdy wiele uchwytów DMA jest jednocześnie otwartych za pomocą obrazu fabrycznego karty Intel® FPGA Programmable Acceleration Card N3000, możesz otrzymać błędy limitu czasu Poll (przerwanie).
Błędy limitu czasu wynikają z tego, że projekt obrazu fabrycznego ma cztery bloki DMA, które udostępniają jedno przerwanie.
Jeśli Twoja aplikacja wymaga wielu otwartych uchwytów DMA, dostosuj poniższy kod projektu i oprogramowania AFU RTL:
1. Projekt RTL:
W domyślnym pliku afu.sv wiersz 257 dma_irq jest wysyłany do irq[0] avmm_ccip_host_wr modułu.
.irq({3'b000, dma_irq}),
Dostosuj swój projekt, aby odwzorować każdy irq z bloków DMA na inny bit.
2. Kod oprogramowania:
W pliku fpga_dma.c wiersz 701~702 funkcja fpgaRegisterEvent wykorzystuje 0 jako stały identyfikator wektorowy.
res = fpgaRegisterEvent(dma_h->fpga_h, FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */);
Zarejestruj różne identyfikatory dla swoich uchwytów dma, które są mapowane na bity irq w projekcie RTL.
Na przykład, aby uzyskać dostęp do DDRA i DDRB z dwoma uchwytami dma, możesz dostosować kod RTL do mapowania dma_irq na irq[0] w afu_dma_0_inst DDRA oraz mapować dma_irq na irq[1] w afu_dma_1_inst dla DDRB. W kodzie oprogramowania użyj vector id 0 do obsługi dma 0, aby uzyskać dostęp do DDRA, użyj wektorowego id 1 do obsługi dma 1, aby uzyskać dostęp do DDRB w funkcji fpgaRegisterEvent.