當與Intel® 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 行中,fpgaRegisterEvent 功能使用 0 作為固定向量 ID。
res = fpgaRegisterEvent(dma_h->fpga_h,FPGA_EVENT_INTERRUPT,dma_h->eh,0 /*vector id */);
針對在 RTL 設計中對應到 irq 位的 dma 處理常式,註冊不同的 ids。
例如,若要將兩個 dma 處理器一起存取 DDRA 和 DDRB,您可以自訂 RTL 代碼,在 DDRA 的afu_dma_0_inst中將dma_irq對應到 irq[0],並在 DDRB 的afu_dma_1_inst中將dma_irq對應為 irq[1]。在軟體代碼中,使用 dma 處理 0 的向量 id 0 存取 DDRA,使用向量 id 1 用於 dma 處理 1,以 fpgaRegisterEvent 功能存取 DDRB。