Estructura y Tecnologia de Computadores 3 - Libro Problemas

January 4, 2018 | Author: api-19970781 | Category: Vhdl, Integrated Circuit, Logic Gate, Electronic Engineering, Digital & Social Media
Share Embed Donate


Short Description

Download Estructura y Tecnologia de Computadores 3 - Libro Problemas...

Description

´ A DISTANCIA (UNED) UNIVERSIDAD NACIONAL DE EDUCACION ´ ´ ESCUELA TECNICA SUPERIOR DE INGENIER´IA INFORMATICA

Casos prácticos de diseño de circuitos digitales con VHDL

Texto de problemas de la asignatura “Estructura y Tecnología de los Computadores III” Curso 2007/08

Alfonso Urquía Carla Martín Villalba Departamento de Inform´atica y Autom´atica, UNED Juan del Rosal 16, 28040 Madrid, Espa˜ na {aurquia,carla}@dia.uned.es http://www.euclides.dia.uned.es

Índice

1 Fundamentos 1.1. 1.2. 1.3. 1.4. 1.5. 1.6.

1

Lenguajes para la descripci´ on de hardware . . . . . . Ciclo de dise˜ no de los circuitos digitales . . . . . . . Propiedades de los circuitos digitales . . . . . . . . . Simulaci´ on de eventos discretos . . . . . . . . . . . . Test de los circuitos . . . . . . . . . . . . . . . . . . Dos simuladores de VHDL’93: VeriBest y ModelSim

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. 1 . 4 . 5 . 8 . 12 . 16

2 Conceptos básicos de VHDL 2.1. Definici´ on de la entidad de dise˜ no . . . . . 2.2. Entity . . . . . . . . . . . . . . . . . . . . 2.3. Architecture . . . . . . . . . . . . . . . . . 2.3.1. Asignaciones concurrentes . . . . . 2.3.2. Bloque process . . . . . . . . . . . 2.3.3. Descripci´ on de la estructura . . . . 2.3.4. Constantes generic . . . . . . . . . 2.4. Configuration . . . . . . . . . . . . . . . . 2.5. Se˜ nales, variables y constantes . . . . . . 2.5.1. Tipos de datos . . . . . . . . . . . 2.5.2. Atributos . . . . . . . . . . . . . . 2.5.3. Operadores . . . . . . . . . . . . . 2.6. Librer´ıas . . . . . . . . . . . . . . . . . . . 2.7. Modelado del retardo . . . . . . . . . . . . 2.7.1. Sentencia wait . . . . . . . . . . . 2.7.2. Retardos en la asignaci´ on a se˜ nales 2.7.3. Retardo inercial y de transporte . 2.7.4. Retardo delta . . . . . . . . . . . . 2.7.5. Caso pr´ actico . . . . . . . . . . . . 2.8. Assert . . . . . . . . . . . . . . . . . . . . 2.9. Procedimientos y funciones . . . . . . . .

19 . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

20 20 21 22 23 24 28 28 28 29 34 35 37 38 38 39 39 40 41 43 44

ii

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

3 Casos prácticos de diseño de circuitos combinacionales 3.1. S´ıntesis de l´ ogica combinacional . . . . . . . . . . . . . 3.1.1. Empleo de sentencias concurrentes . . . . . . . 3.1.2. Empleo de bloques process . . . . . . . . . . . 3.2. Funciones l´ ogicas . . . . . . . . . . . . . . . . . . . . . 3.2.1. Modelado de las funciones l´ ogicas . . . . . . . . 3.2.2. Programaci´ on del banco de pruebas . . . . . . 3.3. Multiplexor de 4 entradas . . . . . . . . . . . . . . . . 3.3.1. Bloque process, sentencia if . . . . . . . . . . . 3.3.2. Bloque process, sentencias if y case . . . . . . . 3.3.3. Sentencias concurrentes . . . . . . . . . . . . . 3.4. Restador completo de 1 bit . . . . . . . . . . . . . . . 3.4.1. Descripci´ on del comportamiento . . . . . . . . 3.4.2. Descripci´ on de la estructura . . . . . . . . . . . 3.4.3. Programaci´ on del banco de pruebas . . . . . . 3.4.4. Banco de pruebas usando un procedimiento . . 3.4.5. Banco de pruebas usando una funci´ on . . . . . 3.5. Sumador binario paralelo con propagaci´ on de arrastre 3.5.1. Dise˜ no de un sumador completo . . . . . . . . 3.5.2. Banco de pruebas de sumador completo . . . . 3.5.3. Dise˜ no del sumador de 4 bits . . . . . . . . . . 3.6. Bus bidireccional y memorias . . . . . . . . . . . . . . 3.6.1. Memoria de s´ olo lectura . . . . . . . . . . . . . 3.6.2. Memoria de lectura y escritura . . . . . . . . . 3.6.3. Bus bidireccional . . . . . . . . . . . . . . . . . 3.7. Unidad aritm´etico l´ ogica (ALU) . . . . . . . . . . . . . 3.7.1. Modelado mediante asignaci´ on concurrente . . 3.7.2. Modelado mediante bloque process . . . . . . . 3.7.3. Programaci´ on del banco de pruebas . . . . . . 3.8. Conversor de BCD a binario . . . . . . . . . . . . . . . 3.8.1. Circuito conversor . . . . . . . . . . . . . . . . 3.8.2. Banco de pruebas . . . . . . . . . . . . . . . . 3.9. Codificador 4:2 con prioridad . . . . . . . . . . . . . . 3.9.1. Dise˜ no del circuito . . . . . . . . . . . . . . . . 3.9.2. Banco de pruebas . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Casos prácticos de diseño de circuitos secuenciales 4.1. Dise˜ no de circuitos secuenciales s´ıncronos . 4.1.1. Circuito detector de secuencias . . . 4.2. S´ıntesis de l´ ogica secuencial . . . . . . . . . 4.2.1. Sentencias condicionales incompletas 4.2.2. Sentencias condicionales completas . 4.2.3. Retardos . . . . . . . . . . . . . . . 4.2.4. Inicializaci´ on . . . . . . . . . . . . . 4.2.5. Bloques process . . . . . . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

47 48 50 50 50 51 54 55 57 59 60 61 62 65 68 70 71 72 75 77 77 78 79 80 82 83 84 85 89 90 91 93 93 94 99

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

99 100 102 102 103 103 103 104

´ Indice

iii

4.3. Flip-flop JK . . . . . . . . . . . . . . . 4.3.1. Dise˜ no del flip-flop . . . . . . . 4.3.2. Banco de pruebas . . . . . . . 4.4. M´ aquinas de estado finito de Moore . 4.4.1. Dise˜ no de la m´ aquina . . . . . 4.4.2. Banco de pruebas . . . . . . . 4.4.3. Modelado estructural . . . . . 4.5. M´ aquinas de estado finito de Mealy . . 4.5.1. Dise˜ no de la m´ aquina . . . . . 4.5.2. Banco de pruebas . . . . . . . 4.6. Descripci´ on VHDL de alto nivel . . . . 4.6.1. Circuito detector de secuencia .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

. . . . . . . . . . . .

105 105 106 109 110 113 117 119 119 126 130 130

´ APENDICES

133

A VeriBest VB99.0

133

A.1. Instalaci´ on . . . . . . . . . . . . . . . . . . . . . . A.2. Circuito digital ejemplo: buffer triestado . . . . . . A.2.1. Modelo VHDL del buffer triestado . . . . . A.2.2. Banco de pruebas . . . . . . . . . . . . . . A.3. Edici´ on y compilaci´ on de un modelo . . . . . . . . A.3.1. Arranque del simulador VeriBest VHDL . . A.3.2. Creaci´ on de un espacio de trabajo . . . . . A.3.3. Edici´ on de un fichero . . . . . . . . . . . . . A.3.4. A˜ nadir un fichero al espacio de trabajo . . . A.3.5. Compilaci´ on de un fichero . . . . . . . . . . A.3.6. Banco de pruebas . . . . . . . . . . . . . . A.4. Simulaci´ on y visualizaci´ on de los resultados . . . . A.4.1. Establecer las condiciones de la simulaci´ on A.4.2. Activaci´ on del simulador . . . . . . . . . . . A.4.3. Simulaci´ on y visualizaci´ on de resultados . . A.5. Depurado usando el debugger . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

B ModelSim PE Student Edition B.1. Instalaci´ on . . . . . . . . . . . . . . . . . . B.2. Circuito digital ejemplo: buffer triestado . . B.2.1. Modelo VHDL del buffer triestado . B.2.2. Banco de pruebas . . . . . . . . . . B.3. Edici´ on y compilaci´ on de un modelo . . . . B.3.1. Arranque del simulador . . . . . . . B.3.2. Creaci´ on de un proyecto . . . . . . . B.3.3. A˜ nadir ficheros al proyecto . . . . . B.3.4. Compilaci´ on de un fichero . . . . . . B.3.5. Banco de pruebas . . . . . . . . . . B.4. Simulaci´ on y visualizaci´ on de los resultados

133 134 134 135 136 136 136 137 137 138 140 140 140 141 142 144 147

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

147 148 148 149 150 150 151 152 156 157 160

iv

A. Urqu´ıa, C. Mart´ın Villalba

B.4.1. B.4.2. B.4.3. B.4.4.

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

Activaci´ on del modo simulaci´ on Visualizaci´ on de los resultados Ejecuci´ on de la simulaci´ on . . . Inserci´ on de puntos de ruptura

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

160 161 162 163

Índice alfabético

167

Bibliografía

169

1

Fundamentos

Objetivos. Una vez estudiado el contenido del tema, deber´ıa saber: – Discutir la finalidad de los lenguajes para la descripci´ on del hardware (HDL) y algunas de las principales ventajas que presenta su uso. – Discutir el ciclo de dise˜ no del hardware digital y el papel que desempe˜ nan en el ciclo de dise˜ no los HDL. – Discutir los conceptos fundamentales de la simulaci´ on de eventos discretos, en particular la gesti´on del reloj de la simulaci´ on y del calendario de eventos. – Realizar, con “l´ apiz y papel”, la simulaci´ on de eventos discretos de circuitos digitales, tal como se muestra en el Caso Pr´actico de la Secci´on 1.4. – Discutir las siguientes propiedades de los circuitos digitales: el retardo de los dispositivos, su ejecuci´on concurrente, la marginalidad en el dise˜ no y la fortaleza de las se˜ nales. – Discutir qu´e son los a´rboles de buffers y cu´ al es su finalidad. – Discutir el prop´ osito y los fundamentos del test en dise˜ no y manufactura, as´ı como los conceptos: modelo de fallos, cobertura del test y calidad del test. – Discutir la utilidad y composici´ on de los bancos de pruebas. – Instalar en su propio ordenador y realizar las operaciones b´ asicas de manejo de alg´ un entorno de simulaci´ on de VHDL’93, tal como ModelSim (preferible) o VeriBest. Estas operaciones b´ asicas incluyen al menos: edici´ on de modelos y depurado usando el debugger, simulaci´ on y visualizaci´ on de los resultados.

1.1

Lenguajes para la descripción de hardware Los sistemas digitales se han ido haciendo m´ as y m´ as complejos durante las pasadas d´ecadas. Este incremento en la complejidad responde, a grandes rasgos, a la Ley de Moore, que establece que el avance tecnol´ ogico posibilita que cada aproximadamente 18 meses se doble el n´ umero de transistores que es posible alojar en un circuito integrado.

2

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

De esta forma, en la d´ecada de 1970 un circuito integrado t´ıpico conten´ıa decenas de miles de transistores. En la d´ecada de 1980, la capacidad aument´ oa cientos de miles de transistores, y en la d´ecada de 1990 fue del orden de decenas de millones. En la d´ecada de 2000, la capacidad de los circuitos integrados es del orden de miles de millones de transistores. En los a˜ nos 70, cuando se fabricaba un circuito integrado, se documentaba su funcionamiento empleando una combinaci´ on de esquem´ aticos (representaci´ on gr´ afica de los componentes del circuito), diagramas de transici´ on de estados y lenguaje natural (por ejemplo, ingl´es). Esta documentaci´ on pod´ıa consistir en varios cientos de p´ aginas. Los ingenieros, que compraban el circuito integrado para usarlo en sus propios dise˜ nos, ten´ıan que leer esta documentaci´ on para entender el funcionamiento del circuito integrado. Sin embargo, leer cientos de p´ aginas no era tarea f´ acil. Adem´ as, en ocasiones la documentaci´ on conten´ıa errores o ambig¨ uedades. La consecuencia de ello era que frecuentemente los ingenieros ten´ıan problemas para emplear los circuitos integrados en el desarrollo de sus propios sistemas. Debido a esta situaci´ on, el Departamento de Defensa de EE.UU. busc´ o un procedimiento mediante el cual los fabricantes de circuitos integrados pudieran especificar de forma precisa el funcionamiento de los circuitos. Con esta motivaci´ on, el Departamento de Defensa de EE.UU. inici´ o el desarrollo de un lenguaje para la descripci´ on del hardware, para lo cual estableci´ o un grupo de trabajo compuesto por expertos de varias disciplinas, pertenecientes a diferentes compa˜ n´ıas. Un lenguaje para la descripci´ on del hardware o HDL (siglas que provienen del ingl´es: Hardware Description Language) es un lenguaje, legible tanto por las m´ aquinas como por los seres humanos, ideado para permitir la descripci´ on del hardware. Un HDL describe de forma precisa y rigurosa el funcionamiento, pudiendo ser simulado en un ordenador con el fin de reproducir exactamente el funcionamiento del circuito integrado. La simulaci´ on por ordenador permite obtener el valor de las se˜ nales de salida del circuito integrado para una determinada secuencia de se˜ nales de entrada. El HDL que el Departamento de Defensa de EE.UU. cre´ o en los a˜ nos 80 se llam´ o VHDL. Las siglas VHDL provienen de VHSIC Hardware Description Language. VHSIC es un acr´ onimo de Very High Speed Integrated Circuit, que fue el nombre del proyecto llevado a cabo por el Departamento de Defensa de EE.UU. La sintaxis de VHDL es muy similar a la del lenguaje de programaci´ on ADA. En 1987, el Institute of Electrical and Electronics Engineers (IEEE) adopt´ o VHDL como el est´ andar n´ umero 1076. El establecimiento de un est´ andar del lenguaje tiene una ventaja fundamental: las compa˜ n´ıas desarrolladoras de software de simulaci´ on tienen una definici´ on claramente establecida del lenguaje al que deben dar soporte.

Cap´ıtulo 1

Fundamentos

3

Ventajas de los HDL En la actualidad, la casi totalidad de los dise˜ nadores de circuitos digitales de cierta complejidad usan para realizar sus dise˜ nos lenguajes para la descripci´ on del hardware. El empleo de HDL presenta ventajas respecto al empleo de descripciones basadas en esquem´ aticos. Algunas de ellas son las siguientes: 1. Puesto que una descripci´ on HDL es simplemente un fichero de texto, es mucho m´ as portable que un dise˜ no esquem´ atico, que debe ser visualizado y editado empleando la herramienta gr´ afica espec´ıfica del entorno de CAD (Computer-Aided Design - Dise˜ no asistido por ordenador) con el que se ha creado. 2. Una descripci´ on esquem´ atica u ´ nicamente describe el dise˜ no de manera estructural, mostrando los m´ odulos y la conexi´ on entre ellos. Por el contrario, la descripci´ on del circuito usando un HDL puede realizarse bien mostrando la estructura, o bien describiendo el comportamiento. Es decir, los HDL permiten describir el comportamiento que se desea que tenga el circuito, sin hacer ninguna referencia a su estructura. Las herramientas de s´ıntesis permiten generar autom´ aticamente la estructura del circuito l´ ogico a partir de la descripci´ on de su comportamiento. 3. El mismo HDL que se ha usado para la descripci´ on del circuito, puede emplearse para describir los vectores de test y los resultados esperados del test. Los vectores de test son los valores de las se˜ nales aplicadas a los pines de entrada del circuito con la finalidad de probar si el funcionamiento del circuito es correcto. As´ı pues, pueden realizarse los programas de test (vectores de test e instantes en los cuales son aplicados) del circuito a medida que se dise˜ na el propio circuito, pudi´endose con ello ir realizando diferentes pruebas a medida que se avanza en el dise˜ no. Como ventajas a˜ nadidas, la descripci´ on de los programas de test usando HDL es altamente portable y repetible.

HDL más ampliamente usados En la actualidad, los HDL m´ as ampliamente usados son Verilog HDL y VHDL. Ambos son lenguajes est´ andar de IEEE para el modelado y simulaci´ on de hardware. – Verilog se cre´ o, a principios de los a˜ nos 80, como un lenguaje propiedad de la compa˜ n´ıa Philip Moorby, compa˜ n´ıa que a˜ nos m´ as tarde fue adquirida por Cadence Design Systems. Posteriormente, Verilog se hizo de dominio p´ ublico y se promovi´ o como un est´ andar de IEEE en el a˜ no 1995, denominado IEEE 1364. – Como se ha explicado anteriormente, VHDL fue desarrollado en 1983 por el Departamento de Defensa de los EE.UU. con la finalidad de servir como lenguaje est´ andar para la descripci´ on de hardware. En el a˜ no 1987

4

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

se convirti´ o en un est´ andar de IEEE (IEEE 1067-1987). Posteriormente, se incorporaron mejoras al lenguaje que dieron lugar a dos actualizaciones del est´ andar: la primera en 1993 (IEEE 1076-1993) y la segunda en 2001 (IEEE 1076-2001). A principios del a˜ no 2000 se desarroll´ o otro HDL denominado SystemC, el cual consiste en un conjunto de librer´ıas en C++. SystemC se convirti´ o en el est´ andar 1666 de IEEE en el a˜ no 2005.

1.2

Ciclo de diseño de los circuitos digitales El empleo de HDL es pr´ actica habitual en las diferentes fases del ciclo de dise˜ no de circuitos digitales. En la Figura 1.1 se muestra el ciclo de actividades que se realizan durante el ciclo de dise˜ no e implementaci´ on de circuitos digitales de relativa complejidad. En primer lugar, el dise˜ nador debe establecer las especificaciones del dise˜ no, en t´erminos de qu´e se espera que haga el circuito y qu´e restricciones debe satisfacer (frecuencia de reloj, retardos, tama˜ no, etc.). A continuaci´ on, el dise˜ nador debe crear un dise˜ no de alto nivel del circuito, para lo cual puede emplear un lenguaje para la descripci´ on de hardware (HDL), por ejemplo VHDL o Verilog. Seguidamente, debe desarrollar un conjunto de programas de test (usando tambi´en VHDL o Verilog) y, si es posible, usar estos programas para testear el dise˜ no de alto nivel, usando para ello una herramienta de simulaci´ on (verificaci´ on funcional). En funci´ on de los resultados de la simulaci´ on de los tests, puede ser preciso modificar el dise˜ no de alto nivel, repiti´endose los pasos anteriores tantas veces como sea preciso. Una vez el dise˜ no de alto nivel funciona adecuadamente, debe traducirse al nivel de puertas l´ ogicas o de transistores. Este proceso se denomina s´ıntesis. S´ıntesis es la generaci´ on autom´ atica del dise˜ no del circuito a partir de la descripci´ on de su comportamiento. El resultado obtenido de la s´ıntesis, denominado netlist, es una descripci´ on de todas las conexiones y componentes que deben componer el circuito. La descripci´ on a nivel de puertas o transistores obtenida a partir de una descripci´ on en HDL puede diferir significativamente, dependiendo de la forma en que se ha programado el modelo en HDL y de la herramienta de s´ıntesis empleada. Las herramientas de s´ıntesis proporcionan numerosas opciones que permiten al dise˜ nador especificar c´ omo debe realizarse. En particular, permiten especificar el nivel de esfuerzo a emplear por la herramienta en la optimizaci´ on autom´ atica del circuito, tanto en lo que respecta a la reducci´ on del a´rea del circuito como en lo que respecta a sus prestaciones. Asimismo, las herramientas de s´ıntesis permiten especificar qu´e m´ odulos del circuito no deben ser optimizados. El dise˜ no a nivel de puertas o transistores debe ser vuelto a testear mediante simulaci´ on (verificaci´ on de tiempos), usando, si es posible, el mismo conjunto de tests que se realizaron sobre el dise˜ no de alto nivel. El objetivo es estudiar si el dise˜ no se comporta como debe y si satisface todas las restricciones que se

Cap´ıtulo 1

5

Fundamentos

             

          

           

                       

                   

                      

           

 !   " !   #$

         

Figura 1.1: Ciclo de dise˜ no del hardware digital.

impusieron en la fase de especificaci´ on. Si se detecta un problema a este nivel, debe volverse al correspondiente paso del ciclo de dise˜ no. Una vez el dise˜ no ha superado estos tests, puede implementarse usando PLD (Programmable Logic Device), FPGA (Field-Programmable Gate Array), ASIC (Application-Specific Integrated Circuit), etc. Se emplean herramientas software para fabricar (en el caso de los ASIC) o programar (en el caso de los FPGA) el circuito integrado a partir de la netlist. Una vez implementado, el circuito integrado puede ser testado con ayuda de un generador de patrones (para generar los vectores de test) y un analizador l´ ogico u osciloscopio (para medir las salidas).

1.3

Propiedades de los circuitos digitales Los circuitos digitales reales tienen algunas caracter´ısticas importantes que afectan a la manera en que deben ser modelados y dise˜ nados. Estas caracter´ısticas son debidas tanto a los transistores que componen las puertas l´ ogicas como a las conexiones entre ellos. Entre las m´ as importantes est´ an las siguientes.

6

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

Retardo de los dispositivos En los sistemas f´ısicos suelen considerarse dos tipos de retardos: el retardo inercial y el retardo puro o de transporte. Se va a emplear un motor el´ectrico como ejemplo para ilustrar la diferencia entre ambos tipos de retardo. Cuando se enciende el motor, ´este empieza a girar y su velocidad aumenta hasta que alcanza la velocidad final. Este proceso puede llevar varios segundos, siendo debido principalmente este retardo a la inercia del rotor del motor. Si se apaga el motor antes de que ´este alcance la velocidad final, la velocidad del motor disminuye inmediatamente. Esto no suceder´ıa en el caso de un retardo puro. Como ejemplo de retardo puro, consideremos que el motor est´a en una nave espacial rumbo a J´ upiter. Los comandos para encender y apagar el motor se env´ıan desde la tierra y tardan 10 minutos en llegar a la nave. Supongamos que se env´ıa un comando para encender el motor y pasados dos minutos se env´ıa otro comando para apagarlo. El comando para apagar el motor llegar´ıa 2 minutos despu´es que el comando para encenderlo, causando que el motor estuviese encendido durante dos minutos. La se˜ nal recibida es exactamente igual que la enviada pero desplazada 10 minutos en el tiempo. Los retardos puros pueden representarse por simples desplazamientos en el tiempo de la se˜ nal, ya que la se˜ nal en s´ı misma no se modifica. El retardo inercial es adecuado para modelar los retardos a trav´es de dispositivos tales como los transistores y las puertas l´ ogicas. Un cambio en la entrada de un dispositivo se ha de mantener estable durante cierto tiempo para que este valor se propague a su salida. Las puertas act´ uan as´ı como filtros paso baja. Consideremos un inversor con un retardo de 2 ns. El inversor necesita que la entrada se mantenga estable durante al menos 2 ns para que se produzca un cambio en su salida. Por tanto, un pulso de 1 ns de duraci´ on no provoca cambios en su salida, pero si los provoca un pulso de 5 ns. Si la primera transici´ on del pulso se recibe en el instante 100 ns, la respuesta de la puerta comienza a transmitirse en el instante 102 ns. Por otro lado, el retardo de transporte (o puro) es adecuado para modelar retardos a trav´es de dispositivos con poca inercia, tales como las l´ıneas de metal construidas en el chip para conectar los dispositivos.

Ejecución concurrente Los m´ odulos l´ ogicos se ejecutan concurrentemente. Cuando cambia el valor de una se˜ nal de entrada a varios m´ odulos, todos estos m´ odulos deben ser ejecutados concurrentemente. As´ı pues, los HDL deben ser capaces de describir de manera precisa este comportamiento concurrente y el simulador debe ser capaz de simularlo. La metodolog´ıa aplicada para ello por el simulador es la simulaci´ on de eventos discretos.

Diseños marginales Los retardos de los dispositivos dependen de la condiciones de fabricaci´ on del chip. En general, existen variaciones en el valor de los retardos de los chips fabricados

Cap´ıtulo 1

Fundamentos

7

en diferentes obleas, e incluso existen variaciones entre los chips fabricados en posiciones distantes dentro de una misma oblea. Por este motivo, no es buena idea dise˜ nar un circuito cuyo funcionamiento dependa de que los retardos tomen un determinado valor o que su magnitud sea m´ınima. Este tipo de circuitos puede funcionar correctamente cuando son simulados, ya que las se˜ nales simuladas llegan a los m´ odulos en un determinado orden, que viene determinado por los valores de los retardos contenidos en el modelo. Sin embargo, si el orden de llegada de los cambios en las se˜ nales depende del valor de los retardos, y los retardos simulados no se corresponden con los existentes en el dise˜ no f´ısico, entonces ese dise˜ no producir´ a chips que no funcionen, o que funcionen s´ olo una parte del tiempo.

Fortaleza de las señales Las se˜ nales de los circuitos digitales reales poseen una determinada “fortaleza”, que determina en qu´e medida las transiciones en el valor de la se˜ nal son abruptas (y, por tanto, los retardos debidos a esa se˜ nal), y el n´ umero y tipo de entradas a m´ odulos que pueden ser conectados a esa se˜ nal. Esta caracter´ıstica de las se˜ nales, que puede ser modelada en VHDL y en Verilog, viene determinada por los niveles de tensi´ on del ‘0’ y del ‘1’ l´ ogicos (por ejemplo, para un ‘1’ l´ ogico, en qu´e medida est´ a el voltaje de la se˜ nal pr´ oximo al voltaje de la alimentaci´on), y por la cantidad de corriente que puede proporcionar y aceptar el dispositivo que genera la se˜ nal. En un circuito digital t´ıpico, la transferencia de un valor l´ ogico desde un pin de salida de un m´ odulo, a varios pines de entrada de otros m´ odulos, precisa de la transferencia de carga el´ectrica hacia los pines de entrada (en el caso de ‘1’ l´ ogico) o hacia el pin de salida (en el caso de ‘0’ l´ ogico). El pin de salida debe tener la capacidad de hacer de “fuente” y de “sumidero” de toda la corriente necesaria. Desde el punto de vista pr´ actico, esto implica que la salida de un m´ odulo puede ser conectada como m´ aximo a un determinado n´ umero de entradas de otros m´ odulos. En aquellos casos en que la se˜ nal deba conectarse a un n´ umero de m´ odulos superior a este n´ umero m´ aximo, entonces debe emplearse un a ´rbol de buffers. En la Figura 1.2 se muestra un a´rbol de buffers que lleva una se˜ nal (out) a 16 m´ odulos (in 0, ..., in 15), de tal forma que la salida de los buffers se conecta u ´ nicamente a 4 entradas. El uso del a´rbol de buffers tiene un beneficio a˜ nadido: igualar los retardos de las se˜ nales de entrada a todos los m´ odulos, ya que el a´rbol de buffers est´ a dise˜ nado de modo que la longitud de las l´ıneas de todas sus ramas sea la misma. Este tipo de a´rbol de buffers se emplea para llevar la se˜ nal de reloj a los flip-flops en los circuitos secuenciales s´ıncronos, en los cuales es importante que la se˜ nal de reloj llegue a todos los flip-flops aproximadamente en el mismo instante.

8

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

´ Figura 1.2: Arbol de buffers para llevar una se˜ nal a 16 m´odulos.

1.4

Simulación de eventos discretos A la hora de escribir c´ odigo en cualquier lenguaje para la descripci´ on de hardware, resulta u ´ til saber de qu´e manera se realizar´ a la simulaci´ on de ese c´ odigo. La mayor´ıa de las herramientas de simulaci´ on de HDL emplean una metodolog´ıa denominada simulaci´ on de eventos discretos. En la simulaci´ on de eventos discretos se lleva una lista global de eventos ordenados en el tiempo, que se denomina calendario de eventos. Los eventos se representan en el calendario de eventos por el siguiente par de valores: nuevo valor de la se˜ nal e instante de tiempo en que est´ a planificado que se realice esta asignaci´ on. Los eventos est´ an ordenados de menor a mayor instante de ejecuci´ on en el calendario. A continuaci´ on se describe el algoritmo de la simulaci´ on, que consta de los siguientes pasos: Paso 1. En el instante de inicio de la simulaci´ on, se activa el evento “Inicio de la Simulaci´ on”. Como parte de las acciones asociadas a la ejecuci´ on de este evento, se pone el reloj de la simulaci´ on a cero y se registran los nuevos eventos en el calendario de eventos. Paso 2. Se extrae el primer evento del calendario. Paso 3. Se actualiza el reloj de la simulaci´ on al instante de ejecuci´ on del evento.

Cap´ıtulo 1

9

Fundamentos

Paso 4. Se ejecuta el evento y, si procede, se actualiza el calendario de eventos. Paso 5. Se comprueba si existen m´ as eventos en el calendario de eventos. Si existen m´ as eventos se vuelve al paso 1. En caso contrario, se avanza al paso 6. Paso 6. Fin de la simulaci´ on. El anterior algoritmo de la simulaci´ on no describe c´ omo se actualiza el calendario de eventos. Los pasos a seguir para actualizar el calendario de eventos dependen del tipo de retardo del evento. Por defecto, se considera que los dispositivos tienen retardo inercial. El tratamiento de un evento sin retardo sobre una se˜ nal se reduce al caso de un evento con retardo (ya sea inercial o de trasporte) haciendo el valor del retardo cero. A continuaci´ on se describen los pasos a seguir para actualizar el calendario de eventos cuando en el nuevo evento sobre la se˜ nal existe un retardo inercial. Vamos a considerar que la se˜ nal sobre la que se produce el evento se denomina A, el nuevo valor de la se˜ nal es Anew , el valor del retardo inercial es ret y el instante actual de simulaci´ on es tactual . Para actualizar el calendario de eventos hay que seguir los siguientes pasos: 1. Se borran aquellos eventos sobre A cuyo instante de ejecuci´ on sea igual o mayor que tactual + ret. 2. Se insertan los nuevos eventos en el calendario de eventos. 3. Todos los antiguos eventos sobre A cuya ejecuci´ on est´e planificada que suceda en un instante de tiempo comprendido en el intervalo (tactual , tactual + ret) y asignen a A un valor diferente de Anew se borran. Si el evento sobre la se˜ nal A tuviese retardo de transporte (que denominamos rettransp ) en lugar de un retardo inercial habr´ıa que dar los siguientes pasos para actualizar el calendario de eventos: 1. Se borran todos los eventos sobre A existentes en el calendario de eventos cuyo instante de ejecuci´ on sea igual o mayor tactual + rettransp . 2. Se insertan los nuevos eventos en el calendario de eventos.

Caso práctico Supongamos que se ha descrito el circuito mostrado en la Figura 1.3 usando un HDL. La puerta NAND tiene un retardo de 1 ns y la puerta OR de 2 ns. Las dos entradas, x1 y x2 , tienen el valor ‘1’ en el instante 0 ns. Las dos siguientes asignaciones describen, respectivamente, el comportamiento de la salida de la puerta NAND (s) y de la puerta OR (y) del circuito digital:

s ← x1 nand x2 con retraso 1 ns

y ← s or x2 con retraso 2 ns

(1.1) (1.2)

10

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

s

Figura 1.3: Circuito ejemplo.

A continuaci´ on se describen los pasos en la simulaci´ on de dicho circuito: Paso 1. En el instante inicial el reloj de la simulaci´ on vale 0 ns y se asigna nuevo valor a las se˜ nales x1 y x2 . Debido a ello, se ejecutan las asignaciones que tienen en su lado derecho x1 o x2 . En este caso, se ejecutan las asignaciones correspondientes a la puerta NAND (asignaci´ on 1.1) y a la puerta OR (asignaci´ on 1.2). Se producen dos nuevos eventos, denominados E0 y E1 : – El evento E0 , planificado para el instante 1 ns, se debe a la ejecuci´ on de la asignaci´ on de la puerta NAND. En este evento se asigna a s el valor ‘0’. on de la asignaci´ on de la puerta OR. – El evento E1 se debe a la ejecuci´ En este evento se asigna a y el valor ‘1’ en el instante 2 ns. Observa que la asignaci´ on y ← x1 or 1 es equivalente a y ← 1 independientemente del valor de x1 . Si la se˜ nal x2 valiese ‘0’ en lugar de ‘1’ el valor de y ser´ıa indefinido hasta que s tuviese un valor definido. Adem´ as, se incorpora al calendario de eventos un evento, llamado E2 , programado para el instante 5 ns, y cuya acci´ on es: x2 ← 0. Los valores de las se˜ nales y el calendario de eventos en el instante 0 ns se presentan en las tablas siguientes: Se˜ nal Valor x1

‘1’

x2

‘1’

s

‘U’ (valor indefinido)

y

‘U’ (valor indefinido)

Calendario de eventos E0 1 ns s ← 0

E1 2 ns y ← 1

E2 5 ns x2 ← 0

Paso 2. El simulador extrae el evento E0 del calendario y lo ejecuta. El valor de la se˜ nal s pasa a ser cero y el reloj de la simulaci´ on vale 1 ns . El cambio en la se˜ nal s produce que se ejecute la asignaci´ on 1.2 y se genere un nuevo evento (E3 ). A continuaci´ on se muestran los valores de las se˜ nales y el calendario de eventos en el instante 1 ns. Se˜ nal Valor x1

’1’

x2

’1’

s

’0’

y

’U’ (valor indefinido)

Calendario de eventos E1 2 ns y ← 1 E3 3 ns y ← 1

E2 5 ns x2 ← 0

Cap´ıtulo 1

11

Fundamentos

Paso 3. El simulador extrae el evento E1 del calendario y lo ejecuta. Entonces, el valor de la se˜ nal y pasa a ser uno y el reloj de la simulaci´ on vale 2 ns . El cambio en la se˜ nal y no genera ning´ un evento. Los valores de las se˜ nales y el calendario de eventos en el instante 2 ns se muestran a continuaci´ on. Se˜ nal Valor x1

’1’

Calendario de eventos

x2

’1’

s

’0’

E3 3 ns y ← 1

y

’1’

E2 5 ns x2 ← 0

Paso 4. El simulador extrae el evento E3 del calendario y lo ejecuta. El reloj de la simulaci´ on vale 3 ns y los valores de las se˜ nales y el contenido del calendario de eventos son los siguientes: Se˜ nal Valor x1

’1’

x2

’1’

s

’0’

y

’1’

Calendario de eventos E2 5 ns x2 ← 0

Paso 5. El simulador extrae el evento E2 del calendario y lo ejecuta. Como consecuencia, el valor de la se˜ nal x2 pasa a ser cero y el reloj de la simulaci´ on vale 5 ns . Como resultado, se ejecutan las asignaciones 1.1 y 1.2 y se generan dos eventos (E4 y E5 ). A continuaci´ on se muestran los valores de las se˜ nales y el calendario de eventos en el instante 5 ns. Se˜ nal Valor x1

’1’

Calendario de eventos

x2

’0’

s

’0’

E4 6 ns s ← 1

y

’1’

E5 7 ns y ← 0

Paso 6. El simulador extrae el evento E4 del calendario y lo ejecuta. El valor de la se˜ nal s pasa as´ı a ser uno y el reloj de la simulaci´ on pasa a valer 6 ns . Cuando esto sucede, se ejecuta la asignaci´ on 1.2. El evento E5 se borra del calendario de eventos ya que E5 y el nuevo evento (E6 ) afectan a la misma se˜ nal asign´ andole valores distintos y el lapsus de tiempo entre ambos eventos es inferior a 2 ns. Los valores de las se˜ nales y el calendario de eventos en el instante 6 ns se muestran a continuaci´ on. Se˜ nal Valor x1

’1’

x2

’0’

s

’1’

y

’1’

Calendario de eventos E6 8 ns y ← 1

12

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

Figura 1.4: Cronomagrama de las se˜ nales x1 , x2 , y y s del circuito ejemplo.

Paso 7. En el instante 8 ns se ejecuta el evento E6 , que no genera otros eventos. Puesto que el calendario de eventos se encuentra vac´ıo, el simulador finaliza la ejecuci´ on. El cronomagrama de las se˜ nales x1 , x2 , y y s se muestra en la Figura 1.4.

1.5

Test de los circuitos El test juega un papel muy importante en el dise˜ no de circuitos integrados. No s´ olo se emplea para verificar el correcto funcionamiento del circuito ya completamente dise˜ nado, sino que tambi´en es una ayuda esencial para el dise˜ nador durante la fase de dise˜ no del circuito. Finalmente, el test se emplea en manufactura, para determinar qu´e chips han resultado defectuosos o tienen limitadas prestaciones. Por ejemplo, puede emplearse para separar los chips que funcionan correctamente a alta velocidad, de los que s´ olo funcionan a baja velocidad (cada tipo es vendido a diferente precio). Si el dise˜ no se ha realizado correctamente, los chips defectuosos en los test de manufactura se deben a problemas en los procesos de fabricaci´ on o de encapsulado. El test realizado en manufactura tiene un impacto directo sobre el rendimiento (porcentaje de chips fabricados que no son defectuosos), el cual tiene un impacto directo sobre los beneficios de la compa˜ n´ıa fabricante de los chips. Esencialmente, el test consiste en fijar valores en todas las entradas del circuito y observar qu´e valores se obtienen en sus salidas. A cada asignaci´ on de valores a todas las entradas del circuito se le llama un vector de test. El programa de test consiste en un conjunto de vectores de test, que se aplican sobre el dispositivo en una determinada secuencia.

Test en manufactura Un objetivo fundamental del test en manufactura es detectar problemas en el proceso de fabricaci´ on. Las causas de mal funcionamiento de los chips m´ as com´ unmente observadas en la pr´ actica son: – Abiertos. Conexiones entre los dispositivos que se encuentran abiertas debido a alg´ un problema, por ejemplo, debido a la rotura de la l´ınea de metal que establece la conexi´ on.

Cap´ıtulo 1

Fundamentos

13

– Cortos. Conexiones que se han establecido entre diferentes dispositivos, cuando no deber´ıan haberse producido. – Acoplos. Valores l´ ogicos en una parte del circuito que inadvertidamente cambian el valor l´ ogico en otra parte del circuito. Modelar estos diferentes tipos de defectos en el circuito es extremadamente dif´ıcil. Por ello, se han desarrollado diferentes modelos simplificados de fallos. Uno de estos modelos de fallo es considerar que el defecto de fabricaci´on hace que una de las conexiones internas del circuito permanezca siempre a 1, o que permanezca siempre a 0. En un circuito t´ıpico, este tipo de fallos da lugar a un n´ umero muy elevado de patrones de fallo. Un patr´ on de fallo es una determinada selecci´ on de conexiones que se encuentran permanentemente a 1 y de conexiones que se encuentran permanentemente a 0. Se da la circunstancia de que varios patrones de fallo pueden desembocar en el mismo comportamiento del circuito. Por ejemplo, si cualquiera de las entradas de una puerta NAND se encuentra siempre a 0, el circuito se comporta de la misma manera que si la salida del circuito se encontrara siempre a 1. Incluso tomando en consideraci´ on que existen patrones de fallo que dan lugar a un comportamiento equivalente (defectuoso) del circuito, el n´ umero de patrones de fallo esencialmente distintos es extremadamente grande. Por ello, se ha desarrollado un modelo simplificado a partir del anterior. Consiste en suponer que en el circuito hay una u ´ nica conexi´ on que se encuentra permanentemente a 1, o permanentemente a 0. Aunque este modelo de fallos pudiera considerarse muy restrictivo, ha demostrado ser eficaz. Una vez se adopta un determinado modelo de fallos, el siguiente paso es crear un conjunto de vectores de test que permita detectar ese tipo de fallos. Para que se produzca la detecci´ on del fallo, es preciso que la salida del circuito, en caso de estarse produciendo el fallo, sea diferente de la salida de un circuito que funcione correctamente. En este caso, se dice que el fallo se encuentra cubierto por el vector de test. Por supuesto, habr´ a otros tipos de fallos que dar´ an lugar, para ese vector de test, a las mismas salidas que un circuito que funcione correctamente. Se dice entonces que el vector de test no cubre esos otros fallos. Seg´ un se van usando m´ as y m´ as vectores de test, el porcentaje de fallos potenciales (para un determinado modelo de fallo) que son cubiertos se aproxima al 100 %. Dado un conjunto de vectores de test, la cobertura de fallos de ese conjunto de vectores de test (dado un modelo espec´ıfico de fallos) corresponde con el porcentaje de fallos cubiertos. El test de los circuitos secuenciales es m´ as complicado, ya que las salidas del circuito dependen no s´ olo de las entradas, sino tambi´en de su estado. Por tanto, en este tipo de circuitos es preciso poder fijar los valores de todos los flip-flops a voluntad. Esto puede hacerse de las dos maneras siguientes: 1. Mediante una secuencia de inicializaci´ on (secuencia de valores de las entradas del circuito), se lleva el circuito al estado deseado. A continuaci´ on, se aplica el vector de test para probar el circuito en ese estado.

14

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

Mediante este procedimiento, un u ´ nico test consiste en una secuencia de inicializaci´ on, seguida de otro vector de test. Este procedimiento conduce a usar un gran n´ umero de vectores de test, muchos de los cuales son simplemente secuencias de inicializaci´ on. Adem´ as, en algunos casos puede no ser posible fijar todos los flip-flops a los valores deseados. 2. El segundo m´etodo consiste el usar en el dise˜ no scan flip-flops, que son flipflops cuyo valor puede ser cargado desde las entradas al circuito (mientras se realiza el test), o bien pueden ser usados del mismo modo que un flip-flop sin modificar (durante el modo normal de funcionamiento del circuito). Los scan flip-flops pueden construirse insertando multiplexores en la entrada D de los flip-flops. En el test en manufactura, la calidad de un conjunto de vectores de test (denominado programa de test) se mide por medio de la cobertura de fallos del programa de test (supuesto un determinado modelo de fallo) y del tiempo necesario para aplicar todos los vectores de test al circuito, que es directamente proporcional al n´ umero de vectores de test. Cuanto mayor sea la cobertura de fallos, menor ser´ a el n´ umero de chips defectuosos que superar´ an con ´exito el proceso de inspecci´ on. Cuanto menor sea el n´ umero de vectores de test, menor ser´ a el tiempo necesario para ejecutar el programa de test, con lo cual podr´ an testearse mayor n´ umero de chips por unidad de tiempo.

Test funcional El test funcional se emplea en todas las etapas del proceso de dise˜ no del circuito. Su objetivo es verificar que el circuito realiza todas las operaciones como debiera. En los dise˜ nos grandes, que normalmente se dise˜ nan de manera jer´ arquica, todos los subcircuitos de bajo nivel deben ser comprobados funcionalmente, usando programas de test espec´ıficos para cada uno, antes de ser incluidos en los subcircuitos de m´ as alto nivel. Aunque todos los subcircuitos sean comprobados por separado, el subcircuito obtenido de la composici´ on de todos ellos debe tambi´en ser comprobado, us´ andose para ello su propio programa de test. A continuaci´ on, una vez se implementa el circuito usando alguna plataforma hardware (ASIC, FPGA, etc.), debe volver a ser testeado de nuevo. Si es posible, debe emplearse para testear el prototipo hardware el mismo conjunto de tests que se ha usado en la fase de simulaci´ on. Habitualmente, el primer prototipo hardware contiene errores. La comparaci´ on de los resultados del test, con los resultados de las simulaciones para esos mismos tests, puede ayudar a identificar errores de dise˜ no y de fabricaci´ on.

Programas de test funcional Un m´etodo para testear la funcionalidad de un circuito es probar todos los posibles vectores de entrada. Sin embargo, en algunos circuitos esto no es posible, bien

Cap´ıtulo 1

Fundamentos

15

porque el n´ umero de posibles vectores es muy grande, o bien porque algunas combinaciones de valores de las entradas no son v´ alidas para ese determinado circuito. Adem´ as, algunas funciones requieren de una determinada secuencia de vectores de entrada. En conclusi´ on, el programa de test es algo que depende del circuito. Sin embargo, en general se sigue el criterio de probar todos los posibles vectores de entrada, siempre que esto sea posible. Si el n´ umero de posibles vectores de entrada es muy grande (se tardar´ıa meses o a˜ nos en probarlos todos), existen varios m´etodos heur´ısticos que pueden aplicarse para reducir el n´ umero de vectores de entrada. 1. Puede emplearse el conocimiento sobre el funcionamiento de circuito para descartar aquellos vectores de entrada que no tienen ninguna funci´on en el circuito, o que nunca ocurrir´ an en la pr´ actica. 2. El circuito puede dividirse en varios subcircuitos, que son testeados exhaustivamente (usando todas las combinaciones de los vectores de entrada para cada subcircuito). A continuaci´ on, el circuito completo puede testaerse usando un conjunto no exhaustivo de vectores de entrada, simplemente para comprobar que los subcircuitos han sido integrados adecuadamente. 3. Se escoge un conjunto representativo de vectores de entrada, con el fin de ejercitar el circuito bajo condiciones normales de funcionamiento y bajo condiciones extremas. Al testear un circuito, es deseable poder comparar de manera autom´ atica las salidas del circuito con las correspondientes salidas que se obtendr´ıan si el circuito funcionara correctamente. Esto puede hacerse de varias maneras. 1. Una forma es almacenar en un fichero las salidas de un circuito que funcione correctamente, y compararlas con las salidas obtenidas. 2. Otro procedimiento consiste en calcular la salida esperada del circuito usando un m´etodo diferente al empleado en el test, y comparar los resultados. Cuando no es posible aplicar un m´etodo de c´ alculo alternativo al del test, puede comprobarse si los resultados obtenidos del test son “razonables”. Por ejemplo, si un circuito calcula la media de un conjunto de n´ umeros, puede comprobarse que el resultado obtenido sea mayor o igual que el menor de los n´ umeros del conjunto, y menor o igual que el mayor de los n´ umeros del conjunto.

Banco de pruebas Muchas herramientas de simulaci´ on incluyen men´ us que permiten asignar valores a las entradas del circuito. Sin embargo, el uso de este tipo de interfaces gr´ aficas de usuario puede resultar lento y el programa de test desarrollado puede no ser exportable a otras herramientas de simulaci´ on.

16

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

% &' ( ) &* + , - . ( + / 0 1 ' ) 0 , - 2

34 5 678 64 79: ; ? :8 ? < @: A B < 69: 8 < A ? < 9 < A9

F G HIJK JL JM N N O

UUT

JMQ KJ L KPRM N N O

34 5 678 64 79: ? < 6: C D 8 :5 > 67E = ? < @: A 8 < A4 @9>? : A ? < @ 9 < A9

Figura 1.5: Diagrama de bloques del modelo de un banco de pruebas.

Una alternativa mucho m´ as ventajosa consiste en codificar el programa de test usando un HDL. Es decir, implementar el programa de test en otro m´ odulo de c´ odigo HDL, que es denominado banco de pruebas. El banco de pruebas contendr´ a el circuito que est´ a siendo probado (denominado abreviadamente UUT, del ingl´es “Unit Under Test”) como un subcircuito. Todas las entradas al UUT ser´ an generadas dentro del banco de pruebas, y todas las salidas del circuito ser´ an comprobadas dentro del banco de pruebas. En resumen, el banco de pruebas debe incluir (v´ease el diagrama de bloques en la Figura 1.5): – Un subcircuito generador de los vectores de test. – El circuito que est´ a siendo probado (UUT). – Un subcircuito de comprobaci´ on de los resultados obtenidos del test. Como m´ odulo de c´ odigo en HDL, el banco de pruebas es un m´ odulo sin entradas ni salidas externas. Puesto que el banco de pruebas normalmente no va a ser sintetizado en un circuito f´ısico, puede emplearse cualquier instrucci´ on disponible en el HDL para generar los vectores de test y analizar las salidas del UUT, pudi´endose llegar a crear programas extremadamente complejos. Finalmente, recalcar que cuando se dise˜ na un circuito digital, es conveniente dise˜ nar tambi´en su banco de pruebas. Si el circuito se dise˜ na jer´ arquicamente, entonces cada subcircuito debe ser testeado separadamente antes de ser combinado con otros subcircuitos para integrar un circuito de nivel jer´ arquico superior. Asimismo, deber´ a desarrollarse un banco de pruebas para este circuito de nivel superior.

1.6

Dos simuladores de VHDL’93: VeriBest y ModelSim En este texto se proponen diferentes casos de dise˜ no de circuitos digitales usando el lenguaje VHDL, que el alumno debe simular en su propio ordenador. Para ello, el alumno debe tener instalado en su ordenador un simulador de VHDL. En esta secci´ on se proporcionan algunas indicaciones b´ asicas para la instalaci´ on y manejo de dos simuladores de VHDL’93: VeriBest VHDL y ModelSim PE

Cap´ıtulo 1

Fundamentos

17

Student Edition. Cualquiera de los dos puede emplearse para la simulaci´ on de los modelos planteados en este texto. El simulador VeriBest VHDL fue desarrollado por la compa˜ n´ıa VeriBest Inc. Cuando esta compa˜ n´ıa pas´ o a formar parte de la corporaci´ on Mentor Graphics, dej´ o de darse soporte al simulador VeriBest VHDL, siendo ´este sustituido por el simulador ModelSim. La u ´ nica ventaja de VeriBest es que funciona para casi todas las versiones de Windows (Windows NT 4.0, Windows 95, Windows 98, etc.). Por tratarse de una herramienta software del a˜ no 1998, resulta adecuada para su uso en ordenadores con limitadas prestaciones. Si ´este no es el caso, es preferible emplear ModelSim en lugar de VeriBest. Aparte de estos dos simuladores de VHDL’93, en Internet pueden encontrarse otros. Asimismo, existen versiones gratuitas de herramientas orientadas no s´olo a la simulaci´ on, sino tambi´en a la s´ıntesis, entre las que cabe destacar Quartus II Web Edition, que puede descargarse gratuitamente del sitio web de la compa˜ n´ıa Altera Corporation. Se sugiere al alumno que escoja en este punto qu´e entorno de simulaci´ on va a emplear. Si decide usar VeriBest, la gu´ıa de instalaci´ on y uso del Ap´endice A puede serle u ´ til. Por el contrario, si decide usar ModelSim (lo cual recomendamos), encontrar´ a la correspondiente gu´ıa en el Ap´endice B.

2

Conceptos básicos de VHDL

Objetivos. Una vez estudiado el contenido del tema deber´ıa saber: – Declarar una entidad de dise˜ no en VHDL. – Declarar los elementos sint´ acticos b´ asicos de VHDL. – Discutir las principales caracter´ısticas de la asignaci´ on concurrente y las diferencias entre la asignaci´ on secuencial y concurrente. – Definir el comportamiento de un circuito mediante instanciaci´ on y conexi´ on de otros circuitos. – Discutir la utilidad de la parametrizaci´on en la descripci´ on de un circuito. – Discutir las principales caracter´ısticas de las se˜ nales, variables y constantes en VHDL. Usar adecuadamente cada una de ellas. – Tipos de datos b´ asicos en VHDL y sus principales atributos. – Declarar y usar librer´ıas VHDL y conocer las librer´ıas m´ as com´ unmente usadas. – Discutir las principales caracter´ısticas de los tipos de retardo y modelar los distintos tipos de retardo en VHDL. – Realizar, con “l´ apiz y papel”, el cronograma de las se˜ nales de un circuito conocido el c´odigo VHDL del circuito y de su banco de pruebas. – Declarar procedimientos y funciones y discutir la utilidad de su uso.

VHDL es un lenguaje complejo, con numerosas capacidades y librer´ıas de funciones. De hecho, aunque es un lenguaje para describir hardware, posee muchas de las capacidades de los lenguajes de programaci´ on (tales como C o Fortran), incluyendo estructuras record, funciones, procedimientos y soporte a bloques de c´ odigo compilados separadamente. Pese a lo anterior, para la mayor parte de las aplicaciones de VHDL al modelado y simulaci´ on de circuitos digitales, es suficiente con emplear un peque˜ no subconjunto de las estructuras y capacidades proporcionadas por el lenguaje. En particular, se ha definido un subconjunto del lenguaje VHDL, denominado VHDL

20

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

synthesis interoperability subset (est´ andar IEEE 1076.6), que contiene los tipos de datos, operadores y otras capacidades de VHDL que deber´ıan ser usados para crear c´ odigo VHDL sintetizable. Esto es, c´ odigo a partir del cual las herramientas de CAD puedan generar autom´ aticamente circuitos hardware que funcionen. Siguiendo estas reglas y centr´ andonos en pr´ acticas “simples” para la codificaci´ on de alto nivel, en este cap´ıtulo se introducen los conceptos b´ asicos para el modelado y la simulaci´ on empleando VHDL.

2.1

Definición de la entidad de diseño Se denomina entidad de dise˜ no al bloque constitutivo b´ asico para la descripci´ on del hardware en VHDL. Consta de las dos partes siguientes: 1. Entity: interfaz con el exterior, en la que se definen los puertos de conexi´ on (se˜ nales de entrada y/o salida) de la entidad de dise˜ no. 2. Architecture: define el comportamiento o la estructura de la entidad de dise˜ no. Es decir, c´ omo los puertos de salida de la entidad de dise˜ no se relacionan con sus puertos de entrada. A continuaci´ on, se explica c´ omo se define la entity y la architecture, asi como el procedimiento que proporciona VHDL para asociar una entity a una determinada architecture.

2.2

Entity La entity define la interfaz externa de la entidad de dise˜ no. Incluye: – El nombre de la entidad de dise˜ no. – La lista de las se˜ nales de salida y de entrada que componen la interfaz (normalmente se aplica el convenio de escribir primero las salidas y a continuaci´ on las entradas). A cada una de estas se˜ nales se le denomina puerto (port). Existen tres tipos de puertos: in (entrada), out (salida) e inout (bidireccional). Ejemplo 2.2.1. En la Figura 2.1 se muestra la definici´ on de las interfaces de las puertas l´ ogicas NOT, XOR y AND. La palabra reservada entity, seguida del nombre de la interfaz y de las palabras reservadas is port, indica el comienzo de la definici´ on de la interfaz. A continuaci´ on, se especifica el nombre de cada uno de los puertos, su direcci´ on (in, out o inout) y su tipo. En el ejemplo mostrado en la Figura 2.1, todos los puertos son se˜ nales del tipo std logic. Finalmente, las palabras reservadas end entity, seguidas del nombre de la interfaz, indican el final de la definici´ on.

Cap´ıtulo 2

21

Conceptos b´ asicos de VHDL

x0

y0

x0

y0

x1

entity not is port ( y0 : out std_logic; x0 : in std_logic ); end entity not;

entity xor2 is port ( y0 : out std_logic; x0, x1 : in std_logic ); end entity xor2;

x0

y0

x1

entity and2 is port ( y0 : out std_logic; x0, x1 : in std_logic ); end entity and2;

Figura 2.1: Ejemplos de interfaz (entity) de puertas NOT, XOR y AND.

En VHDL, las palabras reservadas (por ejemplo, entity, is, port, in, out, end) y los nombres definidos por el usuario (por ejemplo, not1, xor2, and2, x0, x1, y) pueden escribirse indistintamente en may´ usculas o en min´ usculas, puesto que en VHDL no se diferencia entre los caracteres en may´ uscula y en min´ uscula. Por ejemplo, es equivalente escribir entity, ENTITY y EnTiTy, as´ı como tambi´en es equivalente escribir not1 y NoT1. Los nombres definidos por el usuario deben comenzar por una letra, seguida opcionalmente por cualquier secuencia de letras, n´ umeros y caracteres gui´ on bajo, con la limitaci´ on de que ni pueden aparecer dos guiones bajos seguidos, ni el gui´ on bajo puede ser el u ´ ltimo caracter del nombre.

2.3

Architecture La architecture describe el comportamiento o la estructura de la entidad de dise˜ no. Esta definici´ on puede emplear: – Una descripci´ on estructural, en la cual el componente es descrito mediante la conexi´ on de componentes de m´ as bajo nivel. – Una descripci´ on de su comportamiento, en la que se describe el comportamiento que debe tener el componente. – Una descripci´ on mixta de la estructura y del comportamiento, que incluya componentes de m´ as bajo nivel y c´ odigo describiendo el comportamiento. Ejemplo 2.3.1. En la Figura 2.2 se muestran las architecture que describen el comportamiento de las puertas l´ ogicas NOT, XOR y AND. Las correspondientes entity son las definidas en la Figura 2.1. En este ejemplo se ha dado el mismo nombre a la entity y a la architecture de cada entidad de dise˜ no. En general, se les puede dar nombres diferentes. A grandes rasgos, la definici´ on de la architecture tiene la sintaxis siguiente: architecture of is

22

A. Urqu´ıa, C. Mart´ın Villalba

x0

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

y0

x0

x0

y0

x1

architecture not of not is begin y0 d);

end architecture Mux2_1bit; ----------------------------------------------

Ejemplo 2.3.6. El circuito multiplexor de dos se˜ nales de 1 bit puede emplearse para dise˜ nar un multiplexor de dos se˜ nales de 4 bits. En la Figura 2.4 se muestra la representaci´ on esquem´ atica del circuito. El c´ odigo VHDL que describe este circuito se muestra a continuaci´ on. ----------------------------------------------- MUX 2:1 de 4 bit library IEEE; use IEEE.std_logic_1164.all; entity Mux2_4bit is port ( d0, d1, d2, d3 a0, a1, a2, a3 b0, b1, b2, b3 s0 end entity Mux2_4bit;

: out

std_logic;

: in : in : in

std_logic; std_logic; std_logic );

architecture Mux2_4bit of Mux2_4bit is

Cap´ıtulo 2

27

Conceptos b´ asicos de VHDL

abcdef

a3 b3

i0 i1

d3

d s0 abcdef

a2 b2

i0 i1

d2

d s0 abcdef

a1 b1

i0 i1

d1

d s0 abcdef

a0 b0

i0 i1

d

d0

s0 s0

Figura 2.4: Multiplexor de 2 se˜ nales de 4 bit dise˜ nado mediante la conexi´on de 4 multiplexores de 2 se˜ nales de 1 bit.

component Mux2_1bit is port (

d : out std_logic; i0, i1 : in std_logic; std_logic ); s0 : in end component Mux2_1bit; begin Mux2_0 Mux2_1

: Mux2_1bit port map ( d => d0, i0 => a0, i1 => b0 , s0 => s0 ); : Mux2_1bit port map ( d => d1, i0 => a1, i1 => b1 , s0 => s0 );

Mux2_2

: Mux2_1bit port map ( d => d2, i0 => a2, i1 => b2 , s0 => s0 ); Mux2_3 : Mux2_1bit port map ( d => d3, i0 => a3, i1 => b3 , s0 => s0 ); end architecture Mux2_4bit; ----------------------------------------------

28

A. Urqu´ıa, C. Mart´ın Villalba

2.3.4

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

Constantes generic

Una propiedad muy relacionada con la modularidad y la jerarqu´ıa es la parametrizaci´ on, que es la capacidad de modificar el valor de ciertas propiedades de un circuito cuando es instanciado, con el fin de adaptarlo a la aplicaci´ on en concreto a la que vaya a destinarse al formar parte del circuito de nivel jer´ arquico superior. La parametrizaci´ on es una propiedad fundamental en la reutilizaci´ on del c´ odigo, ya que permite adaptar un mismo fragmento de c´ odigo a diferentes usos. La palabra reservada generic se usa para definir aquellas constantes del dispositivo a las que se desea asignar valor cuando el dispositivo es instanciado, es decir, cuando es usado como un subcircuito de otro circuito de mayor nivel jer´ arquico. Ejemplos t´ıpicos de constantes gen´ericas son el valor de determinados retardos, el n´ umero de bits de un bus de se˜ nales, etc. Cuando una entity con constante generic es instanciada como un subcircuito, puede cambiarse el valor de las constantes generic para definir diferentes subcircuitos, con diferentes valores de los retardos, anchura de los buses, etc. El caso pr´ actico descrito en la Secci´ on 3.6 ilustra el empleo de constantes generic.

2.4

Configuration Se emplea una pareja entity-architecture para describir en VHDL las entidades de dise˜ no (es decir, circuitos y subcircuitos) que pueden ser compilados separadamente. El hecho de que se definan separadamente la interfaz (entity) y la arquitectura (architecture) facilita la definici´ on de varias arquitecturas para una misma entidad de dise˜ no (con una u ´ nica interfaz). Por ejemplo, pueden definirse varias arquitecturas de una misma entidad de dise˜ no, correspondientes a diferentes versiones del circuito: velocidad baja, media y alta. En este caso, cuando se emplee esa entidad de dise˜ no debe indicarse expl´ıcitamente qu´e arquitectura hay que emplear. Esto puede hacerse mediante la definici´ on de una configuraci´ on (configuration).

2.5

Señales, variables y constantes En VHDL se emplean variables, se˜ nales y constantes para describir la operaci´ on del circuito. Las se˜ nales corresponden con las se˜ nales l´ogicas reales existentes en el circuito. Las variables pueden o no corresponder con se˜ nales f´ısicas reales. Las constantes corresponden a magnitudes cuyo valor no cambia durante la simulaci´ on (t´ıpicamente retardos, n´ umero de l´ıneas de buses, n´ umero de bits de palabras, etc.). Las variables siempre deben usarse dentro de bloques process. Aparte de esta restricci´ on, pueden ser usadas con relativa libertad. Por el contrario, hay que ser cuidadoso con el empleo de las se˜ nales. Las se˜ nales definidas en el port de una entity tienen una direcci´ on, lo cual condiciona

Cap´ıtulo 2

Conceptos b´ asicos de VHDL

29

su uso: no puede leerse el valor de una se˜ nal de salida (out), ni asignarse un valor a una se˜ nal de entrada (in). Las se˜ nales declaradas en la definici´ on de la architecture puede ser usadas tanto en la parte derecha como en la izquierda de las asignaciones. Un criterio general respecto al uso de las variables y las se˜ nales es el siguiente: – Emplear una variable cuando vaya a usarse s´ olo dentro de un bloque process. – Emplear una se˜ nal para datos a los que deba asignarse valor fuera del bloque process, o para datos que necesitan ser transferidos desde un puerto de entrada o a un puerto de salida. Esto u ´ ltimo es equivalente a decir que los port s´ olo pueden ser se˜ nales. Para asignar valor a una variable o constante se emplea :=, mientras que se emplea = L´ ogico and or nand nor xor xnor

Significado Exponenciaci´ on Valor absoluto NOT l´ ogico Multiplicaci´ on Divisi´ on M´ odulo Resto Identidad Negaci´ on (complemento a 2) Suma Resta Concatenaci´ on Desplazamiento l´ ogico izquierda Desplazamiento l´ ogico derecha Desplazamiento aritm´etico izquierda Desplazamiento aritm´etico derecha Rotaci´ on l´ ogica izquierda Rotaci´ on l´ ogica derecha Comprueba igualdad Comprueba desigualdad Menor que Menor o igual que Mayor que Mayor o igual que AND l´ ogica OR l´ ogica NAND l´ ogica NOR l´ ogica OR exclusiva l´ ogica NOR exclusiva l´ ogica

Tabla 2.6: Tipo obtenido como resultado de las operaciones aritm´eticas.

Operando 1 Operando 2 Resultado unsigned unsigned unsigned unsigned integer unsigned integer unsigned unsigned signed signed signed signed integer signed integer signed signed

Cap´ıtulo 2

2.6

37

Conceptos b´ asicos de VHDL

Librerías En VHDL, una librer´ıa de dise˜ no contiene la definici´ on de un conjunto de tipos de datos, as´ı como la definici´ on de los operadores y funciones que pueden aplicarse sobre estos tipos de datos. Existe un buen n´ umero de librer´ıas de dise˜ no est´ andar y de librer´ıas espec´ıficas, que son proporcionadas junto con las herramientas de simulaci´ on. A excepci´ on de los tipos bit y bit vector, todos los dem´ as tipos precisan de la inclusi´ on de alguna librer´ıa de dise˜ no. Por ejemplo, es necesario usar la librer´ıa de IEEE (que es proporcionada en todos los simuladores) para poder usar los tipos de datos std logic, std logic vector, unsigned y signed. VHDL permite organizar las librer´ıas, estructurando su contenido en sublibrer´ıas denominadas packages. Un beneficio a˜ nadido de ello es que incluir u ´ nicamente los tipos de datos necesarios para el dise˜ no reduce el tama˜ no del c´ odigo y simplifica la simulaci´ on del programa en VHDL. Por este motivo, adem´ as de especificar qu´e librer´ıas deben ser incluidas, conviene que el dise˜ nador indique qu´e paquetes en concreto de la librer´ıa son usados en la definici´ on del circuito. Si no se especifica el paquete, o si un mismo objeto est´ a definido en varios paquetes, es preciso referirse a ´el usando la notaci´ on punto: librer´ıa.paquete.objeto Entre los paquetes m´ as com´ unmente usados, cabe mencionar los siguientes, pertenecientes a la librer´ıa IEEE: IEEE.std logic 1164

IEEE.numeric std

IEEE.math real

Incluye la definici´ on de los tipos de datos std logic y std logic vector, y de las operaciones en las que intervienen estos tipos de datos. Incluye la definici´ on de los tipos de datos unsigned y signed, y de las operaciones m´ as comunes realizadas sobre estos tipos de datos. Incluye la definici´ on de las operaciones en las que intervienen n´ umeros reales (tipo real). Estos son n´ umeros reales en coma flotante de 64 bits seg´ un el est´ andar de IEEE.

As´ı pues, es frecuente incluir, antes de la definici´ on de la entidad de dise˜ no, las tres sentencias siguientes: library IEEE; use IEEE.std_logic_1164.all; use IEEE.numeric_std.all;

La primera sentencia indica que va a emplearse la librer´ıa de IEEE. Las otras dos indican que los paquetes IEEE.std logic 1164 y IEEE.numeric std deben estar listos para su uso en el c´ odigo VHDL que sigue a continuaci´ on. Por supuesto, si

38

A. Urqu´ıa, C. Mart´ın Villalba

Casos Pr´ acticos de Dise˜ no de Circuitos Digitales con VHDL

en el c´ odigo no se usan los tipos de datos unsigned y signed, entonces puede omitirse la tercera sentencia. Las herramientas de simulaci´ on y s´ıntesis con VHDL suelen incluir otras librer´ıas, que pueden ser examinadas desde la propia herramienta. Existen librer´ıas y paquetes que son cargados por defecto, con lo cual no necesitan ser incluidas. Las m´ as notables son las dos siguientes: work

std

2.7

Librer´ıa por defecto donde se compilan todos los tipos, las funciones, entity, architecture, package, etc. definidos por el usuario. Contiene la mayor´ıa de las definiciones y construcciones est´ andar soportadas por VHDL.

Modelado del retardo Puesto que los dispositivos y las conexiones entre los dispositivos tienen retardos asociados, para simular de manera precisa el comportamiento de los circuitos es necesario modelar adecuadamente su retardo. De hecho, hay circuitos que no funcionan adecuadamente cuando son simulados si no se toman en consideraci´ on los retardos que se producen en ellos. Una recomendaci´ on cuando se modelan circuitos digitales es asignar alg´ un retardo (incluso un retardo arbitrario, como 1 ns) a todas las operaciones al nivel de transferencia entre registros usadas en el c´ odigo VHDL que describe el circuito. Obs´ervese, no obstante, que esos retardos no son soportados al realizar la s´ıntesis: algunas herramientas de s´ıntesis simplemente los ignoran, mientras que otras obligan al dise˜ nador a poner esos retardos a cero o a eliminarlos del c´ odigo. Los retardos pueden ser modelados mediante varios m´etodos. A continuaci´ on se describen algunos de ellos.

2.7.1

Sentencia wait

El m´etodo m´ as sencillo de modelar un retardo es emplear la sentencia wait, indicando el n´ umero de unidades de tiempo que debe durar la espera. Por ejemplo, la sentencia: wait for 10 ns;

dentro de un bloque process, hace que la ejecuci´ on del bloque se detenga durante 10 nanosegundos. Pueden usarse otras formas de la sentencia wait. Por ejemplo, la sentencia: wait;

dentro de un bloque process, hace que ´este se quede esperando indefinidamente, con lo cual se detiene la ejecuci´ on del bloque.

Cap´ıtulo 2

39

Conceptos b´ asicos de VHDL

Asimismo, las construcciones: wait until ; wait until ;

dentro de un bloque process, detienen la ejecuci´ on del bloque hasta que la condici´ on booleana se haga verdadera, o hasta que alguna de las se˜ nales de la lista cambie de valor, respectivamente. Si la sentencia: wait until ;

es la primera sentencia de un bloque process (esta en concreto es la u ´ nica forma de uso de la sentencia wait permitida para s´ıntesis), entonces es equivalente a nales a las que el bloque process es usar como la lista de se˜ sensible.

2.7.2

Retardos en la asignación a señales

Pueden especificarse retardos en las asignaciones a se˜ nales usando la palabra reservada after. Por ejemplo, puede modelarse el comportamiento de una puerta NAND con un retardo de propagaci´ on de 2 ns mediante la sentencia: y
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF