Seguí algunos ejemplos y ya logré realizar una gran transferencia de S2MM (flujo a memoria asignada) mediante una AXI DMA .
Sin embargo, ahora estoy intentando lo contrario, es decir, para realizar una transferencia MM2S simple a un bloque de IP muy simple que hice y el resultado devuelto del bloque es incorrecto. Tenga en cuenta que el código MM2S también es casi una copia de los ejemplos que encontré.
Intenté la depuración con la herramienta ILA (analizador lógico integrado) de Vivado y el resultado está en el archivo adjunto.
¿Puedes ayudarme a entender por qué estoy escribiendo los siguientes valores:
static void initialize_parameters(u32 SrcAddress){
u32 *BufferPtr;
union float32 thisfloat;
BufferPtr=(u32*)(SrcAddress);
thisfloat.f32=10.0;
BufferPtr[0]=thisfloat.u32;
thisfloat.f32=0.0;
BufferPtr[1]=thisfloat.u32;
thisfloat.f32=10.0;
BufferPtr[2]=thisfloat.u32;
thisfloat.f32=20.0;
BufferPtr[3]=thisfloat.u32;
}
y haciendo una transferencia como esta:
// Kick off DMA transfers
Status = XAxiDma_SimpleTransfer(&axi_dma, PARAMETERS_ADDR, 4*4, XAXIDMA_DMA_TO_DEVICE);
y los parámetros de señal_TDATA cuando tvalid = 1 ¿es eso lo que podemos ver en el archivo adjunto? Además, el resultado final es incorrecto. ¿Qué estoy haciendo mal?
También,aquíhayunapantalladeimpresióndemidiseñodebloqueenVivado.Nota:estoytrabajandoenunZedboard