Uso de Xilinx Vivado Design Suite Para Preparar Módulos Verilog Para su Integración en LabVIEW FPGA

Actualizado el Jun 4, 2021

Ambiente

Software

  • FPGA Xilinx Compilation Tools
  • LabVIEW FPGA Module

Dos de los lenguajes de descripción de hardware más utilizados son VHDL y Verilog. LabVIEW FPGA soporta de forma nativa la integración de IP escrita en VHDL. Sin embargo, no es posible integrar de forma nativa IP escrita en Verilog. Este tutorial muestra cómo usar Xilinx Vivado Design Suite para preparar un módulo Verilog existente para su integración en LabVIEW FPGA a través de uno de los siguientes métodos:

  • IP de nivel de componente (CLIP): se ejecuta en paralelo, independientemente del flujo de datos del VI
  • Nodo de integración de IP (IPIN): se ejecuta según lo definido por el flujo de datos de VI

Software y archivos necesarios

Para completar este tutorial, debe tener instalado el siguiente software:

  • Entorno de desarrollo de LabVIEW
  • Módulo LabVIEW FPGA
  • Herramienta de compilación LabVIEW FPGA Module Xilinx para Vivado

Debe descargar y extraer la carpeta zip adjunta que contiene todos los archivos fuente que se usarán a lo largo del tutorial y la IP integrada a través de CLIP e IPIN.

Nota: Este documento fue creado usando LabVIEW 2018 y Vivado 2017.2. Los pasos y el texto de la interfaz de usuario pueden diferir en otras versiones de LabVIEW o Vivado.

Módulo Verilog

A los efectos de este tutorial, se ha proporcionado un módulo Verilog simple como punto de partida. El archivo se puede encontrar en la carpeta adjunta en la siguiente ubicación:

.. \ vivado_verilog_tutorial \ Source Files \ Adder.v

Adder.v crea una instancia de un sumador de 8 bits impulsado por reloj con un reinicio asincrónico y habilitación de reloj. La definición de puerto para este componente se muestra en la siguiente tabla.

PuertoDirecciónDescripción
clkenReloj de entrada que impulsa el componente
clkEnenHabilitar la señal para la sincronización del reloj
se establecenenRestablecimiento asincrónico
dataInA (7: 0)enPuerto de datos de entrada de 8 bits A
dataInB (7: 0)enPuerto de datos de entrada de 8 bits B
salida de datos (7: 0)afueraPuerto de datos de salida de 8 bits


Opciones de integración

Para integrar IP externa o de terceros en LabVIEW FPGA, puede usar IP a nivel de componente (CLIP) o el Nodo de integración de IP (IPIN). Si bien ambos permiten la integración de código externo a LabVIEW, estas opciones tienen diferentes casos de uso y limitaciones. NI recomienda que consulte la Ayuda de LabVIEW para conocer los diferentes requisitos de diseño antes de integrar cualquier IP externa.

Una diferencia que es relevante para este tutorial es que el archivo de síntesis de nivel superior para CLIP debe ser un archivo VHDL, mientras que IPIN puede usar listas de red como archivo de síntesis de nivel superior. Esto significa que la generación de un contenedor VHDL es necesaria para CLIP pero opcional para IPIN. Sin embargo, IPIN puede requerir un contenedor VHDL en escenarios específicos. Por ejemplo, cuando un tipo de puerto de nivel superior del módulo Verilog no es compatible con LabVIEW.

Configuración de un proyecto de Vivado

Para preparar un módulo Verilog para su integración en LabVIEW FPGA, primero debe crear un proyecto y configurarlo correctamente en Xilinx Vivado Design Suite.

Nota: La herramienta de compilación Xilinx del módulo LabVIEW FPGA para Vivado instala Vivado Design Suite, que usa la misma versión y configuración del compilador que el módulo LabVIEW FPGA. NI recomienda que use esta versión de Vivado Design Suite para preparar cualquier IP externa o de terceros para la integración en LabVIEW FPGA cuando use objetivos Vivado FPGA.

  1. Inicie la instalación de Xilinx Vivado Design Suite que se instala con LabVIEW FPGA Module Xilinx Compile Tool para Vivado ejecutando el siguiente archivo por lotes:

    C: \ NIFPGA \ programas \ <Vivado> \ bin \ vivado.bat
  2. Haga clic en File » New Project ... para iniciar el asistente de New Project, luego haga clic en Next.
  3. Configure la página Project Name como se muestra a continuación.

  1. Haga clic en Next para avanzar a la página Project Type, asegúrese de que RTL Project esté seleccionado, luego haga clic en Next nuevamente.
  2. En la página Add sources, agregue el módulo Adder.v Verilog y seleccione VHDL en el menú desplegable Target Language .
  1. Haga clic en Next y, a continuación, vuelva a hacer clic en Next para pasar a la página Default Part .
  2. Seleccione la parte que coincida con el dispositivo FPGA que usará en su proyecto LabVIEW FPGA. Puede encontrar los detalles de cada objetivo en la sección General de la ventana FPGA Target Properties en LabVIEW. En este tutorial, prepararemos IP para su uso en un PXIe-7975R (FlexRIO).

  3. Haga clic en Next y luego en Finish para completar el proceso de configuración.

Sintetizando el Diseño

Una vez que el proyecto está configurado y se han agregado todos los archivos fuente, el módulo Verilog debe sintetizarse en una lista de redes siguiendo el Hierarchical Design
flow
. Esto significa que la síntesis debe realizarse en modo fuera de contexto (OOC) para permitir que el módulo Verilog se utilice desde un contexto VHDL. Este tutorial utiliza el formato de archivo netlist .dcp.

  1. En Project Manager, haga clic en Settings.
  2. En Project Settings, seleccione Synthesis.
  3. En la sección Options , ingrese -mode out_of_context en More Options.
  1. Haga clic en Apply y luego en OK.
  2. En Project Manager, haga clic en Run Synthesis.
  1. En la ventana Launch Runs, haga clic en OK para comenzar la síntesis.
  2. Cuando la síntesis esté completa, en la ventana Synthesis Completed, seleccione Open Synthetized Design y haga clic en OK.
  1. Como resultado de la síntesis, se habrá creado una netlist .dcp. La netlist es un código sintetizado que define el componente que se va a envolver. En el directorio de trabajo del proyecto Xilinx Vivado Design Suite, el archivo .dcp debe ubicarse en la siguiente ubicación. Tome nota de la ubicación de este archivo.

    .. \ VerilogIntegrationTutorial.runs \ synth_1 \ Adder.dcp

Nota: los archivos .dcp no son compatibles con versiones posteriores. NI recomienda que genere estos archivos usando la instalación de Vivado Design Suite proporcionada para la versión de LabVIEW en la que está trabajando.


Creación de un wrapper VHDL

Para integrar una netlist .dcp en LabVIEW FPGA, debe crear un archivo wrapper VHDL que instancia el componente. Por lo general, la creación de este archivo no es difícil, pero puede requerir cierto conocimiento del lenguaje VHDL.

  1. En la vista Fuentes, haga clic con el botón derecho en Design Sources y seleccione Add Sources...
  2. En la ventana Add Sources, seleccione Add or create design sources y luego haga clic en Next.

  1. Haga clic en Create File.
  2. Configure la ventana Create Source File como se muestra a continuación y haga clic en OK.
  1. Haga clic en Finish.
  2. Configure la ventana Define Module como se muestra a continuación. Asegúrese de que los puertos definidos para el módulo contenedor VHDL coincidan con los puertos definidos en el módulo Verilog original. Los módulos de envoltura requieren un conjunto de puertos que correspondan a la IP original.
  1. Haga clic en OK.
  2. Haga doble clic en el nuevo archivo fuente en Design Sources en el proyecto para abrir el archivo en el editor.
  3. Cree una instancia del componente Adder en las declaraciones de arquitectura del módulo VHDL como se muestra a continuación.
  1. Asigne los puertos del componente Adder a los puertos de nivel superior correspondientes de la entidad AdderWrapper.
  1. Guarde el archivo contenedor modificado.

Integrando la IP en LabVIEW

Una vez que haya sintetizado el módulo Verilog en una lista de redes y creado un wrapper VHDL, se aplica el procedimiento de integración IP estándar para CLIP o IP Integration Node.

  1. Reúna los archivos HDL y de síntesis necesarios. Necesitará el contenedor VHDL y todas las listas de red. Para este diseño necesitará los siguientes archivos:
    • AdderWrapper.vhd: el contenedor VHDL creado en este tutorial para el módulo Verilog. Este será el módulo de nivel superior.
    • Adder.dcp: la lista de conexiones sintetizada para el módulo Verilog.
  2. Siga los pasos en el Tutorial Importación de IP externa a LabVIEW FPGA para integrar la IP en LabVIEW FPGA. Utilice los archivos enumerados anteriormente al elegir archivos de síntesis.
 

Integración avanzada usando la consola Tcl

Si bien el tutorial anterior explica el proceso que muchos usuarios pueden encontrar más intuitivo, puede ser más rápido generar los archivos necesarios utilizando la Consola Tcl desde Vivado Design Suite. La Consola Tcl le permite ejecutar muchos de los comandos subyacentes utilizados por la GUI de Vivado directamente y expone otras opciones avanzadas. En algunas situaciones, usar estos comandos puede ser más sencillo o más rápido que usar la GUI. Para el propósito de este tutorial, el enfoque estará en implementar las mismas opciones que las anteriores usando la consola. Para obtener más información sobre las funciones que se utilizan a continuación, consulte la documentación oficial de Xilinx.

Nota: El comportamiento y el formato exactos de estos comandos pueden diferir entre las versiones de Xilinx Vivado Design Suite. NI recomienda que lea la documentación de Xilinx para estos comandos antes de continuar.

Síntesis

Para realizar la síntesis y generación de la lista de conexiones, primero cree un proyecto Vivado y agregue el Módulo Verilog Adder.v al proyecto. Una vez que se agrega el módulo al proyecto, tome nota del nombre de la entidad en la vista Sources. En el caso de ejemplo del módulo Verilog Adder.v, el nombre de la entidad dentro del proyecto es Adder. Para ejecutar el proceso de síntesis, puede usar el comando synth_design de la Consola de Tcl. Para el módulo Adder utilizado en este tutorial, el comando podría verse así:

synth_design -top Adder -part xc7k410tffg900-2 -mode out_of_context

Una vez que se complete la síntesis, genere el archivo netlist usando el comando write_checkpoint.

write_checkpoint -force -noxdef "C: / Vivado Verilog Tutorial / Adder.dcp"

Este comando genera el archivo netlist .dcp en la ubicación especificada. Alternativamente, puede usar el comando write_edif para generar una lista de conexiones EDIF. Consulte la documentación oficial de Xilinx para obtener información sobre el uso del comando write_edif en la Consola Tcl.

Escribir un wrapper VHDL

Para escribir un contenedor VHDL, se puede utilizar el mismo proceso detallado en la sección Creación de un wrapper VHDL de este documento. Alternativamente, puede usar el comando write_vhdl para generar un archivo stub VHDL que puede usar para integrar el módulo Verilog. Esto sería equivalente a los pasos 1 a 7 en la sección Creación de un wrapper VHDL anterior y aún necesitaría seguir los pasos restantes. Además, debe agregar el nuevo archivo .vhd al proyecto o editarlo manualmente en otro editor. Para generar dicho archivo de código auxiliar, ejecute el siguiente comando.

write_vhdl -mode port "C: / Vivado Verilog Tutorial / AdderWrapper.vhd"

Creación de un modelo de simulación funcional

Nota: Este paso es necesario solo si planea simular IP a nivel de componente en un simulador de terceros como Xilinx ISIM . En el caso del Nodo de Integración IP, el comportamiento de la simulación se puede establecer en un Post-Synthesis model para propósitos de simulación dentro del ambiente de LabVIEW. Como la IP a nivel de componente no se puede simular directamente dentro de LabVIEW FPGA, excluir la lista de conexiones del modelo de simulación permitirá una funcionalidad completa para la mayoría de los casos de uso. Para obtener más información sobre cómo depurar código LabVIEW FPGA mediante simulación, consulte Prueba y depuración de código LabVIEW FPGA .

Si desea simular su módulo dentro de LabVIEW FPGA, NI recomienda que genere un modelo de simulación VHDL para la lista de red usando el comando write_vhdl con diferentes indicadores que los usados anteriormente. Luego puede usar el modelo de simulación como el comportamiento de simulación definido por el usuario en LabVIEW FPGA. Para generar un modelo de simulación funcional para el módulo Adder, ejecute el siguiente comando.

write_vhdl -mode funcsim "C: / Vivado Verilog Tutorial / Adder_funcsim.vhd"