Acceda al coprocesador NEON desde la lógica programable en Zynq

1

Durante los últimos días he estado pensando en el coprocesador de neón en el SoC de Zynq y tengo una pregunta, ¿es posible enviar instrucciones al neón desde el lado PL del SoC?

Imagina que tengo una aplicación con muchas operaciones matemáticas y he usado todos los segmentos DSP en la lógica programable. Supongo que podría descargar algunas operaciones al PS o encontrar una manera de compartir segmentos DSP entre operaciones (algunos ciclos para cada uno). Comencé a pensar que tal vez podría descargarlo en el PS y el PS lo enviaría al coprocesador de neón, que seguiría haciendo lo que tiene que hacer y cuando los datos estén listos, los enviaría de vuelta al PL (probablemente no cómo funciona el coprocesador de neón, pero es solo por ejemplo).

Como se puede ver, mi siguiente pensamiento fue averiguar si podría enviar instrucciones al coprocesador de neón desde el lado PL de las cosas. Sería de gran ayuda si es posible, pero no he encontrado ninguna documentación que indique si esto es posible, y tampoco he podido encontrar a alguien que haya intentado experimentar con esto.

Probablemente podría decir que si tengo una aplicación que no se puede cumplir correctamente con las rebanadas de 220 DSP disponibles, debería obtener otra que se adapte a mis necesidades. Pero este pensamiento me vino en la ducha y es completamente hipotético. No existe tal aplicación que requiera tantos cálculos (bueno ... hay, pero no hay aplicaciones que quiera desarrollar).

Entonces, ¿alguien sabe si esto es posible?

    
pregunta morcillo

2 respuestas

2

Dudo que esto sea posible únicamente con lógica programable, ya que el motor NEON SIMD accede a los registros internos y las instrucciones provienen del flujo de instrucciones principal. No hay forma de acceder a ninguno de estos desde PL. Sin embargo, lo que podría hacer es configurar las instrucciones de carga / almacenamiento de NEON para leer y escribir en el espacio de dirección asignado de PL y luego escribir algún código para impulsar el coprocesador de NEON.

    
respondido por el alex.forencich
3

La respuesta a esto es: "algo así, pero es mucho trabajo".

Los PS y PL en el zynq están interconectados mediante una serie de interfaces AXI4, con diferentes capacidades de velocidad y coherencia. Estas interfaces se pueden utilizar como un mecanismo para implementar una interfaz de registro o transferir datos entre el PS y el PL. No hay una forma inherentemente nativa de pasar el procesamiento al PS simplemente por las naturalezas opuestas del PS y el PL, pero sería posible diseñar un mecanismo intermedio para convertir las tareas del PL en aquellas que el PS podría realizar. realizar. Aquí es donde entra la "gran cantidad de trabajo".

Sería necesario dividir el trabajo de manera lógica, de modo que el procesamiento realizado sea en su mayoría adecuado para la arquitectura (PS o PL) y se mantenga mayormente separados entre sí. Por ejemplo, el PL puede pasar algunos datos al PS para su procesamiento, mientras continúa en la siguiente ronda de datos.

Este es un problema de diseño en lugar de cualquier otra cosa. Es necesario utilizar las interfaces suministradas entre PS y PL para optimizar el uso de ambos conjuntos de recursos de la manera óptima para su aplicación.

    
respondido por el stanri

Lea otras preguntas en las etiquetas