Lorsque plusieurs poignées DMA sont ouvertes simultanément avec l’image d’usine Intel® FPGA carte d’accélération programmable N3000, vous pouvez obtenir des erreurs de temps d’interruption de bureau.
Les erreurs de délai sont dues à la conception de l’image d’usine ayant quatre blocs DMA partageant une interruption.
Si votre application nécessite plusieurs poignées DMA ouvertes, personnalisez la conception AFU RTL et le code logiciel comme indiqué ci-dessous :
1. Conception RTL :
Dans le fichier afu.sv par défaut, ligne 257, dma_irq est envoyé à irq[0] du module avmm_ccip_host_wr.
.irq ({3'b000, dma_irq}),
Personnalisez votre conception pour cartographier chaque irq des blocs DMA à un bit différent.
2. Code logiciel :
Dans le fichier fpga_dma.c, ligne 701~702, la fonction fpgaRegisterEvent utilise 0 comme identifiant vectoriel fixe.
res = fpgaRegisterEvent (dma_h->fpga_h, FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */) ;
Enregistrez différents ids pour vos poignées dma qui sont mappées aux bits irq dans la conception RTL.
Par exemple, pour accéder à DDRA et DDRB avec deux poignées dma ensemble, vous pouvez personnaliser votre code RTL pour cartographier dma_irq à irq[0] dans afu_dma_0_inst pour DDRA, et cartographier dma_irq à irq[1] dans afu_dma_1_inst pour DDRB. Dans le code logiciel, utilisez l’id vectoriel 0 pour le traitement dma 0 pour accéder à DDRA, utilisez l’id vectoriel 1 pour la poignée dma 1 pour accéder à la DDRB dans la fonction fpgaRegisterEvent.