Introducción a VIVADO + ZYNQ7000 III, desarrollo conjunto de PS y PL

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.
Inserte la descripción de la imagen aquí
En el Capítulo 4 de UG585, puede ver la asignación de espacio de direcciones del núcleo ARM en ZYNQ.
Inserte la descripción de la imagen aquí
El Capítulo 14 puede aprender a configurar, leer y escribir EMIO.
Inserte la descripción de la imagen aquí

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,
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
En este proyecto, configuramos un conjunto de salida MIO de 8 bits de ancho de PS a PL.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
El efecto inicial es este.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
La ventana emergente puede hacer clic en Aceptar de forma predeterminada.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

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.
Inserte la descripción de la imagen aquí

La verificación genera una pregunta, hay una fuente de reloj que debe eliminarse.
Quite la casilla de verificación a continuación.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí

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.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
El siguiente paso es descargar la aplicación a la placa y hacer clic derecho en GPIO.
Inserte la descripción de la imagen aquí
En el puerto serie emergente, seleccione Ejecutar como inicio en Hardwre y
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí
Haga clic en Abrir destino y luego seleccione Conexión automática.
Inserte la descripción de la imagen aquí
Luego verá la ventana hw_vios, haga clic en "+" y haga doble clic en el fondo azul en la figura siguiente.
Inserte la descripción de la imagen aquí
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.
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/malcolm_110/article/details/108339193
Recomendado
Clasificación