• No se han encontrado resultados

MODULO I: INTRODUCCION. Tema 1: Introducción a la estructura de computadores

N/A
N/A
Protected

Academic year: 2021

Share "MODULO I: INTRODUCCION. Tema 1: Introducción a la estructura de computadores"

Copied!
291
0
0

Texto completo

(1)

MODULO I: INTRODUCCION

Tema 1: Introducción a la estructura de computadores

1.

Objetivos de la asignatura

2.

Niveles de descripción de un computador

2.1. Nivel Físico

2.2. Nivel Electrónico 2.3. Nivel Lógico

2.4. Transferencia de Registros (RT) 2.5. Arquitectura (lenguaje máquina) 2.6. Software básico (sistema operativo) 2.7. Lenguajes de alto nivel

2.8. Algoritmos 2.9. Aplicaciones

3.

Estructura básica de un computador convencional

3.1. Arquitectura von Neumann

3.2. Sistema de interrupciones 3.3. Sistema de memoria caché 3.4. Sistema de memoria virtual

4.

Evolución histórica: tecnología, estructura y arquitectura

4.1. Aumento de rendimiento a través de la organización y arquitectura

4.1.1. Paralelismo y Segmentación

4.1.2. Procesadores Segmentados

4.1.3. Procesadores Superescalares

4.1.4. Procesadores VLIW

4.1.5. Procesadores Vectoriales

4.1.6. Multiprocesadores de Memoria Compartida

4.1.7. Multicomputadores

5.

Lenguajes de descripción hardware.

5.1. Lenguajes precursores

5.1.1. CDL (Computer Design Language)

5.1.2. DDL (Digital systems Design Language)

5.1.3. AHPL (A Hardware Programming Language)

5.1.4. ISPS (Instruction Set Processor Specifications)

5.1.5. TI-HDL (Texas Instruments-HDL)

5.2. Lenguajes actuales

5.2.1. Verilog

5.2.2. UDL/I

(2)

MODULO II: ARQUITECTURA DEL PROCESADOR

Tema 2: Formato de instrucciones y modos de direccionamiento

1.

Introducción al repertorio de instrucciones

2.

Formato de las instrucciones: diseño del repertorio

2.1. Número de operandos explícitos por instrucción 2.2. Forma de almacenar operandos en la CPU

2.2.1. Arquitectura de pila

2.2.2. Arquitectura de acumulador

2.2.3. Arquitectura de registros de propósito general

2.2.3.1.Arquitectura registro-registro (carga-almacenamiento). 2.2.3.2.Arquitectura registro-memoria

2.2.3.3.Arquitectura memoria-memoria 2.3. Códigos de operación de longitud fija y variable 2.4. Propiedades generales del direccionamiento.

2.4.1. Resolución

2.4.2. Orden de los bytes en memoria

2.4.2.1.Modo big-endian 2.4.2.2.Modo little-endian 2.4.3. Alineación 2.4.4. Espacios de direcciones

3.

Modos de direccionamiento.

3.1. Inmediato.

3.2. Directo (memoria o registros) 3.3. Indirecto (memoria)

3.4. Indirecto (registro)

3.5. Modos con desplazamiento.

3.5.1. Direccionamiento base más desplazamiento

3.5.2. Direccionamiento relativo

3.5.3. Direccionamiento indexado

3.5.4.Direccionamiento indexado con factor de escala

3.6. Modos compuestos(MC 68.X)

3.7. Modos de direccionamiento del MIPS R-2000 3.8. Modos de direccionamiento del Pentium II 3.9. Modos de direccionamiento del ARM

4.

Soporte de los modos de direccionamiento a los lenguajes de alto nivel

4.1. Visibilidad en C y Pascal

4.2. Acceso a variables escalares locales o globales (contenido) 4.3. Acceso a variables escalares no locales (contenido) 4.4. Acceso a variables escalares locales (dirección) 4.5. Acceso a variables escalares no locales (dirección) 4.6. Acceso a variables de tipo array locales (contenido) 4.7. Acceso a variables de tipo array no locales (contenido) 4.8. Acceso a variables de tipo array locales (dirección) 4.9. Acceso a variables de tipo record locales (contenido)

(3)

Tema 3: Formato de los datos y clases de instrucciones

1.

Tipos de datos y formatos de representación.

1.1. Números naturales

1.1.1. Representación binaria

1.1.2. Representación BCD (Decimal Codificado en Binario)

1.2. Números enteros

1.2.1. Signo y magnitud

1.2.2. Complemento a dos

1.2.3. Complemento a uno

1.3. Números reales

1.3.1. Coma flotante: Estándar IEEE 754

1.4. Caracteres

1.5. Compresión de datos Lempel-Ziv (LZ), 1.6. Tipos de datos en el 68000 y el Pentium II

2.

Instrucciones que operan sobre datos.

2.1. Instrucciones de movimiento o transferencia de datos 2.2. Instrucciones de desplazamiento y rotación

2.3. Instrucciones lógicas y de manipulación de bits 2.4. Instrucciones aritméticas

2.5. Instrucciones de transformación de datos 2.6. Instrucciones de entrada/salida

2.7. Instrucciones de manipulación de direcciones

2.8. Instrucciones que operan sobre datos en el Pentium II, 68000 y ARM

3.

Instrucciones paralelas SIMD (Single Instruction Multiple Data)

3.1. Tipos de datos: registros MMX 3.2. Repertorio de instrucciones MMX 3.3. Ejemplos de codificación MMX

4.

Instrucciones de control del flujo de ejecución.

4.1. Instrucciones de bifurcación condicional

4.1.1. Gestión de la Condición

4.1.2. Especificación de la dirección

4.2. Subrutinas

4.2.1. Control de la dirección de vuelta

4.2.2. Paso de parámetros

4.2.3. Preservación del contexto

4.2.4. Variables locales de la subrutina

4.3. Ejemplos: MC 68000, Pentium y ARM

5.

Soporte de las instrucciones de control a las construcciones de alto nivel

5.1. Construcciones condicionales

(4)

Tema 4: Rendimiento del procesador.

1.

Medidas del rendimiento de un computador

1.1. Tiempo de ejecución

1.1.1. Tiempo de respuesta

1.1.2. Tiempo de CPU

1.1.3. Tiempo de CPU utilizado por el usuario.

1.1.4. Tiempo de CPU utilizado por el S.O. Es el tiempo que el S.O. emplea para

1.2. Otros parámetros de rendimiento

1.2.1. MIPS (Millones de Instrucciones Por Segundo)

1.2.2. MFLOPS (Millones de operaciones en punto FLOtante Por Segundo)

1.2.3. Productividad (throughput)

1.2.4. Ganancia de velocidad (speedup): Ley de Amdahl

1.2.5. Rendimiento medio armónico

2.

Patrones de medida (Benchmarks)

2.1. LINPACK

2.2. SPEC: (System Performance and Evaluation Cooperative) 2.3. TPC (Transaction Processing Performance Council) 2.4. Otros benchmarks

2.4.1. Whetstone

2.4.2. Dhrystone

3.

Influencia en el rendimiento de las alternativas de diseño

3.1. Tipo de elementos de memoria en la CPU

3.2. Referencias a memoria en instrucciones ALU 3.3. Orden de ubicación de los datos

3.4. Alineamiento de datos 3.5. Direccionamientos 3.6. Datos operando 3.7. Operaciones

3.8. Sentencias de salto condicional

3.9. Llamadas a procedimientos (subrutinas)

3.10.Registros de propósito general: ventanas de registros

4.

Influencia de los compiladores de lenguajes de alto nivel

4.1. Optimización de registros

5.

Procesadores RISC y CISC

5.1. Características comparativas 5.2. Segmentación

5.3. Dependencias 5.4. Ejemplo: DLX

5.4.1. Formatos de las instrucciones

5.4.2. Repertorio de instrucciones

(5)

MODULO III: SUBSISTEMA DE MEMORIA

Tema 5: Organización de la memoria: memoria principal.

1.

Características generales de las memorias

1.1. Método de acceso 1.2. Soporte físico 1.3. Alterabilidad

1.4. Volatilidad con la fuente de energía 1.5. Duración de la información 1.6. Proceso de lectura

1.7. Ubicación en el computador 1.8. Parámetros de velocidad 1.9. Unidades de transferencia

1.10.Jerarquía de las unidades de memoria de un computador

2.

Organización interna de la memoria principal.

2.1. Organización 2D 2.2. Organización 3D

3.

Diseño de memorias

3.1. Ampliación del número de bits de la palabra de memoria 3.2. Ampliación del número de palabras de memoria

3.3. Ampliación de la longitud y el número de palabras de memoria 3.4. Ubicación en el espacio de direcciones.

3.4.1. Decodificación parcial y total

3.5. Disposición de los módulos de memoria

3.5.1. SIMM (Single In-line Memory Module).

3.5.2. DIMM (Dual In-line Memory Module).

4.

Detección y corrección de errores.

4.1. Códigos detectores de errores

4.2. Códigos correctores de errores (Hamming)

5.

Memoria entrelazada.

5.1. Entrelazado de orden superior 5.2. Entrelazado de orden inferior

5.3. Memoria entrelazada con organización S 5.4. Memoria entrelazada con organización C

(6)

Tema 6: Memoria Caché.

1.

Principios básicos de funcionamiento de la memoria caché

1.1. Localidad de referencia: temporal y espacial 1.2. Tasa de aciertos y tasa de fallos:

2.

Elementos de diseño.

2.1. Función de correspondencia

2.1.1. Correspondencia directa

2.1.2. Correspondencia asociativa

2.1.3. Correspondencia asociativa por conjuntos

2.2. Algoritmos de sustitución

2.2.1. Aleatoria

2.2.2. LRU(Least Recently Used)

2.2.3. FIFO (First In First Out)

2.2.4. LFU(Least Frequently Used)

2.3. Política de escritura

2.3.1. Escritura directa o inmediata (write through)

2.3.2. Postescritura (copy back)

2.3.3. Asignación en escritura (write allocate)

2.3.4. No asignación en escritura (No write allocate)

2.4. Política de búsqueda

2.4.1. Por demanda

2.4.2. Anticipativa (prebúsqueda)

2.5. Clasificación de los fallos caché

3.

Factores que determinan el rendimiento de la memoria caché.

3.1. Reducción de la tasa de fallos

3.1.1. Aumento del tamaño del bloque

3.1.2. Aumento de la asociatividad

3.1.3. Utilización de una caché de víctimas

3.1.4. Cachés pseudoasociativas

3.1.5. Prebúsqueda de instrucciones y datos

3.1.6. Prebúsqueda controlada por el compilador

3.1.7. Optimizaciones del compilador

3.1.7.1.Fusión de arrays 3.1.7.2.Fusión de bucles 3.1.7.3.Intercambio de bucles 3.1.7.4.Descomposición en bloques

3.2. Reducción de la penalización de fallos

3.2.1. Prioridad a los fallos de lectura frente a los de escritura

3.2.2. Utilización de sub-bloques dentro de un bloque

3.2.3. Utilización de un segundo nivel de caché

3.3. Reducción del tiempo de acierto

3.3.1. Cachés pequeñas y simples

3.3.2. Evitar traducción de direcciones durante la indexación de las cachés

3.3.3. Escrituras segmentadas para aclarar los aciertos de escritura

(7)

Tema 7: Memoria Virtual.

1.

Gestión de memoria

1.1. Solapamiento (overlay) 1.2. Reubicación 1.3. Paginación 1.4. Protección 1.5. Compartición

2.

Memoria virtual

2.1. Memoria virtual paginada

2.1.1. Tablas de páginas de varios niveles

2.1.2. Tabla de páginas invertida HASH

2.1.3. Buffer de traducción anticipada (TLB)

2.2. Interacción entre la memoria virtual y la memoria cache

2.2.1. Acceso paralelo a TLB y caché

2.2.2. Caches con direcciones virtuales

2.3. Múltiples espacios virtuales 2.4. Políticas de búsqueda (fetch)

2.4.1. Prebúsqueda

2.4.2. Búsqueda por demanda

2.5. Políticas de sustitución (replacement)

2.5.1. Aleatoria

2.5.2. FIFO (First In First Out)

2.5.3. Reloj (FINUFO: First In Not Used First Out)

2.5.4. LRU (Least Recently Used)

2.5.5. Optima (MIN)

3.

Memoria virtual segmentada

3.1. Políticas de ubicación (placement) para memorias segmentadas

3.1.1. Mejor ajuste (best fit)

3.1.2. Peor ajuste (worst fit) 3.1.3. Primer ajuste (first fit)

4.

Memoria con segmentos paginados

5.

Ejemplo de sistema de memoria virtual: procesador Pentium II

5.1. Mecanismo de segmentación

(8)

MODULO IV: SUBSISTEMA DE ENTRADA/SALIDA

Tema 8: Organización de la Entrada/salida

1.

Funciones implicadas en las operaciones de entrada/salida

2.

Estructura del sistema de E/S: módulos de e/s y controladores de dispositivos

2.1. Módulos de E/S

2.2. Controlador de dispositivo (periférico)

2.3. Comunicación entre el módulo de E/S y el controlador de dispositivo periférico

3.

Mecanismos básicos de e/s: sincronización

4.

E/S controlada por programa

4.1. Ejemplos de E/S controlada por programa 4.2. E/S serie y paralelo

4.2.1. E/S serie asíncrona

4.2.2. E/S serie síncrona

4.2.3. Ejemplo de E/S serie: ACIA (Asynchronous Communicatios Interface Adapter)

4.2.4. Ejemplo de E/S paralelo: VIA (Versatil Interface Adapter)

5.

E/S por interrupción: gestión de interrupciones

5.1. Tipos de sistemas de interrupciones

5.1.1. Interrupciones autovectorizadas

5.1.2. Interrupciones vectorizadas:

5.2. Prioridades

5.3. Enmascaramiento de interrupciones 5.4. Anidamiento de interrupciones

5.5. Ejemplos de sistemas de interrupciones

5.5.1. Sistema de interrupciones del microprocesador MC 6809

5.5.2. Sistema de interrupciones del microprocesador MC 68000

5.5.2.1.Líneas de interrupción 5.5.2.2.Enmascaramiento 5.5.2.3.Vectores de excepción

5.5.2.4.Ejemplo de conexión de periféricos

5.5.3. Sistema de interrupciones del microprocesador ARM

6.

E/S por acceso directo a memoria (DMA): motivación

6.1. Estructura y funcionamiento de un controlador de DMA

6.1.1. Bus único (DMA independiente)

6.1.2. Integración de funciones DMA-E/S

6.1.3. Bus de E/S conectado al DMA

7.

Procesadores de E/S: tipos y estructura.

7.1. Canal multiplexor

7.2. Canal selector

7.3. Canal multiplexado por bloques

(9)

Tema 9: Dispositivos periféricos y controladores

1.

Discos magnéticos

1.1. Grabación de información sobre superficies magnéticas 1.2. Métodos de codificación sobre superficies magnéticas

1.3. Formato de grabación

1.4. Comprobación de Redundancia Cíclica (CRC)

1.4.1. Aritmética módulo 2

1.4.2. Codificación

1.4.3. Representación de los errores

1.4.4. Interpretación polinómica de los códigos CRC

1.4.4.1.Error simple 1.4.4.2.Errores dobles 1.4.4.3.Errores en ráfaga:

1.4.5. Polinomios generadores estándar

1.4.6. Implementación hardware

1.5. Parámetros de rendimiento de un disco magnético

1.5.1. Tiempo de búsqueda

1.5.2. Retardo rotacional

1.5.3. Tiempo de acceso

1.6. Dispositivo floppy

1.6.1. Estructura de bloques del dispositivo

1.6.2. Formato de datos

1.6.3. Estructura y funcionamiento del controlador de dispositivo

2.

Discos ópticos

2.1. CD-ROM

2.1.1. Proceso de escritura (grabación)

2.1.2. Proceso de lectura

2.1.3. Codificación de la información

2.2. DVD (Digital Versatil Discs)

2.3. WORM (Write Once, Read Many times)

2.4. Discos magnetoópticos o WMRA (Write Many, Read Always)

2.4.1. Proceso de escritura

2.4.2. Proceso de lectura

2.4.3. Proceso de regrabación

3.

Monitores de tubo de rayos catódicos (CRT)

3.1. Principios de funcionamiento

3.2. Sincronismo

3.3. Generación de caracteres 3.4. Controlador

4.

Pantallas de cristal líquido (LCD-TFT)

5.

Monitores de color

6.

Unidades de Procesamiento Gráfico (GPU)

7.

Impresoras

7.1. Impresora de martillo 7.2. Impresora de chorro de tinta 7.3. Impresora láser

(10)

8.

Ratón

Tema 10: Buses de comunicación

1.

Estructura de un bus

1.1. Líneas 1.1.1. Líneas de Direcciones 1.1.2. Líneas de Datos 1.1.3. Líneas de control 1.2. Direccionalidad de buses 1.2.1. Líneas unidireccionales 1.2.2. Líneas bidireccionales 2.

Protocolos de transferencia

2.1. Síncronos 2.2. Asíncronos 2.3. Semisíncronos 2.4. Ciclo partido

3.

Protocolos de arbitraje

3.1. Protocolo de encadenamiento (daisy chaining) de dos señales 3.2. Protocolo de encadenamiento (daisy chaining) de tres señales 3.3. Protocolo de encadenamiento (daisy chaining) de cuatro señales 3.4. Protocolo con concesión por encuesta (polling)

3.5. Protocolo con señales independientes 3.6. Protocolo distribuido

4.

Jerarquía de buses

4.1. Bus del sistema (backplane) 4.2. Buses locales

4.3. Buses de E/S o de expansión 5.

Buses normalizados

5.1. Bus PCI (Peripheral Component Interconnect)

5.1.1. Estructura

5.1.2. Ordenes

5.1.3. Transferencia de datos

5.1.4. Arbitraje

5.2. Bus USB (Universal Serial Bus)

5.2.1. Arquitectura

5.2.2. Protocolo

5.2.3. Modos de transmisión

5.3. Bus SCSI (Small Computer System Iterface)

5.3.1. Líneas de señal

5.3.2. Operación (temporización)

5.3.3. Mensajes

(11)

Bibliografía:

Organización y arquitectura de computadores

W. Stalling, Prentice Hall 2000, 2007

Estructura y diseño de computadores. Interficie circuitería/programación

D.A. Patterson y J.L. Hennessy, Reverté, 2000

Computer Architecture. A Quantitative Approach

J.L. Hennessy and D.A. Patterson 2007

(12)

MODULO I: INTRODUCCION

Tema 1: Introducción a la estructura de computadores

Objetivos:

 Describir el contenido general de la asignatura y situarlo en el conjunto de materias que abordan el estudio de un computador digital.

 Conocer las características fundamentales del funcionamiento de un computador con

arquitectura von Neumann y analizar las principales mejoras añadidas a dicha arquitectura: interrupciones, memoria caché y memoria virtual.

 Diferenciar la tecnología, la estructura y la arquitectura de un computador, y hacer un recorrido general sobre las mejoras de rendimiento basadas en el paralelismo.

 Introducir los lenguajes de descripción hardware como instrumentos de especificación y simulación.

Contenido:

1.

Objetivos de la asignatura

2.

Niveles de descripción de un computador

3.

Estructura básica de un computador convencional

4.

Evolución histórica: tecnología, estructura y arquitectura

5.

Lenguajes de descripción hardware

1.

Objetivos de la asignatura

La arquitectura de un computador está constituida por el conjunto de funcionalidades disponibles para un programador que utiliza el lenguaje máquina, básicamente, el repertorio de instrucciones y los elementos de memoria referenciados desde él, es decir, los registros generales y la memoria principal. Las funcionalidades de una arquitectura se pueden conseguir con diferentes organizaciones internas o estructuras, diferenciándose unas de otras fundamentalmente en los parámetros de rendimiento y el coste. Finalmente, la estructura de un computador se puede implementar con diferentes tecnologías, siendo nuevamente el coste y el rendimiento los elementos diferenciales. Arquitectura, estructura y tecnología constituyen, pues, tres niveles de estudio del hardware de un computador.

En esta asignatura abordaremos el estudio de la organización o estructura interna de un computador. Para ello la materia la dividiremos en cuatro módulos. En el primero realizaremos una introducción general a la estructura de computadores. En el segundo estudiaremos la arquitectura del repertorio de instrucciones (ISA), arquitectura que define la interfaz hardware-software de la máquina. En el tercero veremos toda la jerarquía de memoria de una máquina y su gestión. Finalmente, en el cuarto estudiaremos las unidades de entrada/salida, los periféricos y los

(13)

buses de comunicación. El estudio de la unidad aritmético-lógica y la unidad de control se aborda en la asignatura Ampliación de Estructura de Computadores.

Para situar con mayor precisión el objeto de estudio de esta asignatura analizaremos en el apartado siguiente los diferentes niveles de descripción que se suelen contemplar en el estudio de un computador digital.

2.

Niveles de descripción de un computador

La estrategia que habitualmente se utiliza para abordar el estudio de los sistemas complejos consiste en especificarlos a diferentes niveles de abstracción. Cada nivel se caracteriza por:

A) Unos elementos de entrada, es decir, disponibles para el diseño en este nivel, y que proceden del nivel inmediato inferior.

B) Unos elementos de salida, es decir, objetivos del diseño en este nivel, y destinados al nivel inmediato superior.

C) Una metodología de análisis y síntesis de los elementos de salida en términos de los de entrada.

Con esta estrategia, la complejidad del sistema queda dividida, acotada y organizada en las complejidades parciales de cada nivel, dentro de cuyos límites se puede aplicar una metodología propia de estudio.

Al computador digital como sistema artificial complejo se le ha aplicado esta estrategia. En nuestro caso consideraremos los siguientes niveles de abstracción dentro del estudio de un computador digital:

Estructura de

Computadores

ARQUITECTURA

SOFTWARE BASICO (S.O.) LENGUAJES DE ALTO NIVEL

ALGORITMOS APLICACIONES TRANFERENCI DE REGISTROS ELECTRONICO FISICO LOGICO

Cada nivel se corresponde con la visión que tiene del sistema un tipo determinado de usuario, y en cada uno podemos considerar dos procesos de estudio diferentes, el análisis y la síntesis. El análisis parte de la implementación del sistema a un cierto nivel en términos de elementos básicos del nivel inferior, y llega a determinar la función del mismo, es decir, su

(14)

especificación. El sentido de la síntesis es el opuesto, parte de la especificación de un sistema y obtiene su implementación en función de los elementos básicos del nivel inferior. En la siguiente figura hemos representado gráficamente esta relación:

ESPECIFICACION

IMPLEMENTACION

Análisis

Síntesis

Ejemplo: Especificación Implementación Síntesis a b Sumador a+b arrastre a b a+b arrastre a b a+b arrastre 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 Análisis

Comentaremos en los sub-apartados siguientes cada uno de estos niveles.

2.1.

Nivel Físico

En el nivel físico se manipulan como elementos de entrada las formas geométricas que se corresponden con las máscaras de difusión utilizadas en el proceso de fabricación de los circuitos integrados del computador. Determinadas disposiciones de estas formas representan dispositivos electrónicos concretos, tales como transistores, resistencias, etc., que son los elementos de salida del nivel físico. En este nivel se suele utilizar como herramienta de estudio software de manipulación gráfica con restricciones.

OUT IN DD VSS Físico (silicio)

2.2.

Nivel Electrónico

En este nivel los elementos de salida, es decir, los biestables y las puertas lógicas, se obtiene a partir de dispositivos electrónicos (resistencias, transistores, etc.) conectados según una determinada topología. Como metodología de estudio (análisis y síntesis) en este nivel se utilizan

(15)

técnicas cuantitativas de análisis en el plano eléctrico-temporal, fundamentalmente ecuaciones algebraicas y diferenciales. OUT IN VD D VSS Circuito eléctrico

2.3.

Nivel Lógico

Los elementos de entrada a este nivel son los biestables y las puertas lógicas, y los de salida son módulos combinacionales y secuenciales tales como multiplexores, codificadores, sumadores, registros, contadores, etc. Este nivel de estudio dispone de sus propias técnicas de análisis y síntesis. El comportamiento de un circuito combinacional se representa con una función lógica que admite una expresión algebraica manipulable simbólicamente dentro de un formalismo matemático: el álgebra de conmutación (un álgebra de Boole). Para los circuitos secuenciales se utiliza la teoría de las máquinas de estados finitos.

S R Q NQ S R Q NQ Circuito lógico

2.4.

Transferencia de Registros (RT)

Los elementos de entrada al nivel RT son registros, módulos combinacionales y elementos de interconexión (buses y/o multiplexores). Los primeros mantienen el estado del sistema, los segundos definen las transformaciones elementales del estado, y los terceros permiten el intercambio de información entre los dos primeros. Los elementos de salida son el conjunto de transferencias elementales posibles en la ruta de datos construida con los tres tipos de elementos de entrada. Al contrario de lo que ocurría en los dos niveles anteriores, el nivel RT no dispone de una herramienta propia de análisis y síntesis, aunque sí es posible utilizar los modernos lenguajes de descripción hardware (por ejemplo VHDL) como instrumentos de expresión precisa y estándar a este nivel. bus bus

Transferencia de registros

MAR RI RMICAUX RMIC ROM DE CONTROL SECUENCIADOR

(16)

2.5.

Arquitectura (lenguaje máquina)

Este es el nivel que separa el hardware del software. Los elementos básicos de entrada son las transferencias y transformaciones posibles de información en la ruta de datos de un computador. Con ellos se construyen las instrucciones máquina y su método de secuenciamiento, es decir, lo que se denomina un lenguaje máquina. Lo más significativo de este nivel es que con él comienzan los niveles propiamente simbólicos, es decir, niveles cuyos componentes básicos no son objetos físicos, sino símbolos relacionados por un lenguaje, el instrumento por excelencia del conocimiento simbólico.

El nivel de lenguaje máquina suele ser el primer nivel al que tiene acceso el usuario de un computador, salvo si la máquina es microprogramable, en cuyo caso dispone de un nivel intermedio que permite modificar el repertorio de instrucciones. Normalmente, el usuario no utiliza directamente el lenguaje máquina, sino una representación simbólica del mismo conocida como lenguaje ensamblador, que ofrece algunas prestaciones más que el puro lenguaje máquina, como el uso de macros y la definición simbólica de constantes y posiciones de memoria.

Este nivel queda definido por 1) el repertorio de instrucciones, con sus formatos, tipos de direccionamiento, modos de secuenciamiento y representación de datos, y 2) la memoria y el conjunto de registros visibles por el programador. En la actualidad cabe distinguir dos planteamientos diferentes a la hora de definir el nivel máquina de un computador.

Memoria

Registros

Repertorio de instrucciones

LDR Ri, Dj STR Ri, Dj ADD Ri, Rj

En primer lugar está el planteamiento CISC (Complex Instruction Set Computers) que define un repertorio de instrucciones bastante complejo y numeroso, con muchos tipos de direccionamiento y muchos modos de control, pretendiendo reducir la distancia semántica que lo separa de los lenguajes de alto nivel, y facilitar así el diseño del compilador. La microprogramación es la técnica de diseño de la unidad de control con la flexibilidad suficiente para facilitar la implementación de las máquinas CISC. Un caso extremo de proximidad al lenguaje de alto nivel lo tenemos en arquitecturas avanzadas que tienen este tipo de lenguaje como su lenguaje máquina.

En segundo lugar tenemos el planteamiento RISC (Reduced Instruction Set Computer), que simplifica la complejidad y el número de instrucciones máquina, dejándolo reducido a un conjunto pequeño y rápido que cubre un porcentaje muy elevado del peso computacional de los programas. Los compiladores para este tipo de arquitecturas asumen la responsabilidad de utilizar eficientemente unas instrucciones con poco contenido semántico pero elevada velocidad de ejecución.

Dos aspectos importantes del nivel máquina son también la gestión de memoria y la entrada/salida. Sin embargo, en los computadores actuales estos recursos los utiliza el programa del usuario a través del sistema operativo.

2.6.

Software básico (sistema operativo)

El Sistema Operativo (SO) no constituye un nivel del mismo tipo que los demás, por ejemplo, el lenguaje máquina o el lenguaje de alto nivel. En realidad se trata de un gestor de determinados recursos del nivel máquina que por la frecuencia y complejidad de uso resulta más eficiente utilizarlos agrupados en una especie de máquina virtual que es el SO.

(17)

En los primeros computadores las funciones del SO eran escasas, limitadas básicamente a la carga del programa y a la entrada salida. Sin embargo, las competencias de este sistema han ido aumentando con la complejidad y sofisticación de las máquinas modernas, que funcionan en entornos multiusuario y multitarea y que requieren una gestión de todos los recursos de la máquina: la CPU, la jerarquía de memoria, el tratamiento de las excepciones, los mecanismos de protección, etc.

El protagonismo que el SO tiene en un computador actual hace que cuando se diseña la arquitectura de un procesador se tengan muy en cuenta las funciones de este sistema.

2.7.

Lenguajes de alto nivel

En este nivel se utilizan lenguajes de programación con una sintaxis y una semántica más complejas que las del lenguaje ensamblador. Estos lenguajes pretenden facilitar el trabajo del programador aportando recursos expresivos más próximos a los problemas que se van a resolver. En este sentido cabe diferenciar dos grandes grupos. Un primer grupo, denominado de estilo imperativo como Pascal, Fortran, etc., que presentan una semántica operacional que refleja directamente el funcionamiento de la máquina Von Neumann, es decir, que obligan al programador a expresar la secuencia de órdenes cuya ejecución resuelve el problema en cuestión. El segundo grupo lo formarían los lenguajes de estilo declarativo, como Prolog, Miranda o Lisp (puro), que disponen de un modelo computacional diferente (aunque equivalente) al de la máquina Von Neumann. En este caso el programador tan solo tiene que declarar las relaciones lógicas o funcionales de los elementos que intervienen en la especificación del problema a resolver.

Este nivel requiere un proceso de traducción al nivel máquina que es realizado por un programa denominado compilador. Se trata de un programa que toma como dato de entrada un programa fuente escrito en un lenguaje de alto nivel, y produce como salida un programa objeto escrito en lenguaje máquina con una semántica equivalente (igual significado).

Nivel L.M. CMP A, B Bope L1 <sentencias2> BRA L2 L1 <sentencias1> L2 ... Nivel L.A.N. IF A ope B THEN <sentencias1> ELSE <sentencias2>

2.8.

Algoritmos

En el nivel algorítmico se expresa la resolución de un problema mediante un conjunto de reglas aplicadas de forma sistemática y ordenada, es decir, mediante un algoritmo. Los procedimientos que define un algoritmo son independientes de cualquier lenguaje de programación y de cualquier máquina particular.

2.9.

Aplicaciones

Las aplicaciones se corresponden con dominios de actividad que pueden automatizarse con el uso de un computador digital. Del análisis del dominio se extraen unas especificaciones funcionales que son expresadas mediante algoritmos. Codificados estos algoritmos en un lenguaje de programación y previa compilación, se ejecutan en la máquina.

2.10.

Inconvenientes de la división entre niveles

El establecimiento de niveles de abstracción en el estudio de un computador hace posible acotar su complejidad al utilizar metodologías de análisis y síntesis propias en cada nivel, permitiendo que dentro de un nivel el usuario pueda abstraerse de lo que ocurre en los demás niveles. Este planteamiento que facilita sin duda el estudio del computador presenta sin embargo

(18)

algunas dificultades cuando se contempla el problema de la optimización. En efecto, a la hora de implementar una especificación no sólo deben cumplirse todos los requerimientos funcionales de la misma, además se deben optimizar ciertas funciones de calidad que generalmente tienen que ver con la velocidad (maximización) y el costo (minimización). En efecto, existen ocasiones en las que contemplar tan solo los niveles frontera de un nivel en el que se plantea un problema de diseño puede dar lugar a la imposibilidad de optimizar la implementación. A título de ejemplo citaremos dos casos en los que se presenta esta situación. El primero entre los niveles eléctrico y lógico, y el segundo entre los niveles lenguajes de alto nivel y arquitectura (repertorio de instrucciones)

1) Niveles eléctrico <--> lógico Si nos planteamos el diseño de un multiplexor con conmutadores bidireccionales (tecnología NMOS estática) respetando los niveles de diseño, obtendríamos en primer lugar el esquema lógico (con puertas) del multiplexor, y después expresaríamos cada puerta lógica en términos de los conmutadores bidireccionales.

Z X3 X2 X1 X0 MUX X3 X2 X1 X0 1 1

El diseño resultante es más costoso (mayor número de conmutadores) que el que podemos obtener si planteamos el diseño directamente con conmutadores:

(19)

S1 S0 S1 S0 S1 S0 S1 S0 1 X3 X2 X1 X0

2) Niveles lenguaje de alto nivel <--> arquitectura

En este caso un compilador, para optimizar el código máquina que genera (mayor velocidad), tiene en cuenta no sólo la arquitectura (repertorio de instrucciones) sino la forma en que se ejecutan estas instrucciones (estructura) en la ruta de datos de la máquina. Este hecho puede dar lugar a que el orden de las instrucciones máquina generadas no sea el orden lógico que utilizaría un programador de lenguaje máquina que ignorase los detalles estructurales de la arquitectura. Esta situación viene producida fundamentalmente por la segmentación y paralelización de las instrucciones dentro de la máquina y se estudiará con detalle en las asignaturas de Ampliación de Estructura de Computadores y Arquitectura e Ingeniería de Computadores.

3.

Estructura básica de un computador convencional

3.1.

Arquitectura von Neumann

La estructura básica de un computador actual sigue siendo la original de von Neumann, una máquina secuencial que ejecuta datos escalares y que hemos representado en la siguiente figura:

CONTROL

UAL REG.

ENTRADA SALIDA

MEMORIA

PROCESADOR

La memoria almacena las instrucciones del programa, los datos iniciales, los resultados parciales y los finales. Se accede de forma directa (RAM) a cualquier posición para realizar operaciones de lectura o escritura.

El procesador es la unidad encargada de leer y ejecutar las instrucciones. Para ello dispone de una ruta de datos constituida por un conjunto de registros (REG.), una unidad aritmético-lógica (UAL), y unos buses de comunicación; y una unidad de control, que es la encargada de generar las señales que gobiernan todos los dispositivos.

(20)

1) Organización lineal de la memoria 2) Palabra de longitud fija.

3) Espacio único de direcciones.

4) Memoria única para datos e instrucciones sin diferenciar entre ambos. 5) Ejecución secuencial de las instrucciones salvo las de ruptura de secuencia

A esta organización básica de von Neumann se han ido incorporando algunas aportaciones significativas entre las que destacaremos las siguientes: Sistema de interrupciones, Sistema de memoria caché y Sistema de memoria virtual.

3.2.

Sistema de interrupciones

El Sistema de interrupciones permite la interrupción de un programa en ejecución producida por una señal externa a la máquina. El sistema de interrupciones permite una mejor sincronización de la Entrad/Salida con el exterior y la posibilidad de compartir la CPU por más de un programa señal de interrupción línea de interrupción Programa principal I1 I2 . . .Ii Ii+1 . . .In Rutina de tratamiento i1 i2 . . im

3.3.

Sistema de memoria caché

El Sistema de memoria caché permite disminuir el tiempo de acceso a la memoria principal (Mp) ubicando una memoria de menor tamaño y mayor velocidad (memoria caché, Mc) entre la CPU y Mp. El sistema explota la localidad de referencia de los programas haciendo que Mc contenga en cada momento los bloques de Mp más referenciados, y evitando así que la CPU tenga que acceder a Mp:

(21)

CPU Memoria cache (Mc) Memmoria principal (Mp) palbras bloques

3.4.

Sistema de memoria virtual

El Sistema de memoria virtual permite la ejecución de programas cuyo tamaño supere el de la Mp. Para ello el sistema mantiene en Mp, de forma transparente para el programador, tan sólo el conjunto de páginas activas (con mayor probabilidad de ser referenciadas) del programa en ejecución. Las restantes páginas que completan el programa residen en la memoria secundaria, hasta que son referenciadas, en cuyo caso el sistema las lleva a Mp:

Memoria principal (Mp)

páginas

Memoria secundaria (Ms)

4.

Evolución histórica: tecnología, estructura y arquitectura

La velocidad de procesamiento de información de un computador está determinada básicamente por tres elementos: arquitectura, organización (o estructura) y tecnología.

Podemos analizar la influencia de estos elementos en la velocidad de procesamiento de información de un computador teniendo en cuenta que el tiempo T de ejecución de un programa se puede expresar como el producto de tres factores: el número de instrucciones del programa (N), el número medio de ciclos por instrucción (CPI), y el tiempo de ciclo (Tc), como hemos representado en la siguiente figura:

(22)

tiempo I1 I2 I3 N instrucciones . Tc 1 ciclo 3 ciclos 2 ciclos

CPI(nº de ciclos medio/instrucción) Programa

T

Arquitectura del computador Compilador

Arquitectura del computador Organización del computador

Organización del computador Tecnología

T = tiempo de ejecución del programa

N = número de instrucciones del programa

CPI = número medio de ciclos por instrucción

Tc = tiempo de ciclo

T = N * CPI * Tc

Es decir, mientras la arquitectura influye a través del número medio de ciclos por instrucción y del número total de instrucciones, la organización lo hace a través de éste último y el tiempo de ciclo, mientras que la tecnología lo hace casi exclusivamente a través del tiempo de ciclo (o su inversa, la frecuencia de reloj del procesador). El tiempo de ciclo viene determinado por los tres niveles tecnológicos: físico, electrónico, lógico y transferencia de registros.

La tecnología ha experimentado una transformación continua durante las últimas décadas. Desde la aparición del primer computador comercial, la industria informática ha pasado por cuatro generaciones de computadores, diferenciadas básicamente por la tecnología de los componentes básicos. Los relés y las válvulas de vacío de 1940 a 1950, los diodos y transistores discretos de 1950 a 1960, los circuitos integrados de pequeña y media escala de integración (SSI/MSI) de 1960 a 1970, y los circuitos integrados de alta y muy alta escala de integración (LSI y VLSI) desde 1970 en adelante. La disminución del tiempo de conmutación de los componentes electrónicos ha repercutido directamente en el aumento de velocidad de los computadores. También el aumento de la capacidad de integración y de encapsulado han repercutido en la misma dirección. Los cambios tecnológicos alteran constantemente las relaciones de compromiso tecnología-organización-arquitectura, obligando a la reconsideración de viejas ideas ante un nuevo avance tecnológico. En la siguiente figura se muestra el crecimiento del rendimiento de los procesadores desde 1978 medido en SPECint

(23)

4.1.

Aumento de rendimiento a través de la organización y arquitectura

A lo largo de las últimas cuatro décadas la organización y arquitectura de computadores ha experimentado un desarrollo gradual, no traumático, que ha ido decantando aquellas características responsables de las mejoras de rendimiento.

4.1.1. Paralelismo y Segmentación

Las organizaciones y arquitecturas paralelas consiguen que en ciertos instantes de tiempo el computador procese simultáneamente más de una operación básica. La simultaneidad temporal se consigue fundamentalmente con dos técnicas: el paralelismo y la segmentación. La primera ejecuta simultáneamente varias operaciones independientes replicando el número de operadores hardware. La segunda descompone el operador y la operación correspondiente en etapas secuenciales y autónomas, de manera que simultáneamente se puedan ejecutar etapas diferentes de varias operaciones. Ambas técnicas se consideran como dos formas del paralelismo: el paralelismo espacial o replicación la primera, y el paralelismo temporal la segunda.

La idea básica de la segmentación estaba ya latente en la propuesta de von Neumann para construir el primer computador de programa almacenado. Al hablar sobre las técnicas de entrada/salida, sugería la conveniencia de disponer un buffer que permitiese el solapamiento de la ejecución del programa con las operaciones de E/S, es decir, una forma primaria de procesamiento segmentado.

4.1.2. Procesadores Segmentados

Se trata de arquitecturas monoprocesador que operan con una organización interna en la que se segmenta la ejecución de las instrucciones a fin de iniciar una (y finalizar otra) cada ciclo de operación. Sin embargo este objetivo límite difícilmente llega a conseguirse debido a los riesgos estructurales, las dependencias de datos, las bifurcaciones y las excepciones. Para reducir al máximo el efecto de tales ineficiencias se utilizan técnicas software como la reordenación estática de instrucciones, el renombramiento de registros, y los saltos retardados; y técnicas hardware como el adelantamiento (forwarding), la reordenación dinámica de instrucciones y la predicción dinámica de saltos.

(24)

Búsqueda Decodificación Ejecución Escritura

Unidad

Bu UnidadDe UnidadEj UnidadEs

Registros

1 2 3 4 5 6 7 8 ciclos Bu1

Ej2

Bu2 De2 Es2

Es1 Ej1 De1

Bu3 De3 Ej3 Es3 Instrucción 1

Instrucción 2 Instrucción 3

Instrucción 4 Bu4 De4 Ej4 Es4

4.1.3. Procesadores Superescalares

Un procesador superescalar de grado m emite m instrucciones por ciclo, debiendo ser también m el paralelismo a nivel de instrucción para explotarlo completamente. En estos procesadores los recursos para la decodificación y ejecución de instrucciones se incrementan hasta el punto de disponer de m cauces segmentados operando concurrentemente, si bien en algunas etapas los cauces pueden compartir algunas unidades funcionales. En general, los conflictos por dependencias de datos, de control y estructurales de los procesadores escalares segmentados siguen existiendo en los superescalares con mayor complejidad.

Las máquinas superescalares proporcionan compatibilidad a nivel del código objeto con las máquinas escalares, detectando el paralelismo de las instrucciones en tiempo de ejecución. Normalmente, se dividen las instrucciones máquina en categorías, y como mucho una instrucción de cada categoría puede emitirse simultáneamente.

vía 1 vía 2 vía 3 Unidad de ejecución 2 Unidad de ejecución 3 Unidad de ejecución 1 Unidad de Emisión de Instrucciones Unidad de Búsqueda 4.1.4. Procesadores VLIW

En un procesador VLIW (Very Long Instruction Word) una única instrucción especifica más de una operación concurrente, reduciéndose el número de instrucciones por programa en

(25)

comparación con el caso escalar. Las organizaciones VLIW extendieron y formalizaron el concepto de microcodificación horizontal que se venia utilizando años atrás para el diseño de procesadores de propósito especial dedicados a tareas intensivas en cálculo, tales como el procesamiento de señales digitales. Utilizando técnicas avanzadas de compilación se puede extraer el paralelismo de grano fino de un amplio rango de aplicaciones científicas y de propósito general. En estos procesadores los conflictos por dependencias de datos y estructurales se resuelven antes de la ejecución, y son explícitamente controlados por las instrucciones. El hardware adicional se dedica a caminos de datos paralelos y más unidades funcionales, en lugar de a lógica de control y sincronización. Unidad de ejecución Unidad de ejecución 3 Unidad de ejecución 1 DEC DEC DEC Instrucción larga Registros 4.1.5. Procesadores Vectoriales

Los procesadores vectoriales disponen de operaciones que trabajan sobre vectores de números. Por ejemplo, una operación vectorial puede sumar dos vectores de 64 elementos en punto flotante dando como resultado otro vector de 64 elementos. La instrucción vectorial es equivalente a un bucle completo en el que se calcula un elemento del resultado en cada iteración, se actualiza el índice y se bifurca al comienzo.

Una simple instrucción vectorial especifica, pues, una gran cantidad de trabajo, por lo que se reduce la anchura de banda necesaria para su lectura en comparación con la de las instrucciones escalares equivalentes. Además, el acceso a los datos tiene un patrón conocido.

Desde el punto de vista arquitectónico son procesadores segmentados con instrucciones máquina vectoriales. Al no existir dependencias entre operaciones de una instrucción vectorial, se explota eficientemente la segmentación en las unidades aritméticas. Pero para conseguir el rendimiento máximo de estas arquitecturas hay que alimentar a las unidades funcionales segmentadas con nuevos datos en cada ciclo de reloj, lo que requiere un gran ancho de banda con la memoria principal.

Memoria

Registros Unidad aritmética segmentada

Registros

Registros Unidad aritmética segmentada

Unidad aritmética segmentada

(26)

Se trata de arquitecturas compuestas por un conjunto de procesadores que acceden a una única memoria común a través de una red de interconexión. Utilizan memorias caché locales para las que hay que resolver el problema de su coherencia con respecto a la memoria principal y entre sí. Las soluciones que se adoptan tienen un mayor o menor soporte hardware y dependen mucho de la red de interconexión. Otro problema que plantean estas arquitecturas es el de la sincronización de los diferentes procesadores cuando participan de una tarea común. Para ello es necesario disponer del soporte hardware en forma de instrucciones máquina del tipo TEST&SET, TEST&AND, etc. que permiten implementar secciones críticas y otros mecanismos de sincronización a nivel del sistema operativo.

Red de interconexión (bus, red multietapa, crossbar) Procesador

P1 ProcesadorP2 ProcesadorPn

Memoria común compartida

4.1.7. Multicomputadores

Son multiprocesadores de memoria distribuida donde cada procesador tiene un espacio privado de direcciones. Se comunican y sincronizan mediante paso de mensajes a través de una red de interconexión. Las topologías de red más utilizadas son la malla y el hipercubo.

Red de interconexión estática Procesador P1 Memoria M1 Procesador Pn Memoria Mn

5.

Lenguajes de descripción hardware.

Los lenguajes de descripción hardware son lenguajes de alto nivel con una sintaxis similar a los de programación (C, ADA, Pascal, Modula, etc.) y una semántica que permite el modelado y simulación de los dispositivos hardware a diferentes niveles de abstracción. Los primeros lenguajes de este tipo sólo pretendían servir de vehículo de comunicación del diseño. Se trataba de formalismos de especificación de los dispositivos hardware desarrollados por instituciones universitarias o por industrias electrónicas que alcanzaron escasa difusión. Pero los actuales lenguajes han adquirido un alto grado de estandarización y han adoptado los nuevos conceptos de la ingeniería software, permitiendo la verificación de la especificación del diseño mediante

(27)

simulación. Se utilizan como vehículo de entrada a muchas herramientas de diseño automático. Revisaremos brevemente algunos de estos lenguajes

5.1.

Lenguajes precursores

5.1.1. CDL (Computer Design Language)

Fue desarrollado por Yaohan Chu a comienzo de los años 60 bajo el principio de separación de la componente lógica y electrónica de un computador digital. CDL refleja directamente el hardware y sus operaciones, es decir, existe una correspondencia uno-a-uno entre los objetos y operaciones hardware (registros, RAMs, relojes, suma, cuenta, etc.) y las construcciones del lenguaje. La primera versión del simulador CDL para IBM 7090 estuvo disponible en 1968, y la versión tercera para Univac pocos años más tarde. Se utilizó en universidades y en la industria del radar y aeronáutica.

5.1.2. DDL (Digital systems Design Language)

Se desarrolló a mediados de los 60 en la Universidad de Wisconsin con varios objetivos: precisión y concisión para facilitar la especificación de los diseños, potencia suficiente para modelar sistemas complejos, independencia respecto a cualquier tecnología o procedimiento de diseño, capacidad de especificación a diferentes niveles de abstracción y, finalmente, una sintaxis y una semántica que permitieran la documentación jerárquica del diseño.

5.1.3. AHPL (A Hardware Programming Language)

Fue propuesto por F.J. Hill y G.R. Peterson unos meses más tarde que el CDL y DDL, y apareció publicado por primera vez en 1973 en la edición original de Digital Systems: Hardware

Organization and Design. Los autores concibieron AHPL como un lenguaje de síntesis: todo

dispositivo síncrono que pudiese ser implementado en hardware debía ser expresable en AHPL de manera tal que se pudiese traducir a una realización física siguiendo un conjunto simple de reglas. En opinión de uno de sus autores, F.J. Hill, que participó como miembro del grupo de trabajo que formuló las especificaciones originales para VHDL, la existencia de AHPL favoreció la incorporación de mecanismos para permitir el proceso de síntesis en VHDL.

5.1.4. ISPS (Instruction Set Processor Specifications)

Con este lenguaje se dio un paso importante hacia la formalización del proceso de diseño a niveles de comportamiento. Además de la simulación y la síntesis, ISPS se utilizó en la generación de software, la verificación de programas y la evaluación de arquitecturas. ISPS favoreció los aspectos de comportamiento sobre los estructurales pero sin eliminarlos completamente.

5.1.5. TI-HDL (Texas Instruments-HDL)

Es un lenguaje de descripción jerárquica del diseño, estructurado en bloques y basado en texto, que se ha utilizado principalmente en el diseño de circuitos integrados. Procede de antiguos lenguajes usados allá por 1968, concretamente el TIBSD (TI Boolean System Description), desarrollado como lenguaje de entrada de datos para un sistema CAD de circuitos impresos, y Fusim (Functional Simulator), utilizado para describir modelos de alto nivel de microprocesadores y para generar prototipos de patrones de tests.

5.2.

Lenguajes actuales

5.2.1. Verilog

Es un lenguaje de descripción hardware diseñado por la compañía Cadence Design Systems Inc., que se ha venido utilizando como lenguaje del simulador digital Cadence. El uso de Verilog está promovido por la Open Verilog International (OVI), que publicó en octubre del 91 la primera versión del Hardware Description Language Reference Manual. En Verilog la unidad de diseño fundamental es el módulo, que describe un componente hardware con su interfaz y contenido. Desde un punto de vista funcional, un módulo Verilog contiene la información de una entidad y su correspondiente arquitectura VHDL. Verilog no proporciona compilación independiente de

(28)

módulos: todos los módulos relacionados con el mismo diseño y simulación deben estar en el mismo archivo.

5.2.2. UDL/I (Unified Design Language for Integrated circuits)

Es un lenguaje de descripción hardware que se viene desarrollando desde 1989 por la Japan Electronic Industry Development Association, dependiente de importantes compañías japonesas tales como NTT. Una de las características de UDL/I es que pretende ser específico para modelar circuitos integrados. La única unidad de diseño existente en UDL/I es la descripción de diseño, que comprende varias sub-entidades denominadas descripciones de módulos. Una descripción de diseño contiene el modelo de un circuito integrado que consta de varias subunidades o módulos, cada uno de los cuales está especificado por una descripción de módulo.

5.2.3. 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. VHDL es un lenguaje con una semántica orientada a la simulación. Por ello, su principal dominio de aplicación es el modelado de dispositivos hardware para comprobar su corrección funcional. Sin embargo, como ilustra la siguiente figura sus áreas de aplicación son cada vez más numerosas, y hoy día se utiliza en la síntesis automática, la diagnosis de fallos, la verificación formal, el modelado de rendimiento y la documentación

ENTITY circuito IS

PORT(i1,i2 : IN bit; sum, carry : OUT); END circuito;

ARCHITECTURE estructura OF circuito BEGIN PROCESS ... END END Diagnosis de Fallos CLK X Z Simulación suma carry i1 i2 Síntesis Verificación si ¿correcto Formal Modelado de Rendimiento Documentación suma carry i1 i2

-VHDL

Circuito semisumado Componentes: puerta AND puerta OR puerta XOR ... ...

(29)

La síntesis automática tiene como objetivo la generación de dispositivos digitales a partir de una especificación inicial expresada en un lenguaje de descripción hardware. VHDL, al ser un lenguaje con una semántica poco formal, en el que se pueden mezclar diferentes estilos de descripción, no es el más apropiado para utilizar como entrada en las herramientas de síntesis. Sin embargo, dado su status de estándar IEEE y su amplia aceptación en la industria electrónica, resulta muy conveniente no romper el ciclo de diseño saliendo de VHDL en la fase de síntesis. Por ello, lo que se realiza habitualmente en este terreno es definir subconjuntos sintetizables de VHDL. En este sentido cabe distinguir dos grandes subconjuntos. Uno que engloba las construcciones secuenciales de VHDL, utilizado para la síntesis de alto nivel, y otro que parte de unas construcciones concurrentes de VHDL que permiten descripciones de dispositivos a nivel de transferencia de registros (RTL), utilizado para la síntesis de bajo nivel.

La diagnosis de fallos en circuitos digitales se puede plantear a partir de las descripciones VHDL de los mismos. En efecto, en lugar de identificar la parte de circuito que falla, podemos localizar la parte de descripción VHDL cuya implementación hardware tiene un fallo físico y está causando el fallo de comportamiento observado. En principio esta diagnosis es similar a la que se realiza a nivel de puertas, pero en este caso el nivel de descripción hardware puede ser más alto y consecuentemente el modelo de fallos será diferente.

La verificación formal de un diseño consiste en probar que para todos los estados iniciales aceptables y para todas las entradas posibles, la implementación del diseño cumple su especificación. Las otras dos alternativas para verificar un diseño, la síntesis automática y la simulación funcional, pueden resultar incompletas. En efecto, los diseños producidos por síntesis automática son correctos por construcción si los componentes primitivos están completamente verificados y si las transformaciones realizadas en el proceso de síntesis son así mismo correctas. Sin embargo, probar la corrección formal de un método de síntesis implica probar la corrección formal del método en sí y del software que lo implementa, tarea que puede resultar impracticable. Por otra parte, la verificación funcional por simulación exhaustiva también es impracticable a partir de una complejidad media en el diseño. La verificación formal requiere un modelo matemático para representar las propiedades bajo estudio y un cálculo para realizar computación simbólica sobre el modelo. La lógica es la rama de las matemáticas más ampliamente utilizada en la verificación formal, incluyendo la lógica de predicados de primer orden, la lógica de orden superior y la lógica temporal. Al no existir una semántica formal para VHDL los sistemas de verificación formal, al igual que los sistemas de síntesis, se limitan a subconjuntos del lenguaje.

Los modelos de rendimiento constituyen el nivel más alto de abstracción de los sistemas electrónicos. Estos modelos se utilizan principalmente para estudiar la capacidad global de procesamiento de información de un sistema en las primeras etapas del proceso de diseño. El objetivo es identificar las principales unidades funcionales y definir su forma de actuación en la transformación de los datos de entrada en datos de salida. A este nivel de conceptualización el diseñador ve una unidad funcional como algo que realiza una cierta tarea en un cierto tiempo, sin detalles específicos sobre la forma de realizar la tarea. En realidad, puede que estos detalles no se conozcan aún en esta fase del diseño. Debido a esta ocultación de detalles sobre los valores de los datos y sus transformaciones específicas se dice que los datos son no interpretados, y para resaltar este hecho a los modelos de rendimiento se les denomina a veces modelos no interpretados. VHDL, al disponer de recursos expresivos con alto nivel de abstracción, facilita la confección de modelos de rendimiento basados en redes de Petri extendidas y colas estocásticas.

Finalmente, la documentación es una de las tareas más importantes en todo proceso de diseño, y muy particularmente cuando el sistema tiene el grado de complejidad de los circuitos actuales. En estos casos se hace indispensable disponer de lenguajes con una elevada capacidad de abstracción y ampliamente aceptados por los diseñadores, como ocurre en la actualidad con VHDL.

Como muestra la siguiente figura, VHDL dispone de recursos expresivos para cubrir totalmente la descripción y el modelado de dispositivos digitales en los niveles circuito lógico,

(30)

transferencia de registros y chip. Los niveles de sistema y circuito eléctrico sólo se cubren parcialmente. Pero lo más interesante del lenguaje en este aspecto es que permite mezclar en una misma descripción diferentes niveles. Esto, unido al modelo de concurrencia que permite la construcción de modelos estructurales en los que los componentes básicos pueden a su vez ser descritos con modelos estructurales, hace posible el establecimiento de una descomposición estructural de la jerarquía de diseño.

SOFTWARE ARQUITECTURA TRANSFERENCIA DE REGISTROS LÓGICO ELECTRICO FÍSICO Á VHDL

(31)

MODULO II: ARQUITECTURA DEL PROCESADOR

Tema 2: Formato de instrucciones y modos de direccionamiento

Objetivos:

 Entender la arquitectura del repertorio de instrucciones (ISA) de un computador, los

formatos de codificación, el lenguaje ensamblador y las máquinas virtuales.

 Describir los modos de direccionamiento de los datos en la memoria desde las instrucciones

y las posibilidades que aporta cada modo.

 Estudiar los formatos de instrucciones y modos de direccionamiento de algunos

procesadores comerciales, especialmente el ARM que utilizarán los alumnos en el laboratorio.

 Analizar la forma en que los modos de direccionamiento facilitan al compilador la

construcción de las diferentes estructuras de datos en los lenguajes de alto nivel.

Contenido:

1.

Introducción al repertorio de instrucciones

2.

Lenguaje ensamblador y máquinas virtuales

3.

Formato de las instrucciones: diseño del repertorio

4.

Modos de direccionamiento.

5.

Soporte de los modos de direccionamiento a los lenguajes de alto nivel

1.

Introducción al repertorio de instrucciones

Las instrucciones máquina son las acciones elementales que puede ejecutar un computador. Una acción compleja deberá codificarse como una secuencia de instrucciones máquina en lo que se denomina un programa.

La arquitectura de un procesador entendida como el conjunto de recursos operativos disponibles por un programador a nivel de lenguaje máquina queda definida por el repertorio de

instrucciones (ISA: Instruction Set Architecture).

En general, una instrucción codifica una operación básica que el computador realiza sobre

unos datos ubicados en la memoria o en los registros de la máquina y a los que accede utilizando

un modo de direccionamiento.

Por consiguiente, la arquitectura ISA de un procesador viene determinada por los siguientes factores:

Tipos de datos y formatos que pueden manejar las instrucciones: naturales, enteros, reales, caracteres, etc.

(32)

Modos de direccionamiento de los datos en memoria: inmediato, directo, indirecto, etc. Estos dos factores son determinantes para la implementación eficiente de las estructuras complejas de datos de un lenguaje de alto nivel.

Conjunto básico de operaciones que se pueden realizar sobre los datos: suma, resta, etc.

Propiedad de ortogonalidad

Diremos que un repertorio es ortogonal cuando las instrucciones puedan combinar los

valores de los tres factores anteriores sin ninguna restricción. La ortogonalidad completa no se da en ningún repertorio de máquina real.

(MUL, real, indirecto) tipo de direccionamiento

operaciones

entero natural real

ADD XOR SUB MUL | | | | | . indirecto directo inmediato --tipo de datos

2.

Lenguaje ensamblador y máquinas virtuales

Un computador podemos programarlo a diferentes niveles, si bien el programa final ejecutable siempre tiene que estar codificado en binario, en lenguaje máquina. La primera opción, y la más tediosa y propensa a errores, sería codificar el programa directamente en binario, utilizando la tabla binaria de códigos de operación del procesador y la codificación binaria de los operandos. Una segunda opción, que ahorraría sin duda errores de transcripción, consistiría en escribir el código binario en hexadecimal, sustituyendo cada 4 bits por el valor hexadecimal correspondiente. En este caso sería necesario un pequeño programa para traducir los caracteres hexadecimales (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) a binario antes de la ejecución.

El primer paso hacia el uso de un lenguaje más cómodo y fiable para el programador sería utilizar el lenguaje ensamblador. En este caso podemos utilizar códigos simbólicos de operación que transmiten mejor su significado (por ejemplo, ADD en lugar de 1110, o E, para la suma). Los operandos también se pueden representar con nombres simbólicos (secuencia de caracteres) que aludan a su significado. El programa codificado en ensamblador habrá que traducirlo a lenguaje

máquina (binario) antes de su ejecución, de lo cual se encarga el Ensamblador. Con esta

alternativa se gana sin duda seguridad en la codificación del programa, pero las facilidades que

aporta el Ensamblador no van más allá del uso de nombres simbólicos para los códigos de

operación y los operandos. Sigue existiendo una correspondencia instrucción-a-instrucción entre el programa codificado en ensamblador y su traducción (ensamblado) binario.

Un paso más significativo para el programador consiste en utilizar un lenguaje de Alto Nivel (Pascal, C, etc.), lenguajes que proporcionan una sintaxis y una semántica más próximas al problema a resolver, y más alejadas del lenguaje máquina. En este caso necesitamos un Compilador que nos traduzca nuestro programa a código binario, bien directamente, bien pasando por código ensamblador. En cualquiera de los casos el código final que genera el compilador sólo será válido para el procesador concreto para el que se realice la compilación. Si queremos ejecutarlo en otro procesador tendremos que volverlo a compilar para dicho procesador.

Referencias

Documento similar

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

95 Los derechos de la personalidad siempre han estado en la mesa de debate, por la naturaleza de éstos. A este respecto se dice que “el hecho de ser catalogados como bienes de

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

Sanz (Universidad Carlos III-IUNE): &#34;El papel de las fuentes de datos en los ranking nacionales de universidades&#34;.. Reuniones científicas 75 Los días 12 y 13 de noviembre

(Banco de España) Mancebo, Pascual (U. de Alicante) Marco, Mariluz (U. de València) Marhuenda, Francisco (U. de Alicante) Marhuenda, Joaquín (U. de Alicante) Marquerie,

diabetes, chronic respiratory disease and cancer) targeted in the Global Action Plan on NCDs as well as other noncommunicable conditions of particular concern in the European

Fuente de emisión secundaria que afecta a la estación: Combustión en sector residencial y comercial Distancia a la primera vía de tráfico: 3 metros (15 m de ancho)..

Tras establecer un programa de trabajo (en el que se fijaban pre- visiones para las reuniones que se pretendían celebrar los posteriores 10 de julio —actual papel de los