Ketika beberapa handle DMA dibuka secara bersamaan dengan gambar pabrik Intel® FPGA Programmable Acceleration Card N3000, Anda mungkin mendapatkan galat waktu polling (interupsi).
Kesalahan waktu habis disebabkan oleh desain gambar pabrik yang memiliki empat blok DMA yang berbagi satu interupsi.
Jika aplikasi Anda memerlukan beberapa pegangan DMA terbuka, maka kustomisasi desain AFU RTL dan kode perangkat lunak seperti yang tercantum di bawah ini:
1. Desain RTL:
Dalam file afu.sv bawaan, baris 257, dma_irq dikirim ke modul avmm_ccip_host_wr irq[0].
.irq({3'b000, dma_irq}),
Kustomisasi desain Anda untuk memetakan setiap iq dari blok DMA ke bit yang berbeda.
2. Kode perangkat lunak:
Dalam file fpga_dma.c, baris 701~702, fungsi fpgaRegisterEvent menggunakan 0 sebagai id vektor tetap.
res = fpgaRegisterEvent(dma_h->fpga_h, FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */);
Daftarkan id yang berbeda untuk handle dma Anda yang dipetakan ke bit irq dalam desain RTL.
Misalnya, untuk mengakses DDRA dan DDRB dengan dua dma handle bersamaan, Anda dapat menyesuaikan kode RTL Anda untuk memetakan dma_irq ke iq[0] dalam afu_dma_0_inst untuk DDRA, dan memetakan dma_irq ke iq[1] di afu_dma_1_inst untuk DDRB. Dalam kode perangkat lunak, gunakan vector id 0 untuk dma handle 0 untuk mengakses DDRA, gunakan vector id 1 untuk dma handle 1 untuk mengakses DDRB dalam fungsi fpgaRegisterEvent.