Cómo llamar y conducir el núcleo de IP generado por vivado HLS en zynq

        Vivado HLS es una herramienta integral de alto nivel desarrollada por Xilinx, que puede usar directamente C, C ++ y System C para programar dispositivos FPGA Xilinx. El funcionario de Xilinx entregó el documento ug902, que introdujo las diversas bibliotecas proporcionadas por el funcionario y el uso de HLS en detalle. Este artículo presentará cómo usar el núcleo IP generado por vivado HLS en Zynq.

1. Crear un proyecto vivado HLS

        Para conocer los métodos específicos de creación y optimización de proyectos de vivado HLS, consulte el blog: https://blog.csdn.net/weixin_39290638/article/details/80228806

Este artículo es solo una breve introducción.

        En primer lugar, debe elegir el modelo de chip correcto utilizado en la solución.El modelo de chip utilizado en este artículo es xc7z020clg400-2, como se muestra en la figura:

Luego, asegúrese de que la función superior sea correcta:

 Escriba el código fuente y el banco de pruebas, configure la interfaz:

 Aquí, tenemos tres interfaces ip, una es usar la interfaz AXI para ingresar la entrada de imagen, la otra es usar la interfaz AXI para generar la salida de imagen, y finalmente usar la interfaz AXILITE para enviar la media al lado PS, que se usará en proyectos posteriores.

Use c para verificar primero, y después de la verificación, sintetice y genere ip core:

Todo está listo, vaya al directorio del proyecto, busque la IP generada, la ruta es: \ solution1 \ impl \ ip:

 Este artículo no se enfoca en cómo usar vivado HLS, por lo que solo presentaré brevemente esa parte.

Segundo, llame a la IP generada en el diseño de bloques vivado

Copie la IP generada en el directorio del proyecto vivado y cree una carpeta para almacenar el archivo IP descomprimido:

Abra el proyecto vivado, abra la configuración de ip >> IP >> Depósito y agregue el directorio donde acaba de descomprimir la ip:

Debido a que este proyecto usa muchos ips, se usa directamente una carpeta llamada ip, que contiene todos los ips usados, que luego se empaquetan en carpetas.

En este punto, ya hay una dirección IP definida por el usuario en la biblioteca de direcciones IP. En ella, encontramos la dirección IP creada por nosotros mismos. El nombre de la dirección IP se llama average_fun y lo agregamos al diseño del bloque:

Se puede notar que después de ser agregado, su nombre se convierte automáticamente en average_fun_0, y luego se agrega _0 automáticamente después de esto. Esto es para evitar la vergüenza de usar una confusión de nombres de IP varias veces en un proyecto. Este nombre se usará más tarde cuando se inicialice el terminal PS.

Después de conectar las interfaces, puede sintetizar, implementar y generar archivos de bits. Tenga en cuenta aquí que no debe operar bajo el camino chino, y no piense que vivado ahora se puede abrir bajo el camino chino, entonces todos los proyectos no serán un problema bajo el camino chino. Una vez olvidé que no podía sintetizar de todos modos directamente bajo el camino chino, y me quedé atrapado por un día.

Después de generar el archivo de bits, primero exporte el hardware y preste atención para incluir el flujo de bits:

 Luego puede iniciar SDK y comenzar a escribir programas ps-side.

El diseño de bloques aquí no es el enfoque de este artículo, por lo que solo es una breve introducción.

Tercero, el lado PS nos impulsa a usar la IP generada por vivado HLS

Nuestra ip es average_fun. En el SDK, vivado HLS ha generado el archivo del controlador correspondiente. #Incluir "xaverage_func.h" es suficiente. El archivo del encabezado del archivo del controlador tiene una x en frente. Otra ip auto-creada puede usarse para referencias similares :

Al ingresar este archivo de encabezado, puede encontrar que la función es muy simple, simplemente llame a la función de inicialización directamente y luego llame a la función para leer el valor en el lado PL.

 Primero use la estructura generada por HLS para crear un objeto. Este objeto representa nuestro average_fun_0 en PL. Si hay múltiples ips, se deben crear múltiples objetos.

Luego, inicialice la ip, el nombre del número de identificación de esta ip corresponde al extremo PL, pero hay más XPAR_ en el frente y _DEVICE_ID en la parte posterior, que se define específicamente en el archivo de encabezado xparameters.h.

 

En este punto, la inicialización está completa. Si necesita leer los datos enviados por PL a PS, llame a XAverage_func_Get_mean (& average_funcInstance);

 

Publicó un artículo original · Me gusta 3 · Visitas 220

Supongo que te gusta

Origin blog.csdn.net/Turn_on/article/details/105581671
Recomendado
Clasificación