VHDL: de la Tecnología a la Arquitectura de Computadores

 

José Jaime Ruz Ortiz

 

Departamento de Arquitectura de Computadores y Automática  

Universidad Complutense de Madrid

 

318 Págs.  EDITORIAL SINTESIS S.A. Vallehermoso, 34. 28015 Madrid.

Depósito legal: M.29.889-1997

http://www.sintesis.com/

ISBN: 84-7738-530-0

Con este libro pretendemos facilitar a los estudiantes de informática y electrónica los conocimientos básicos del lenguaje de descripción hardware VHDL para que lo utilicen en el  análisis y diseño de la estructura interna de los computadores. Gran parte del contenido del mismo ha servido de texto guía a los alumnos de tercer curso de Ingeniería Informática  en la asignatura Laboratorio de Estructura de Computadores,  impartida por el autor en la Escuela Superior de Informática de la Universidad Complutense de Madrid durante los últimos cuatro años.  El libro presupone en el lector  conocimientos básicos de  programación, y está organizado para poner dichos conocimientos al servicio del diseño y el modelado de dispositivos hardware.

VHDL (VHSIC Hardware Description Language)  es un lenguaje impulsado por el Departamento de Defensa de los Estados Unidos dentro del programa VHSIC (Very High Speed Integrated Circuits) y estandarizado por IEEE Computer Society. Con VHDL se puede estudiar un sistema digital a diferentes niveles de abstracción dentro de un único lenguaje de programación, acelerando  considerablemente  las diferentes fases diseño y  proporcionando un mejor conocimiento del mismo cuando se aborda la fase de implementación física.

Los múltiples intereses que han concurrido en la definición y estandarización de VHDL lo han convertido en un lenguaje que los nuevos usuarios perciben con estructura desordenada y difícil de aprender y utilizar. A ello ha contribuido, sin duda, la literatura que sobre la materia se ha producido en los últimos años, muy especialmente el propio Manual de Referencia del Lenguaje.  En efecto, muchos de los  autores de libros sobre VHDL han introducido el lenguaje desde la óptica propia de un diseñador tradicional de hardware, es decir, comenzando con aquellas construcciones  que permiten la descripción estructural de un sistema digital. Este enfoque, que resalta la  correspondencia existente entre estas construcciones del lenguaje y la estructura interna de los dispositivos digitales que se modelan, facilita la comprensión superficial de algunos aspectos del lenguaje, pero dificulta el entendimiento de la dimensión temporal del mismo, imprescindible para utilizar adecuadamente todas sus posibilidades. Las citadas construcciones no son más que  formas sintácticamente diferenciadas de la única sentencia concurrente disponible en el lenguaje: el  proceso.

El planteamiento que seguiremos en este libro para introducir el lenguaje es justo el inverso. Comenzaremos con el estudio exhaustivo de  las características puramente secuenciales disponibles en VHDL para construir un proceso, análogas a las de otros lenguajes de programación software como Pascal o Ada. Después introduciremos el modelo temporal del lenguaje que hace posible la ejecución concurrente y el intercambio de información entre procesos. Finalmente analizaremos las variaciones sintácticas de los  procesos que dan lugar a las diferentes sentencias concurrentes que posibilitan la escritura de programas con estilo estructural y de flujo de datos. Pensamos que  esta organización de los contenidos básicos del libro transmite al lector una mayor unidad del lenguaje y proporciona los fundamentos de su semántica operacional, imprescindible para entender el significado de las abundantes posibilidades expresivas de VHDL.

La primera parte del libro es una descripción básica del lenguaje compuesta de cinco capítulos. En el capítulo 1 se introducen los conceptos básicos del lenguaje y se modelan pequeños sistemas combinacionales y secuenciales. En el capítulo 2 se estudian exhaustivamente las construcciones secuenciales de  VHDL.  En el capítulo 3 se introduce el modelo temporal, resaltando la diferencia entre el dominio secuencial, donde opera un funcionamiento puramente algorítmico, y el dominio concurrente, compuesto por un conjunto de procesos que se ejecutan asíncronamente y se comunican mediante una red de señales. En el capítulo 4 se aborda el estudio de las sentencias concurrentes como formas particulares de procesos escritos con una sintaxis apropiada para construir los estilos estructural y de flujo de datos,  tradicionales en los lenguajes de descripción hardware. El capítulo 5 trata sobre las  unidades de diseño VHDL, las bibliotecas de entidades y las diferentes configuraciones que se pueden establecer para un mismo dispositivo hardware.

            En la segunda parte del libro se aborda en tres capítulos el proceso de diseño con VHDL. En el capítulo 6 se describen los dominios de diseño en VHDL: comportamiento y estructural. El capítulo 7 se dedica al desarrollo de un multiplicador binario siguiendo el algoritmo de suma y desplazamiento. Con él se introduce el diseño de máquinas algorítmicas utilizando un ejemplo con una sencilla interacción entre ruta de datos  y  controlador, lo que  facilita el uso de técnicas basadas en tipos abstractos de datos para la gestión y depuración simbólica de las relaciones de control. Finalmente, en el capítulo 8 se aborda el diseño completo de un pequeño computador.  En él  se hace uso de los conocimientos anteriores para llevar al terreno operativo los conceptos sobre diseño y funcionamiento de un computador con arquitectura convencional tipo von Neumann. Los programas VHDL completos de los capítulos 7 y 8 están disponibles en la dirección de Internet http://www.......  . Los directorios  y nombres de archivos se indican delante de cada segmento de código.

Con este libro hemos pretendido, además,  que el lector en general y los estudiantes de ingeniería electrónica e ingeniería informática en particular, dispongan de una herramienta operativa válida para otras materias relacionadas con el hardware. Por ejemplo, como lenguaje de entrada para las herramientas de síntesis CAD, tales como  VHDL Logic Synthesis de Synopsys Inc., Autologic de Mentor Graphics o Metamor, utilizadas en el diseño automático de circuitos integrados. Para analizar y medir diferentes modelos de procesadores segmentados, RISC, vectoriales, superescalares, sistólicos, VLIW- y multiprocesadores, así como arquitecturas especificas de la aplicación.  O bien  para el estudio de modelos no interpretados de análisis del rendimiento de configuraciones de sistemas. En pocas palabras, disponer de un lenguaje que permita llevar al terreno operativo los conocimientos del dominio del hardware, de la misma manera que un lenguaje de propósito general como Pascal o Modula lo hace con los conocimientos del dominio del software.

A lo largo de todos los capítulos hemos pretendido mantener el interés eminentemente didáctico del libro.  Por ello hemos utilizado las posibilidades expresivas de forma libre, sin someternos  a disciplinas o normalizaciones que se justifican en ambientes  profesionales y específicos dentro del mundo VHDL. Es  este el motivo de no incluir en el libro materias relacionadas con las actividades de normalización. Tampoco  hemos creído oportuno introducir las nuevas construcciones que se derivan de la norma VHDL-92, ya que no aportan nada significativo desde el punto de vista pedagógico.

Para finalizar quiero agradecer la ayuda inestimable recibida de mis compañero Alvaro Ruiz-Andino y Fernado Sáenz. La colaboración de Alvaro fue decisiva en  la puesta en marcha del Laboratorio de Estructura de Computadores de la Escuela Superior de Informática  y en el desarrollo del entorno de programación que complementó las funciones del simulador básico de VHDL que los alumnos han venido utilizando durante los últimos cuatro años. Fernando tuvo la paciencia de leer el borrador del libro y colaborar con sus sugerencias y comentarios a la mejora de su redacción.

Contenidos

Capítulo 1

Introducción al lenguaje VHDL

 

1.1. Dominios de aplicación de 

VHDL

1.1.1. Síntesis automática

1.1.2. Diagnosis de fallos

1.1.3. Verificación formal

1.1.4. Modelado de              rendimiento

1.1.5. Documentación

 

1.2. Niveles de diseño y dominios 

de representación

 

1.3. Lenguajes precursores de  

 VHDL

1.3.1. CDL

1.3.2. DDL

1.3.3. AHPL

1.3.4. ISPS

1.3.5. ISP'

1.3.6. TI-HDL

 

1.4. Lenguajes competidores  de           VHDL

1.4.1. Verilog

1.4.2. UDL/I

1.4.3. M

 

1.5. Conceptos básicos de VHDL

1.5.1. Sentencia de asignación de variable

1.5.2. Sentencias de control del 

flujo de ejecución

1.5.2.1. Sentencia condicional

1.5.2.2. Sentencia alternativa

1.5.2.3. Sentencia iterativa

1.5.2.4. Señales

1.5.2.5. Sentencia de asignación 

 de señal

1.5.2.6. Sentencia de espera

1.6. Ejemplos de modelos VHDL

1.6.1. Puerta  AND  de dos 

          entradas

1.6.2. Multiplexor.

1.6.3. Circuito AND con 

          máscara.

1.6.4. Máquina de estados 

          finitos.

1.6.5. Sumador binario.

 

1.7. Práctica  1

1.7.1. Objetivos

1.7.2. Práctica a realizar

1.7.3. Documentación

 

Capítulo 2

VHDL Secuencial

 

2.1. Elementos léxicos del 

       lenguaje

2.1.1. Delimitadores

2.1.2. Identificadores

2.1.3. Literales numéricos

2.1.4. Literales carácter

2.1.5. Cadenas de caracteres

2.1.6. Cadenas de bits

2.1.7. Comentarios

2.2. Objetos de datos en VHDL

2.2.1. Declaración de tipos

2.2.1.1. Tipo entero

2.2.1.2. Tipo real

2.2.1.3. Tipo enumerado

2.2.1.4. Tipo físico

2.2.1.5. Tipo array

2.2.1.6. Tipo registro

2.2.1.7. Tipo acceso

2.2.2. Subtipos

2.2.3. Declaración de objetos de datos

2.2.3.1. Declaración de 

             variables

2.2.3.2. Declaración de 

             constantes

2.2.3.3. Declaración de señales

2.2.4. Agregados de datos

2.2.5. Atributos de datos

2.2.5.1. Atributos asociados a tipos o subtipos escalares

2.2.5.2. Atributos asociados a tipos o subtipos discretos o físicos

2.2.5.3. Atributos asociados a  arrays restringidos

2.3. Operadores predefinidos y expresiones

 

2.4. Alias

 

2.5.Sentencias                       Secuenciales     

2.5.1. Sentencia de asignación 

de variable (:=)

2.5.2. Sentencia IF

2.5.3. Sentencia Case

2.5.4. Sentencias iterativas 

          (LOOP, NEXT,EXIT)

2.5.5. Sentencia Null

2.5.6. Sentencia Assert

2.5.7. Sentencia de asignación 

de señal (<=)

2.5.8. Sentencia Wait

 

2.6. Subprogramas

2.6.1. Definición de 

          subprogramas

2.6.2. Llamadas a subprogramas

2.6.3. Valores predeterminados  

en los subprogrmas

 

2.7. Sobrecarga (overloading)

 

2.8. Práctica  2

2.8.1. Objetivos

2.8.2. Prácticas a realizar

2.8.3. Documentación

 

Capítulo 3

Modelo Temporal de VHDL

 

3.1 Dominios secuencial y 

      concurrente en VHDL

 

3.2 Sentencia Process

 

3.3 Señales

3.3.1. Tipos de retardo en las asignaciones de señal

3.3.2. Señales resueltas

 

3.4 Simulación

 

3.5 Atributos de señal

3.5.1. Atributos de señal tipo función

3.5.2. Atributos de señal tipo 

señal

3.5.3. Programa de test de los atributos de señal

3.5.4. Programa ejemplo del uso 

de atributos de señal

 

3.6 Práctica 3

3.6.1. Objetivos

3.6.2. Práctica a realizar

3.6.3. Documentación

 

Capítulo 4

Sentencias concurrentes

 

4.1. Sentencia de asignación de 

señal concurrente

4.1.1. Sentencia de asignación 

de señal condicional

4.1.2. Sentencia de asignación 

de señal seleccionada

4.2. Sentencia de instanciación 

de componentes

4.2.1. Declaración de 

          componentes

4.2.2. Especificación de 

          configuración

4.2.3. Instanciación de 

          componentes

 

4.3. Sentencia de Bloque

4.3.1. Bloques guardados

4.3.2. Bloques en la jerarquía de diseño

 

4.4. Llamada a procedimiento concurrente

 

4.5. Sentencia de aserto 

       concurrente

 

4.6. Sentencia de   generación

 

4.7. Practica 4

4.7.1. Objetivos

4.7.2. Práctica a realizar

4.7.3. Documentación

 

Capítulo 5

Unidades de diseño

 

5.1. Declaración de entidad

 

5.2. Arquitectura de entidad

 

5.3. Paquetes

5.3.1 Declaración de paquetes

5.3.2 Cuerpo de paquetes

5.3.3 Paquetes estndard

5.3.3.1. Paquete STANDARD

5.3.3.2. Paquete TextIO

 

5.4. Declaración de configuración

 

5.5. Bibliotecas de diseño VHDL

5.5.1 Cláusula library

5.5.2 Cláusula use

 

5.6. Visibilidad

 

5.7. Fases en la ejecución de un 

       programa VHDL

5.8. Practica  5

5.8.1 Objetivos

5.8.2 Prácticas a realizar

5.8.3 Documentación

 

Capítulo 6

Diseño Lógico con VHDL

 

6.1. Estilos de descripción

 

6.2. Modelos de descripción de 

un sistema combinacional

6.2.1. Modelo de 

comportamiento algorítmico

6.2.2. Modelo de flujo de datos

6.2.3. Modelo estructural

 

6.3. Modelos de descripción de  

un circuito secuencial

6.3.1. Modelo de 

comportamiento algorítmico

6.3.2. Modelo de flujo de datos

6.3.3. Modelo estructural

 

6.4. Modelos estructurales de circuitos regulares

 

6.5. Modelos de alta resolución: sistemas de valores lógicos

6.5.1. Sistemas de valores 

          lógicos en VHDL

6.5.2. Sistema de valores con 2 estados

6.5.3. Sistema de valores con 3 estados

6.5.4. Sistema de valores con 4 estados

6.5.5. Sistema de valores con 9 estados

 

6.6. Practica 6

6.6.1. Objetivos

6.6.2. Práctica a realizar

6.6.3. Documentación

 

Capítulo 7

Diseño Algorítmico de Sistemas Digitales

7.1. Estructura de un sistema 

digital complejo

7.1.1. Ruta de datos

7.1.2. Controlador

 

7.2. Modelo de flujo de datos de 

un sistema digital

7.2.1. Modelo de la ruta de datos

7.2.2. Modelo del controlador

 

7.3. Multiplicador binario por suma-desplazamiento

7.3.1. Algoritmo de 

         suma-desplazamiento

7.3.2. Declaración de entidad

7.3.3. Codificación de un 

          paquete auxiliar

7.3.4. Arquitectura de 

         comportamiento funcional

7.3.5. Arquitectura de 

        comportamiento algorítmica

7.3.6. Arquitectura de flujo de 

datos

7.3.6.1. Ruta de datos

7.3.6.2. Controlador

7.3.6.3. Conexión ruta de datos controlador

7.3.7. Arquitectura estructural

7.3.7.1. Ruta de datos

7.3.7.1.1 Unidades funcionales 

de la ruta de datos

7.3.7.1.2 Arquitectura 

 estructural de la ruta de datos

7.3.7.1.3 Paquete de tipos de control

7.3.7.2. Controlador

7.3.7.3. Conexión estructural Controlador-Ruta de datos

 

7.4. Modelado de un puerto serie 

de entrada/salida

 

7.5. Prácticas 7

7.5.1. Objetivos

7.5.2. Prácticas

7.5.3. Documentación

 

Capítulo 8.

Diseño de un Computador con  

VHDL

 

8.1. Definición del computador

8.1.1. Memoria y registros

8.1.2. Formato de las 

          instrucciones

8.1.3. Repertorio de 

          instrucciones

8.1.4. Ejemplos de programas

 

8.2. Modelo de comportamiento  funcional

8.2.1. Declaración de entidad

8.2.2. Representación de las estructuras de datos

8.2.3. Ejecución de instrucciones

8.2.4. Visualización del resultado 

de la ejecución

8.2.5. Código VHDL del modelo completo

8.2.6. Paquete utilidad

8.2.7. Resultados de la 

         simulación

 

8.3. Modelo UCP-Memoria

8.3.1. Modelo  de la Memoria

8.3.2. Modelo  del reloj

8.3.3. Modelo  de la Unidad 

Central de Proceso

8.3.3.1. Procedimiento de 

             lectura

8.3.3.2. Procedimiento de 

             escritura

8.3.3.3. Fases de busqueda y decodificación-ejecución

8.3.4. Conexión 

          UCP-Memoria-Reloj

8.3.5. Resultados de la 

          simulación

 

8.4. Modelo Estructural

8.4.1. Estructura de la ruta de 

datos

8.4.2. Modelo estructural de la  

ruta de datos

8.4.2.1. Multiplexor

8.4.2.2. Registros de 12 bits  

(mdr, mar, pc, ac)

8.4.2.3. Registro de 

             Instrucciones (ir)

8.4.2.4. Registro de  Estado

8.4.2.5. Unidad           Aritmético-Lógica  (ual)

8.4.2.6. Conexión estructural de 

la ruta de datos

8.4.3. Modelo de la Unidad de Control

8.4.3.1. Definición de los tipos 

de control

8.4.3.2. Modelo de 

comportamiento de la 

Unidad de Control

8.4.4. Reloj

8.4.5. Memoria

8.4.6. Conexión estructural 

 Reloj-Memoria-Unidad de 

 Control-Ruta de Datos

8.4.7. Resultados de la 

simulación

 

8.5.Practica 8

8.5.1. Objetivos

8.5.2. Práctica a realizar

8.5.3. Documentación

 

8.6. Práctica 9

8.6.1. Objetivos

8.6.2. Práctica a realizar

8.6.2.1. Arquitectura del 

procesador

8.6.2.2. Conjunto de 

instrucciones

8.6.2.3. Arquitectura de los 

buses

8.6.3. Documentación