Post on 07-Aug-2015
description
Diseño Digital con Lógica Programable
Tutorial de Quartus II software, con VHDL.
Material didáctico de la Universidad de Vigo.
11/04/2007 Tutorial Quartus II con VHDL.
IndiceIntroducción.Creación de proyectos.Descripción mediante VHDL.Bibliotecas de Altera.Compilación. Síntesis.Simulación funcional.Implementación.Simulación temporal.Programación del circuito.
Tutorial de diseño con VHDL y FPGAs en la herramienta de CAD Quartus II de Altera
11/04/2007 Tutorial Quartus II con VHDL.
Introducción.En este tema vamos a realizar un ejemplo tutorialdescrito en su totalidad en lenguaje VHDL, mediante la herramienta “Quartus II”, del fabricante Altera.
11/04/2007 Tutorial Quartus II con VHDL.
Creación de proyectos (I)La primera acción debe ser “Abrir un nuevo proyecto”, mediante el menú “File New Project Wizard”.A continuación, deben seleccionarse determinados parámetros relacionados con el proyecto.En primer lugar, el nombre de los directorios y del fichero principal del proyecto.
11/04/2007 Tutorial Quartus II con VHDL.
Creación de proyectos (II)A continuación, debe seleccionarse el circuito en el que se desea implementar el sistema digital que se va a diseñar, aunque posteriormente puede elegirse otro circuito distinto.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (I)Una vez creado el proyecto, se procede a ir creando (“File New”) los ficheros que describen el sistema digital. En este caso, vamos a crear un nuevo fichero de tipo VHDL.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (II)Ventana del editor de texto, con el fichero VHDL recién creado.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (III)En este primer fichero vamos a describir un contador síncrono reversible de 4 bits.Este contador debe tener puesta en estado cero asíncrona (reset), carga en paralelo síncrona (load) y señal de habilitación (enable).
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (IV)Para describir el contador en VHDL, en primer lugar definimos los terminales de entrada y salida del contador, mediante la entidad (“entity”) del circuito.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (V)A continuación, completamos la descripción del contador de 4 bits con la definición del comportamiento del circuito, mediante la sección arquitectura (“architecture”).
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (VI)Para comprobar si la sintaxis del fichero VHDL es correcta, podemos utilizar el botón “Analyze current file” de la barra de botones lateral.Si hay algún error, éste aparecerá en la ventana de mensajes.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (VII)Ahora describiremos en VHDL un decodificador de binario a 7 segmentos de CÁTODO común.Este decodificador debe tener una señal de habilitación de las salidas (enable).
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (VIII)Para describir el decodificador en VHDL, en primer lugar definimos los terminales de entrada y salida del decodificador, mediante la entidad (“entity”) del circuito.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (IX)A continuación, completamos la descripción del decodificador con la definición de la tabla de verdad del circuito, mediante la sección arquitectura (“architecture”) y la sentencia “With … select”.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (X)Ahora interconectaremos ambos circuitos en el fichero principal (top_tutorial_vhdl) mediante declaración e instanciación de los componentes creados anteriormente.Para instanciar un componente descrito en VHDL en otro fichero VHDL, hay que hacer lo siguiente:
Declarar el componente en la sección de declaraciones de la arquitectura, mediante la sentencia COMPONENT de VHDL.Instanciar el componente en la sección de descripción de la arquitectura, mediante el nombre del componente.Conectar sus entradas y salidas a las señales que corresponda.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (XI)Fichero principal (top_tutorial_vhdl.vhd) (1 de 3).Entidad del fichero principal y declaración del componente “sctr4”.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (XII)Fichero principal (top_tutorial_vhdl.vhd) (2 de 3).Declaración del componente “bin_to_7seg_cat” e instanciación del componente “sctr4”.
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (XIII)Fichero principal (top_tutorial_vhdl.vhd) (3 de 3).Instanciación del componente “bin_to_7seg_cat”.
11/04/2007 Tutorial Quartus II con VHDL.
Visor RTL (I)La herramienta visor RTL (“RTL Viewer”), disponible en el menú“Tools”, permite ver el esquema equivalente a nivel RTL (“Register Transfer Level”) de las descripciones realizadas en VHDL.Esquema correspondiente al fichero principal (top_tutorial_vhdl.vhd).El esquema que se muestra corresponde al sistema digital descrito, después del análisis y de la obtención de la lista de conexiones, pero antes de la síntesis y de la optimización.
11/04/2007 Tutorial Quartus II con VHDL.
Visor RTL (II)Esquema correspondiente al contador de 4 bits (sctr4.vhd).Estos esquemas permiten comprobar que no existen componentes adicionales inesperados o verificar que las conexiones son correctas, algo más difícil de hacer en VHDL.No obstante, a veces no resulta útil la descripción RTL, porque no sabemos cuál es la manera en que la herramienta Quartus II va a realizar el componente.
11/04/2007 Tutorial Quartus II con VHDL.
Visor RTL (III)Esquema correspondiente al decodificador de binario a 7 segmentos (bin_to_7seg_cat.vhd).
11/04/2007 Tutorial Quartus II con VHDL.
Descripción (XIV)El programa dispone de plantillas VHDL, muy útiles para la descripción de circuitos comunes. Estas plantillas están accesibles a través de la opción de menú “Edit Insert Template” o del botón correspondiente de la barra de botones.
11/04/2007 Tutorial Quartus II con VHDL.
Bibliotecas (I)Además, Quartus II incorpora bibliotecas de componentes propios, que se pueden utilizar en cualquier fichero VHDL, mediante la declaración de la biblioteca y del paquete adecuado, y la declaración e instanciación del componente.
11/04/2007 Tutorial Quartus II con VHDL.
Bibliotecas (II)Ejemplo de utilización del componente “GLOBAL” del paquete “altera_primitives_components” de la biblioteca “altera”.
11/04/2007 Tutorial Quartus II con VHDL.
Bibliotecas (III)La ayuda del programa Quartus II permite conocer los parámetros de cada componente del paquete “lpm_components” de su biblioteca “lpm”, así como el formato de declaración del componente en VHDL.
11/04/2007 Tutorial Quartus II con VHDL.
Bibliotecas (IV)Ejemplo de utilización del componente registro (“lpm_ff”) del paquete “lpm_components” de la biblioteca “lpm” de la herramienta Quartus II, mediante la declaración e instanciación del componente (1 de 2).
11/04/2007 Tutorial Quartus II con VHDL.
Bibliotecas (V)Ejemplo de utilización del componente registro (“lpm_ff”) del paquete “lpm_components” de la biblioteca “lpm” de la herramienta Quartus II, mediante la declaración e instanciación del componente (2 de 2).
11/04/2007 Tutorial Quartus II con VHDL.
Componentes parametrizables (I)Una forma más sencilla de acceder a los componentes de la biblioteca “lpm” es crear un nuevo componente parametrizable.Para ello, se debe ejecutar la opción de menú “Tools “MegaWizard Plug-In Manager”.
11/04/2007 Tutorial Quartus II con VHDL.
Componentes parametrizables (II)En este caso definiremos un registro de 8 bits mediante el componente “lpm_ff”, del grupo de componentes de almacenamiento (“storage”).
11/04/2007 Tutorial Quartus II con VHDL.
Componentes parametrizables (III)Parámetros del componente “registro_8_bits”, de tipo “lpm_ff”, del grupo de componentes de almacenamiento (“storage”) (I).
11/04/2007 Tutorial Quartus II con VHDL.
Componentes parametrizables (IV)Parámetros del componente “registro_8_bits”, de tipo “lpm_ff”, del grupo de componentes de almacenamiento (“storage”) (II).
11/04/2007 Tutorial Quartus II con VHDL.
Componentes parametrizables (V)Parámetros del componente “registro_8_bits”, de tipo “lpm_ff”, del grupo de componentes de almacenamiento (“storage”) (III).La plantilla de declaración del componente en VHDL se genera automáticamente, ya que la casilla correspondiente al fichero “nombre_componente.cmp” está marcada por defecto.Debemos marcar la casilla correspondiente al fichero “nombre_componente_inst.vhd”, para que se genere la plantilla de instanciación del componente en VHDL.
11/04/2007 Tutorial Quartus II con VHDL.
Componentes parametrizables (VI)Documentación relacionada con el componente “registro_8_bits”, del grupo de componentes de almacenamiento (“storage”), del tipo “Altera Megafunction”.Se puede acceder a ella a través del botón “Documentation” durante la definición de sus parámetros.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 34
Componentes parametrizables (VII)Una vez finalizada la parametrización del componente “registro_8_bits”, del grupo de componentes de almacenamiento (“storage”), del tipo “Altera Megafunction”, la herramienta “MegaWizard Plug-In Manager” genera automáticamente los siguientes ficheros:
Un fichero con su descripción en VHDL (“registro_8_bits.vhd”).
Un fichero con la plantilla para la declaración del componente en otros ficheros VHDL (“registro_8_bits.cmp”).
Un fichero con la plantilla para la instanciación del componente en otros ficheros VHDL (“registro_8_bits_inst.vhd”).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 35
Componentes parametrizables (VIII)Descripción en VHDL del componente “registro_8_bits”, obtenida automáticamente a partir de la ejecución de la herramienta “MegaWizard Plug-In Manager” (1 de 2).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 36
Componentes parametrizables (IX)Descripción en VHDL del componente “registro_8_bits”, obtenida automáticamente a partir de la ejecución de la herramienta “MegaWizard Plug-In Manager” (2 de 2).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 37
Componentes parametrizables (X)Plantilla obtenida automáticamente para la declaración del componente “registro_8_bits”.Esta plantilla, que se observa en la figura, se encuentra en un fichero de extensión .CMP.Para utilizar el componente en otros ficheros VHDL, es necesariocopiar esta plantilla a la sección de declaraciones de la arquitectura (antes de la palabra reservada “begin”).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 38
Componentes parametrizables (XI)Si hemos marcado la casilla correspondiente al fichero “registro_8_bits_inst.vhd”, se genera automáticamente otro fichero con la plantilla para la instanciación del componente “registro_8_bits”.Esta plantilla, que se observa en la figura, se encuentra en un fichero de extensión .VHD.Para utilizar el componente en otros ficheros VHDL, es necesariocopiar esta plantilla a la sección del cuerpo de la arquitectura (después de la palabra reservada “begin”) y conectar las señales adecuadas en el lado derecho de las asignaciones.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 39
Componentes parametrizables (XII)Se pueden modificar los parámetros del componente en cualquier momento, ejecutando de nuevo la herramienta “MegaWizard Plug-In Manager” y seleccionando la opción “Edit an existing custom megafunction variation”.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 40
Componentes parametrizables (XIII)Ejemplo de utilización del componente “registro_8_bits” creado mediante la herramienta “MegaWizard Plug-In Manager”, mediante la declaración e instanciación del componente en otro fichero VHDL.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 41
Descripción (XV)Retomando el diseño inicial que estábamos realizando, ahora es necesario añadir al proyecto los ficheros correspondientes a los circuitos descritos en VHDL y a los componentes del tipo “Altera megafunction” utilizados, para evitar posteriores errores en el proceso de compilación.Para ello, seleccionamos la opción de menú “Project Add/Remove Files in Project”, y seleccionamos los ficheros correspondientes.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 42
Descripción (XVI)A partir de un fichero VHDL es posible crear un componente utilizable en un esquemático e incorporarlo a la biblioteca de componentes.Para ello, hay que dar los siguientes pasos:
Realizar la descripción en VHDL del componente.Abrir el fichero VHDL y ejecutar la opción de menú “File Create/Update Create Symbol File for Current File”, que genera un fichero de extensión .BSF (“Block Symbol File).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 43
Descripción (XVII)A partir de este momento, el componente ya está disponible para su utilización en otros esquemáticos.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 44
Compilación y Síntesis (I)Ahora debemos ejecutar los procesos de compilación y de síntesis del sistema digital descrito, formado por el contador y el decodificador.
Esto permitirá identificar fácilmente los errores que pueda haber en la descripción realizada y continuar posteriormente el proceso de implementación.
Para realizar la síntesis, se puede abrir el compilador, mediante la opción de menú “Tools Compiler Tool” y ejecutar la opción “Start Analysis & Synthesis”, o directamente pulsar el botón correspondiente de la barra de botones.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 45
Compilación y síntesis (II)Antes de realizar la síntesis, se pueden seleccionar unas opciones distintas de las que vienen por defecto en el programa, mediante el menú “Assignments Settings”.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 46
Compilación y Síntesis (III)Ventana del compilador después de finalizar los procesos de compilación y síntesis (“Analysis & Synthesis”).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 47
Compilación y Síntesis (IV)Debemos consultar el informe de síntesis de cada circuito, en el que encontraremos avisos, errores, circuitos identificados por el programa en nuestra descripción, estimación de los recursos lógicos necesarios para la realización del circuito, etc.Para ello, podemos pulsar el botón “Report” del compilador (“Compiler Tool”) o el botón “Compiler report” de la barra de botones, y seleccionar el informe correspondiente a los procesos “Analysis & Synthesis”.A pesar de haber analizado previamente los ficheros VHDL, es frecuente que en la síntesis aparezcan avisos y errores.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 48
Visor de bajo nivel (I)La herramienta visor de bajo nivel (“Technology Map Viewer”), disponible en el menú “Tools”, permite ver el esquema equivalente a bajo nivel, de las descripciones realizadas en VHDL.Esquema correspondiente al fichero principal (top_tutorial_vhdl.vhd).El esquema que se muestra corresponde al sistema digital descrito, después del análisis y de la síntesis.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 49
Visor de bajo nivel (II)Esquema correspondiente al contador de 4 bits (sctr4.vhd).Estos esquemas permiten comprobar que no existen componentes adicionales inesperados o verificar que las conexiones son correctas, algo más difícil de hacer en VHDL.No obstante, a veces no resulta útil la descripción a este nivel, porque no sabemos cuál es la manera en que la herramienta Quartus II va a realizar el componente.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 50
Visor de bajo nivel (III)Esquema correspondiente al decodificador de binario a 7 segmentos (bin_to_7seg_cat.vhd).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 51
Verificación e ImplementaciónA partir de este momento, las etapas del proceso de diseño son exactamente las mismas que las realizadas en el ejemplo tutorial con esquemáticos.
Por ello, únicamente se mostrarán los resultados obtenidos y se comentará alguna particularidad especial.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 52
Simulación funcional (I)Resultado de la simulación funcional del sistema descrito anteriormente. En ella se observa que los retardos son nulos.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 53
Simulación funcional (II)Si se han definido las señales “qctr [3..0]” como tipo “inout”, en los resultados de la simulación aparecen de forma independiente las salidas correspondientes al contador, indicadas mediante la denominación “qctr[i]~result”.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 54
Implementación (I)Una vez realizada la simulación funcional del sistema digital completo, es el momento de realizar la implementación del mismo.Para realizarla, se debe pulsar el botón “Start Compilation” de la barra de botones.También se pueden ir ejecutando uno a uno los distintos procesos que forman parte de la implementación a través del compilador (menú“Tools Compiler Tool”).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 55
Implementación (II)Antes de realizar la implementación, se pueden seleccionar unas opciones distintas de las que vienen por defecto en el programa,mediante el menú “Assignments Settings”.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 56
Implementación (III)Informe de la fase de asignación de recursos (“fitter”).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 57
Simulación temporalResultado de la simulación temporal del sistema descrito anteriormente. En ella se observan los transitorios típicos de la simulación temporal, así como los retardos del circuito.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 58
Prueba en la placa (I)En este ejemplo, para utilizar la placa “LiveDesign Evaluation board” de la firma Altium, se necesita, al igual que en el ejemplo anterior:
Un circuito antirrebotes para el pulsador que se va a utilizar para la señal CE, que consiste en un biestable cuya señal de reloj sea de frecuencia 1 kHz.
Un circuito detector de flancos para el pulsador que se va a utilizar para la señal CE, que se conecta a la salida del circuito antirrebotes. Este circuito, se analiza a continuación.
Un inversor para la señal RESET (pulsador activo a nivel cero).
No son necesarios en este caso biestables de sincronización para el resto de las entradas, pues todas las señales que afectan al contador lo hacen de forma síncrona, excepto la puesta en estado inicial (“reset”).
Conviene conservar el circuito original, por lo que realizaremoslas modificaciones en un nuevo fichero.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 59
Prueba en la placa (II)Circuito divisor de frecuencias.
Circuito divisor de reloj por 50.
Circuito divisor de reloj por 1000.
Circuito antirrebotes y detector de flancos para un pulsador.
Nuevo fichero principal modificado, que incluye los circuitos anteriores y un inversor para el pulsador de puesta en estado inicial (“reset”).
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 60
Prueba en la placa (III)Asignación de terminales mediante el editor de restricciones correspondiente, disponible en el menú “Assignments Pins”.Fichero “top_placa.csv”, de asignación de terminales.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 61
Prueba en la placa (IV)Es necesario realizar una nueva implementación del sistema digital, después de hacer la asignación de terminales en el editor.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 62
Programación del circuito (I)Para programar la FPGA de la placa “LiveDesign” de Altium, debemos pulsar el botón “Auto Detect”, para que encuentre la FPGA que hay en la placa.A continuación, seleccionamos el fichero de programación (.sof), mediante el botón “Change File”.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 63
Programación del circuito (II)Para programar la FPGA, debemos activar la casilla “Program/Configure” y pulsar el botón “Start”.Una vez programada la FPGA, ya se puede comprobar el funcionamiento de la aplicación.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 64
Prueba en la placa (V)Prueba del sistema digital en la placa LiveDesign de Altium.Los interruptores están a CERO en la posición ON.
RESET
CE_CTR
DIN [3..0]enable_decod, UP_DOWN, LOAD
Q_CTR [3..0]
Estado contadorya decodificado
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 65
Archivar el proyectoUna vez terminado el proyecto, es conveniente archivarlo mediante la opción “Project Archive Project”, que genera un fichero .QAR (“Quartus II Archive File”) que contiene todos los archivos del proyecto.Archivo del proyecto (.qar) con el proyecto completo de ejemplo realizado con la herramienta Quartus II versión 5.1.
11/04/2007 Tutorial Quartus II con VHDL. Luis Jacobo Álvarez Ruiz de Ojeda 66
Bibliografía básica.Tutorial de la herramienta Quartus II, disponible en la ayuda del programa.
Tutorial en PDF (“tut_quartus_intro_vhdl.pdf”), disponible en la página web de Altera.
Manual de la herramienta Quartus II en PDF (“quartusii_handbook_5_1.pdf”), disponible en la página web de Altera.
[ALTERA] Dirección de Internet, http://www.altera.com
[ÁLVAREZ 04] ÁLVAREZ RUIZ DE OJEDA, L.J., Diseño Digital con Lógica Programable, Editorial Tórculo, Santiago de Compostela, 2004.