Quando várias alças DMA são abertas simultaneamente com a imagem de fábrica da placa de aceleração programável Intel® FPGA N3000, você pode obter erros de tempo de interrupção da pesquisa.
Os erros de tempo de interrupção são devido ao design de imagem de fábrica ter quatro blocos DMA compartilhando uma interrupção.
Se a sua aplicação exigir várias alças DMA abertas, personalize o design E o código de software AFU RTL conforme listado abaixo:
1. Projeto RTL:
No arquivo afu.sv padrão, a linha 257, dma_irq é enviada para irq[0] do módulo avmm_ccip_host_wr.
.irq({3'b000, dma_irq}),
Personalize seu design para mapear cada irq de blocos de DMA para um bit diferente.
2. Código de software:
No arquivo fpga_dma.c, linha 701~702, a função fpgaRegisterEvent usa 0 como id vetorial fixo.
res = fpgaRegisterEvent(dma_h->fpga_h, FPGA_EVENT_INTERRUPT, dma_h->eh, 0 /*vector id */);
Registre diferentes ids para suas alças dma que são mapeadas para os bits irq no design RTL.
Por exemplo, para acessar DDRA e DDRB com duas alças dma juntas, você pode personalizar seu código RTL para mapear dma_irq para irq[0] em afu_dma_0_inst para DDRA, e mapear dma_irq para irq[1] em afu_dma_1_inst para DDRB. No código de software, use a id vetorial 0 para lidar com dma 0 para acessar dDRA, use a id vetorial 1 para lidar com dma 1 para acessar o DDRB na função fpgaRegisterEvent.