VHDL

66
Diseño Digital con Lógica Programable Tutorial de Quartus II software, con VHDL. Material didáctico de la Universidad de Vigo.

description

manejo de software

Transcript of VHDL

Page 1: VHDL

Diseño Digital con Lógica Programable

Tutorial de Quartus II software, con VHDL.

Material didáctico de la Universidad de Vigo.

Page 2: VHDL

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

Page 3: VHDL

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.

Page 4: VHDL

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.

Page 5: VHDL

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.

Page 6: VHDL

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.

Page 7: VHDL

11/04/2007 Tutorial Quartus II con VHDL.

Descripción (II)Ventana del editor de texto, con el fichero VHDL recién creado.

Page 8: VHDL

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).

Page 9: VHDL

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.

Page 10: VHDL

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”).

Page 11: VHDL

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.

Page 12: VHDL

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).

Page 13: VHDL

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.

Page 14: VHDL

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”.

Page 15: VHDL

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.

Page 16: VHDL

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”.

Page 17: VHDL

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”.

Page 18: VHDL

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”.

Page 19: VHDL

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.

Page 20: VHDL

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.

Page 21: VHDL

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).

Page 22: VHDL

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.

Page 23: VHDL

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.

Page 24: VHDL

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”.

Page 25: VHDL

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.

Page 26: 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).

Page 27: VHDL

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).

Page 28: VHDL

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”.

Page 29: VHDL

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”).

Page 30: VHDL

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).

Page 31: VHDL

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).

Page 32: VHDL

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.

Page 33: 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.

Page 34: VHDL

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”).

Page 35: VHDL

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).

Page 36: VHDL

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).

Page 37: VHDL

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”).

Page 38: VHDL

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.

Page 39: VHDL

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”.

Page 40: VHDL

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.

Page 41: 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.

Page 42: VHDL

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).

Page 43: VHDL

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.

Page 44: VHDL

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.

Page 45: VHDL

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”.

Page 46: VHDL

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”).

Page 47: VHDL

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.

Page 48: VHDL

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.

Page 49: VHDL

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.

Page 50: VHDL

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).

Page 51: VHDL

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.

Page 52: VHDL

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.

Page 53: VHDL

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”.

Page 54: VHDL

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”).

Page 55: VHDL

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”.

Page 56: VHDL

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”).

Page 57: VHDL

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.

Page 58: VHDL

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.

Page 59: VHDL

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”).

Page 60: VHDL

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.

Page 61: VHDL

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.

Page 62: VHDL

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”.

Page 63: VHDL

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.

Page 64: VHDL

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

Page 65: VHDL

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.

Page 66: VHDL

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.