เมื่อมีการเปิด DMA หลายตัวพร้อมกันด้วยภาพโรงงานของการ์ดเร่งความเร็ว Intel® FPGA ตั้งโปรแกรมได้ N3000 คุณอาจได้รับข้อผิดพลาดการหมดเวลาของ Poll(ขัดจังหวะ)
ข้อผิดพลาดการหมดเวลาเกิดจากการออกแบบภาพจากโรงงานโดยมีบล็อก 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, line 701 ~702, ฟังก์ชัน fpgaRegisterEvent ใช้ 0 เป็นรหัสเวกเตอร์แบบคงที่
res = fpgaRegisterEvent(dma_h->fpga_h, FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */);
ลงทะเบียน ID ที่แตกต่างกันสําหรับหมายเลขอ้างอิง DMA ของคุณ ซึ่งแมปกับบิต irq ในการออกแบบ RTL
ตัวอย่างเช่น ในการเข้าถึง DDRA และ DDRB ที่มีสอง dma ที่จับร่วมกัน คุณสามารถปรับแต่งโค้ด RTL ของคุณเพื่อแมป dma_irq กับ irq[0] ใน afu_dma_0_inst สําหรับ DDRA และแมป dma_irq กับ irq[1] ใน afu_dma_1_inst สําหรับ DDRB ในรหัสซอฟต์แวร์ ให้ใช้ Vector ID 0 สําหรับ DMA handle 0 เพื่อเข้าถึง DDRA ใช้ Vector ID 1 สําหรับ dma handle 1 เพื่อเข้าถึง DDRB ในฟังก์ชัน fpgaRegisterEvent