índice
1. Objetivo
Familiarizado con el control de hardware de bajo nivel de PS y el desarrollo conjunto de PS y PL.
2. Conocimientos preliminares
Podemos entender por el segundo capítulo del documento oficial UG585 de Xilinx que el intercambio de datos entre PS y PL es principalmente a través del bus AXI, además de reloj / interrupción, DMA y otras interfaces de señales de control. El diagrama de bloques funcional detallado de cada parte es el siguiente.
En el Capítulo 4 de UG585, puede ver la asignación de espacio de direcciones del núcleo ARM en ZYNQ.
El Capítulo 14 puede aprender a configurar, leer y escribir EMIO.
Tres, ejemplos de ingeniería
Para crear un proyecto en blanco, consulte la publicación del blog de VIVADO + ZYNQ7000 Getting Started .
Una vez establecido el proyecto, primero agregue un bloque de IP, haga clic en el lugar 1, ingrese el nombre en el lugar 2, haga clic en Aceptar,
en la nueva ventana, haga clic en el lugar 1 para agregar IP, busque zynq en el lugar 2 y haga doble clic en el lugar 3.
Haga doble clic en 1 en la figura siguiente para enrutar automáticamente, haga doble clic en 2 para configurar los pines de función de la CPU, esta parte puede referirse a VIVADO + ZYNQ7000 Getting Started II para
configurar los pines flash, selección del modelo de memoria, compensación de retardo, etc.
En este proyecto, configuramos un conjunto de salida MIO de 8 bits de ancho de PS a PL.
En el módulo de sistema recién creado, habrá una salida de señal de reinicio de PS a PL de forma predeterminada, y se proporcionará una fuente de reloj a PL de forma predeterminada.
El efecto inicial es este.
Haga clic en la posición en la figura 1 a continuación para expandir el GPIO, coloque el mouse en 2 para identificar el puerto de salida y luego haga clic derecho para seleccionar la posición 3 en la ventana emergente para crear el puerto.
La ventana emergente puede hacer clic en Aceptar de forma predeterminada.
Los datos de E / S de salida se pueden conectar a un núcleo IP incorporado llamado VIO, que funciona como un analizador lógico.
Haga clic derecho en la ventana en blanco y seleccione agregar ip.
Haga doble clic para configurar una nueva IP, solo ingrese 1 y salida 0, y luego configure el ancho de bits de entrada en 8.
La verificación genera una pregunta, hay una fuente de reloj que debe eliminarse.
Quite la casilla de verificación a continuación.
La conexión de cada IP es muy conveniente, simplemente coloque el mouse en el puerto y arrastre el mouse hacia el otro extremo para realizar la conexión.
Una vez agregado el módulo, se genera un archivo de configuración del proyecto.
En la columna Fuentes, haga clic con el botón derecho del mouse en el sistema de diseño y seleccione Crear envoltorio HDL. De forma predeterminada, en la ventana emergente, haga clic en Aceptar.
Una vez completada la configuración, ejecute la compilación, porque se ha agregado un nuevo núcleo IP. Tenga en cuenta que el módulo IP, excepto la CPU, otras IP se ejecutan en el PL. En la ventana emergente, seleccione las opciones predeterminadas y luego haga clic en Aceptar.
Un archivo de bits que se puede descargar a la placa de desarrollo debe generarse más tarde. La configuración predeterminada de la ventana emergente, haga clic en Aceptar, sí.
¡El proceso de compilación es un poco largo! Una vez que se completa la compilación, aparece una ventana, puede elegir cancelar, si elige Aceptar, se activará el efecto de diseño integrado. Aquí no hay presentación.
El siguiente paso es el mismo que el de la segunda entrada, exportar la información de hardware generada y luego vincular al SDK. Archivo-exportación-exportación de hardware, debe seleccionar incluir bitstream aquí. Luego ejecute File-launch SDK.
Cuatro, desarrollo de SDK
File-new-Application Project, ingrese el nombre del proyecto, haga clic en siguiente, luego seleccione la aplicación vacía, haga clic en Finalizar.
Haga clic derecho en src y cree un nuevo archivo C. Ingrese el nombre del archivo en la ventana emergente y preste atención a agregar el sufijo .c.
Copie el código a continuación.
/*
* emio.c
*
*/
#include "xparameters.h"
#include "xil_io.h"
#define DIRM 0x00000284 //方向控制寄存器地址
#define OEN 0x00000288 //是能控制寄存器地址
#define DATA 0x00000048 // BANK2 数据寄存器地址
int main( )
{
u8 data;
u32 receive;
volatile int Delay;
data = 0xAA;
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + DIRM,0xFF);
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + OEN,0xFF);
receive = Xil_In32(XPAR_XGPIOPS_0_BASEADDR + DATA); //读出当前输入输出配置
receive = receive & 0xFFFFFF00; //只改变需要的通道,设置为输出
receive = receive | data; // 把设置值写入到控制寄存器
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + DATA,receive);
while(1)
{
data = ~data; //数据隔一段时间取反一次
receive = Xil_In32(XPAR_XGPIOPS_0_BASEADDR + DATA);
receive = receive & 0xFFFFFF00;
receive = receive | data;
Xil_Out32(XPAR_XGPIOPS_0_BASEADDR + DATA,receive);
for (Delay = 0; Delay < 100000000; Delay++);
}
return 1;
}
Luego haga clic en Construir todo en Proyecto, o directamente Ctrl + B. Si aparece un error de archivo de encabezado durante el proceso de compilación, puede verificar en el extremo derecho para ver si hay algún error en los archivos incluidos. Por lo general, se le pedirá una solución, como presionar F5 para actualizar.
Cinco, descarga y ejecuta
Haga clic en 1 y 2 en la figura siguiente para descargar el archivo de bits compilado por vivado a la placa de destino Recuerde conectar el JTAG y encender la placa antes de descargar.
El siguiente paso es descargar la aplicación a la placa y hacer clic derecho en GPIO.
En el puerto serie emergente, seleccione Ejecutar como inicio en Hardwre y
ahora regrese a la interfaz principal de Vivado, busque el elemento Programa y depuración a la izquierda y haga clic en Generar flujo de bits . Una vez finalizado el proceso, aparecerá una pequeña ventana, como se muestra en el lado derecho de la figura a continuación, seleccione Abrir gestión de hardware.
Haga clic en Abrir destino y luego seleccione Conexión automática.
Luego verá la ventana hw_vios, haga clic en "+" y haga doble clic en el fondo azul en la figura siguiente.
De esta manera, los datos de IO son monitoreados por vio, y podemos ver que la columna Valor cambia de 55 a AA a su vez.