Axi DMA parámetros correctos

4

Estoy haciendo mi diseño con Vivado HLs y Vivado y estoy haciendo algunas transferencias algo grandes entre DDR y mi bloqueo de IP personalizado y viceversa.

Cada transferencia de DDR a IP personalizada es de 256x256x4 = 262144 bytes y ocurre 4 veces.

La velocidad de mi MM2S (memoria asignada a la transmisión) es de 350Mbytes / sy de S2MM a 200 Mbytes / s.

Sé que puedo obtener mejores velocidades y creo que estas lentas están relacionadas con los parámetros del bloque Axi DMA.

Eso es lo que vine a pedirle, para que me ayude a entender cuáles deberían ser los parámetros correctos, ya que todavía no puedo entenderlo al leer logicore guía de producto .

Ancho de la longitud del búfer n Por lo que entiendo, esta es la longitud máxima de la transferencia en bytes como 2 ^ n. Entonces, en mi caso como 2 ^ 18 = 262144, ¿debo poner 18 aquí?

Ancho de datos del mapa de memoria Data width in bits of the AXI MM2S Memory Map Read data bus. No tengo idea aquí. Mis palabras tienen 32 bits y definí el flujo de entrada de mi bloque para que tenga una longitud de 32 bits, pero ¿qué es esto?

Ancho de datos de transmisión Supongo que aquí debería poner 32 ¿correcto?

Tamaño máximo de ráfaga

Burst partition granularity setting. This setting specifies the maximum size of the burst cycles on the AXI4-Memory Map side of MM2S. Valid values are 2, 4, 8,16, 32, 64, 128, and 256.

De nuevo, no tengo idea de qué poner aquí.

Podría hacer un enfoque de prueba y error y cambiar los parámetros hasta que encuentre los mejores, pero el problema es que cada re-sintetización y re-implementación en Vivado toma mucho tiempo ...

    
pregunta João Pereira

1 respuesta

4

Ancho de la longitud del búfer n : esto es exactamente lo que piensa, la mayor transferencia en bytes que puede realizar el IP con un solo comando. 18 bits pueden ser suficientes, pero es probable que necesite 19 bits para representar 2 ^ 18, verifique la hoja de datos para asegurarse.

Ancho de datos del mapa de memoria Esto está en el lado AXI. Puede poner lo que quiera (AXI se ampliará / convertirá según sea necesario), pero en mi experiencia es mejor evitar la conversión de tamaño y la conversión de reloj tanto como sea posible. Eso significa que si su memoria AXI es de 128 bits a 100MHz, debería usar el mismo reloj de 100MHz aquí con un puerto de 128 bits de ancho. En el Zynq, espera 32 o 64 bits, y supongo que el tamaño / conversión son "gratuitos" ya que se realiza en el hardware fijo.

Tamaño máximo de ráfaga Esto también afecta el lado AXI. Es la transferencia máxima de Memory Map Data Width bits que realizará en una sola solicitud de transferencia. Por lo general, más alto es mejor, debido a la forma en que los recuerdos funcionan con las explosiones. Sin embargo, afectará el rendimiento de su sistema (arbitraje) y posiblemente inflará el tamaño del núcleo si usa almacenamiento y envío (que estoy bastante seguro de que el núcleo de IP le obliga a usar, que solía ser opcional). El impacto de esa opción depende principalmente de la carga y la infraestructura AXI. En una infraestructura de carga liviana con una gran aceptación de escritura / lectura, no verá ningún impacto.

Ancho de datos de transmisión Este es el lado de la transmisión AXI. Esto es lo que necesita su propia IP, en su caso parece ser de 32 bits.

No olvide que el puerto AXI-Stream y AXI no tienen que usar el mismo tamaño y relojes. Sin embargo, para obtener el máximo rendimiento, el puerto AXI debe tener un rendimiento mayor que el lado AXI-Stream.

Por ejemplo, si AXI-Stream (y, por lo tanto, su núcleo) utiliza 32 bits con un reloj de 150MHz, efectivamente tendrá un rendimiento de 4.8GBits / s. Si su puerto AXI funciona a 100MHz, no puede ser de 32 bits, ya que no tendrá suficiente rendimiento (3.2GBits / s < 4.8GBits / s). A 64 bits (6.4GBits / s), tendría suficiente para alimentar continuamente a su núcleo IP.

    
respondido por el Jonathan Drolet

Lea otras preguntas en las etiquetas