linux - zc702 - zedboard datasheet
¿Cómo enviar datos a AXI-Stream en Zynq desde la herramienta de software? (3)
En un dispositivo zynq, la comunicación entre el procesador Cortex-A9 y FPGA se realiza utilizando el protocolo AXI. Hay tres tipos de puertos que se pueden usar para comunicarse entre FPGA y CPU ( Zynq TRM ):
- Puertos AXI de propósito general: 2x Master (de CPU a FPGA) y 2x Slave port (de FPGA a CPU). estos puertos están conectados a la interconexión central del sistema de procesamiento y se pueden usar para transferir datos a / desde la memoria DDR o la memoria en el chip (OCM).
- Puertos AXI de alto rendimiento: 4x puerto esclavo (de FPGA a CPU) proporcionan acceso de banda ancha a DDR u OCM
- ACP (puerto de coherencia del acelerador): puerto de alta potencia del puerto esclavo (desde FPGA a la CPU) conectado directamente a la unidad de control snoop (SCU). La SCU mantiene la coherencia de la memoria caché (omite la necesidad de eliminar / invalidar la memoria caché).
De su pregunta, entendería que en su caso la CPU es el Maestro de la comunicación. Tendrá que usar los puertos maestros axi de propósito general. No puede conectar una interfaz de transmisión AXI4 a la interconexión AXI. Deberá convertir AXI4 Streaming en AXI. Dependiendo de sus necesidades de rendimiento, un núcleo AXI DMA (núcleo AXI DMA IP ) podría ser una buena solución.
Si desea comunicarse desde el punto de vista del software con "abrir (/ dev /)", necesitará un controlador de dispositivo Linux. Si está utilizando el núcleo DMA, su comunicación se verá así:
- Configurará el núcleo de DMA para recuperar datos de una cierta dirección de memoria
- Comience el núcleo de DMA
- el núcleo de DMA obtendrá los datos y los alimentará a la interfaz de transmisión AXI4 de su bloque de IP
- Su bloque de IP realizará alguna operación con los datos y lo enviará de regreso a la memoria (usando DMA) o hará otra cosa (lo enviará a una interfaz externa, ...)
El conjunto de registros de su núcleo DMA se correlacionará con la memoria y se podrá acceder a través de su propio controlador de dispositivo Linux. Para fines de depuración, sugeriría usar mmap para acceder a los registros y validar rápidamente las operaciones de su hardware. Una vez que busque el controlador del dispositivo Linux kernel, le sugiero que lea este libro: Controladores de dispositivo Linux 3 la edición
Estoy buscando una forma de enviar datos desde mi aplicación de software escrita en C a la interfaz AXI-Stream de Zynq. Algo como
open(/dev/axistream);
send_data(data);
Estoy ejecutando Linux en el brazo y ahora quiero conectarlo a la parte de lógica programable.
Si entiendo correctamente, quiere datos DMA desde el PS al PL usando el motor DMA. En ese caso, necesitaría escribir un controlador en Linux que usará el controlador del motor AXI DMA o configurará el motor DMA desde el espacio del usuario.
¿Es esto lo que estás buscando?
La mejor opción para la transferencia de datos eficiente es utilizar comunicación PS-PL habilitada con DMA. Después de implementar un controlador DMA dentro de PL, como AXI CDMA, puede conectarlo a un AXI4-Stream IP y luego a su núcleo IP deseado. Si no va a configurar un marco general, puede acceder a la parte habilitada para DMA de la memoria DDR mediante la llamada al sistema mmap (). Aquí hay una plantilla para transferir datos del espacio de usuario al núcleo de IP en el que se implementa un bucle invertido. https://github.com/h-nasiri/Zynq-Linux-DMA Zynq AXI CDMA
El AXI CDMA usa el sistema de procesamiento del puerto esclavo HP para obtener acceso de lectura / escritura de la memoria del sistema DDR. También hay un software de aplicación basado en Linux OS que usa mmap () para inicializar el núcleo de DMA y luego hacer la transferencia de datos. Puede agregar fácilmente una interconexión AXI4-Stream al AXI CDMA y conectarse