| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.1 |
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.2 |
En electrónica digital se pueden diferenciar dos lógicas:
En términos generales un sistema microprogramable es un dispositivo o conjunto de dispositivos de propósito general, que según sea necesario se programan para resolver distintos problemas.
Tienen una gran variedad de aplicaciones, ya que simplemente variando la programación, se les puede indicar que realicen una función u otra, siendo las mas importantes:
Podemos clasificar los sistemas microprogramables según el número de distintos circuitos integrados que lo forman, la capacidad de trabajo y el tratamiento de datos en:
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.3 |
Estos sistemas son capaces de leer, interpretar y luego ejecutar de forma secuencial las instrucciones contenidas en un programa.
Todos los sistemas microprogramables por complejos que sean (salvo los PLDs) poseen la estructura que se muestra en la siguiente figura.
En dicha estructura se distinguen los siguientes elementos:
Reloj: Es un generador de ondas cuadradas periódicas, utilizado para que todo el sistema esté sincronizado.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.4 |
Unidad Central de Proceso o CPU (Central Process Unit): Es la parte mas importante del sistema microprogramable. Es donde se realiza la interpretación y ejecución de las instrucciones, se generan todas las órdenes de control para gobernar todo el sistema y se realizan las operaciones aritméticas y lógicas. Todo ello se realiza con los datos procedentes de la Memoria Central o los contenidos en registros ordenadas desde la Unidad de Control. También, es la encargada de realizar todas las transferencias de datos hacia la memoria o desde esta.
Todas sus funciones se realizan en sincronía con la señal del reloj, por ello, la frecuencia del reloj define la velocidad del sistema. Su estructura interna es compleja y si se presenta todo integrado en un único circuito integrado se denominada microprocesador. El uso de dichos microprocesadores esta muy extendido y son ampliamente utilizados en sistemas tales como ordenadores personales, controles industriales, grandes ordenadores o mainframes, etc.
Memoria Central o Interna: En este tipo de dispositivos se encuentran los datos y programas que debe utilizar el sistema microprogramable. Existe otro tipo de memorias con las cuales no se deben confundir, denominadas memorias de masa, que forman parte de los periféricos y se encuentran fuera del sistema, como por ejemplo los discos duros.
Unidad de entrada/salida (interface): Este circuito permite la comunicación del sistema microprogramable con el exterior. Su función fundamental es la de adaptar las diferentes velocidades y códigos utilizados por los elementos externos del sistema y el interior.
Periféricos: Estrictamente hablando podríamos decir que no forman parte del sistema microprogramable. Es un conjunto de dispositivos que realizan un trabajo en el exterior del sistema. Estos periféricos pueden ser de entrada o de salida, aunque existen algunos que realizan ambas. Por ejemplo, en un PC los periféricos de entrada mas importantes son el teclado y el ratón y los de salida el monitor y la impresora.
|
Los microprocesadores se utilizan en aquellas aplicaciones en las que se requieren grandes cantidades de memoria, ejecutar una gran cantidad de programas o se prevea hacer futuras ampliaciones realizando las tareas a una elevada velocidad. Un ejemplo de aplicación son los ordenadores personales. |
|
|
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.5 |
Los PLDs (Programmable Logic Device) son circuitos integrados que en su interior integran una matriz de puertas lógicas cuya funcionalidad puede ser programada por el usuario. Internamente no tienen la estructura de microprocesadores y microcontroladores pues no están basados en una CPU que lea un programa de una memoria. Esto significa que no pueden sustituir a los sistemas basados en CPU en muchas aplicaciones y además no son tan versátiles. No obstante existen aplicaciones donde son más adecuados que estos, como por ejemplo para resolver problemas simples puramente combinacionales.
Un sistema microprogramable esta formado por los siguientes componentes:
En este punto veremos con mayor profundidad cuales son los bloques que componen un sistema microprogramable basado en el uso de una CPU. Esto incluye tanto a los sistemas basados en microprocesador como los que utilizan microcontroladores.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.6 |
Elementos esenciales que constituyen un sistema basado en CPU:
Para que el microprocesador genere todas las señales necesarias para controlar los restantes bloques del sistema y para que todo el sistema esté sincronizado (que cada elemento funcione cuando le corresponde), se parte de ondas cuadradas de frecuencia constante generadas normalmente por un cristal de cuarzo.
La frecuencia de este reloj se mide en Khz, Mhz o GHz y determina la velocidad de funcionamiento y proceso de todo el sistema.
El periodo de tiempo de esta señal de reloj se denomina ciclo de reloj.
A partir de esta señal de reloj, se genera el denominado ciclo máquina, que está formado por dos fases:
Este ciclo máquina tarda en realizarse mas o menos tiempo dependiendo del fabricante.
A veces para completar la ejecución de una instrucción se requiere mas de un ciclo máquina.
El número de ciclos máquina necesarios para procesar por completo una instrucción se denomina ciclo de instrucción.
|
La CPU está formada por:
|
|
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.7 |
Esta compuesta por un circuito combinacional complejo que se encarga de realizar las operaciones aritméticas (suma, multiplicación...), lógicas (AND, OR...) desplazamientos, etc.
Estas operaciones son ordenadas por las instrucciones que se están ejecutando, con las informaciones presentes en los registros de entrada y/o en posiciones determinadas de la Memoria Central y devuelve los resultados a los registros o a la Memoria Central.
Como se utiliza: Normalmente uno de los datos de entrada proviene del registro acumulador (ACUM) y el otro de un registro interno, una posición de memoria o como literal de la propia instrucción. El resultado se devuelve en el acumulador machacando el valor que tenia antes. Hay también otros tipos de funcionamiento.
Un registro es una pequeña memoria interna, donde se almacenan temporalmente los resultados intermedios de las operaciones. Los registros están formados por biestables colocados de tal forma que pueden almacenar la información en un momento determinado. La longitud de estos registros viene determinada por el número de biestables que los forman.
Existen varios registros diferentes, entre los que destacamos:
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.8 |
Como hemos mencionado, en la ALU se realizan las operaciones aritméticas y lógicas con los datos.
La CPU contiene al menos un acumulador o registro en el que se almacenan datos procedentes de la memoria o de otros registros que posea el sistema. Las operaciones con dos comandos se realizan siempre entre acumuladores (si existe mas de uno), entre el acumulador y el contenido de una posición de memoria, entre un acumulador y otro registro, o entre el acumulador y un termino constante implícito en la propia instrucción a través de la Unidad Aritmética-Lógica (ALU). Es decir, siempre las operaciones se realizan a través del acumulador, apareciendo también el resultado en el acumulador.
En una CPU, existen unos biestables denominados banderas o "flags" que cambian de estado como consecuencia del resultado de la última operación efectuada sobre el registro acumulador. La estructura del registro de estado varia mucho de unos sistemas a otros, tanto en la posición que cada uno de los flag ocupa dentro del registro, como en los tipos de informaciones que almacenan. A cotinuación se muestran algunas informaciones que puede proporcionar el registro de estado en una CPU:
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.9 |
En la mayoría de las CPU existen bits en este registro que no contiene información alguna y, en general, están a 1.
A modo de ejemplo se muestra el registro de Estado (STATUS) del microcontrolador PIC16X84, que contiene varios bits de estado de la unidad central, el estado aritmético de la ALU, el estado del reset y un par de bits de selección de página denominados RP1 y RP0. Ocupa la posición 03h del banco 0 y la 83h del banco 1.
| R/W-0 | R/W-0 | R/W-0 | R-1 | R-1 | R/W-x | R/W-x | R/W-x |
| IRP | RP1 | RP0 | /TO | /PD | Z | DC | C |
| bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 |
Estos registros auxiliares o de uso general los puede utilizar el programador para almacenar datos o resultados intermedios. El número de estos registros depende del tipo de microprocesador.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.10 |
Este registro lo puede modificar el programador, y apunta a una zona de memoria denominada pila o Stack. De ahí, su nombre de puntero de pila o Stack Pointer
La pila en los ordenadores personales es una zona de memoria, que es una parte de la memoria central (RAM), de manera que se reserva un pequeño espacio de esta para que funcione como una pila, denominándolo segmento de pila. Sin embargo, por ejemplo en los microcontroladores PIC, se encuentra separada tanto de la memoria de programa como de la de datos y está formada por registros. En todo caso, para moverse por la pila, almacenar y recuperar los datos se utiliza el registro puntero de pila o stack pointer.
La pila tiene una estructura denominada LIFO (Last In First Out), por lo que el último valor que se guarda es el primero que sale. Este tipo de estructura gestiona la entrada y salida de información del mismo modo que si actuara manipulando una pila de papeles, donde el último papel en apilarse es el que luego primero se recoge.
La pila se utiliza para almacenar los datos de los registros internos cuando se salta a una subrutina dentro de un programa para que no se pierda su contenido, ya que probablemente necesite utilizar alguno de los registros internos.
Normalmente el sistema dispone de una bandera (flag o identificador) que indica un desbordamiento de la pila, si bien hay casos, como en el microcontrolador PIC16X84 donde no dispone de esta bandera y hay que tenerlo en cuenta en el programa que se diseñe.
Es un registro que se encuentra en la Unidad de Control y que indica en que posición de la memoria se encuentra la próxima instrucción a ejecutar.
Este registro, se incrementa automáticamente para obtener las instrucciones y los datos de la memoria, ya sea de modo secuencial o de forma aleatoria.
Todos los microprocesadores y microcontroladores tienen registros internos que no pueden manipularse por el usuario puesto que el sistema los utiliza de forma automática cuando es preciso. Estos registros son:
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.11 |
Es una parte fundamental del sistema puesto que se encarga de gobernar el funcionamiento global del mismo. Recibe la información, la transforma e interpreta, enviando las ordenes precisas a los elementos que las requieren para un procesamiento correcto de los datos.
En la Unidad de Control se encuentra el contador de programa (CP) que indica en que posición de la memoria se encuentra la próxima instrucción a ejecutar.
En esta unidad se encuentra también el decodificador de instrucciones (DI), dispositivo que "traduce" las instrucciones del programa contenidas en la memoria a microordenes grabadas internamente, para saber los pasos que debe realizar para ejecutar la instrucción.
Una vez decodificada la instrucción, la Unidad de Control generará todas las señales de control necesarias para hacer funcionar al resto de elementos del sistema y que todo vaya de una forma ordenada.
Es la encargada del almacenamiento de los programas y la información necesaria para el funcionamiento del sistema. Se compone de celdas o palabras de memoria.
Su función en el sistema es la de almacenar los programas a ejecutar, los datos y los resultados intermedios del proceso.
No debemos confundirla con las memorias de almacenamiento masivo que se encuentran en los periféricos de entrada/salida, como los discos duros de un PC.
La Memoria suele dividirse en:
|
La memoria RAM (Ramdom Access Memory, memoria de acceso aleatorio) es un tipo de memoria que permite tanto la lectura (read) como la escritura (write). Es volátil, esto es, los datos se pierden si deja de alimentarse. Cuando el sistema necesita leer un dato de la memoria RAM, lo primero que hace es indicar la posición de memoria de donde desea obtener el dato. Dependiendo de si la operación que va efectuar es una lectura o una escritura, se pone a uno o a cero una señal de lectura escritura (Read=1/Write=0). Si la operación es de lectura, la memoria entrega el dato deseado. Por el contario, si es de escritura, el dato se almacena en la memoria. |
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.12 |
Hay dos arquitecturas distintas relacionadas con el uso y distribución de la memoria:
Arquitectura Von Neumann: Tradicionalmente los sistemas con microprocesadores se basan en esta arquitectura, en la cual la unidad central de proceso (CPU), está conectada a una memoria principal única (casi siempre sólo RAM) donde se guardan las instrucciones del programa y los datos. A dicha memoria se accede a través de un sistema de buses único (control, direcciones y datos):
En un sistema con arquitectura Von Neumann el tamaño de la unidad de datos o instrucciones está fijado por el ancho del bus que comunica la memoria con la CPU. Así un microprocesador de 8 bits con un bus de 8 bits, tendrá que manejar datos e instrucciones de una o más unidades de 8 bits (bytes) de longitud. Si tiene que acceder a una instrucción o dato de más de un byte de longitud, tendrá que realizar más de un acceso a la memoria.
El tener un único bus hace que el microprocesador sea más lento en su respuesta, ya que no puede buscar en memoria una nueva instrucción mientras no finalicen las transferencias de datos de la instrucción anterior.
Las principales limitaciones que nos encontramos con la arquitectura Von Neumann son:
Arquitectura Harvard: Este modelo, que utilizan los microcontroladores PIC, tiene la unidad central de proceso (CPU) conectada a dos memorias (una con las instrucciones y otra con los datos) por medio de dos buses diferentes.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.13 |
Una de las memorias contiene solamente las instrucciones del programa (Memoria de Programa), y la otra sólo almacena datos (Memoria de Datos).
Ambos buses son totalmente independientes lo que permite que la CPU pueda acceder de forma independiente y simultánea a la memoria de datos y a la de instrucciones. Como los buses son independientes éstos pueden tener distintos contenidos en la misma dirección y también distinta lóngitud. Tambien la longitud de los datos y las instrucciones puede ser distinta, lo que optimiza el uso de la memoria en general.
Para un procesador de Set de Instrucciones Reducido, o RISC (Reduced Instrucción Set Computer), el set de instrucciones y el bus de memoria de programa pueden diseñarse de tal manera que todas las instrucciones tengan una sola posición de memoria de programa de longitud.
Además, al ser los buses independientes, la CPU puede acceder a los datos para completar la ejecución de una instrucción, y al mismo tiempo leer la siguiente instrucción a ejecutar.
Ventajas de esta arquitectura:
En un sistema abierto como un PC, los programas se encuentran en la memoria RAM (lectura/escritura) para posibilitar la carga de uno u otro programa desde, por ejemplo el disco duro, según lo desee el usuario.
Sin embargo en un microcontrolador la memoria de programa puede ser:
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.14 |
|
Memoria ROM: Su nombre corresponde a las iniciales de Read Only Memory, que significa memoria de sólo lectura. Al contrario que la memoria RAM, este tipo de memoria solo permite la lectura (read). En un sistema abierto como un PC su función es contener los datos y programas de arranque, para que el microprocesador pueda comunicarse con el resto del sistema. En este caso se le denomina BIOS (Basic Input/Output System), porque contiene las instrucciones básicas de entrada y salida. Su funcionamiento es identico al de las memorias RAM, con la excepción de que al ser únicamente de lectura, no precisa de la señal read/write. |
|
Memoria OTP: La memoria de programa, que puede ser una EPROM, no dispone de ventana para el borrado por lo que sólo se puede programar una vez, |
Por último conveniente recordar que en un sistema abierto aunque la Memoria Central es un elemento fundamental no está dentro del microprocesador, pero sí está dentro de un microcontrolador.
Esta unidad comunica al sistema con el mundo exterior, permitiendo la introducción y la extracción de información al sistema. Estas unidades consisten generalmente en registros que, accionados por los buses de control y direcciones, almacenan la información suministrada por el bus de datos.
Estos registros son accesibles desde el exterior por una serie de terminales para su conexión a cualquier dispositivo que se deba accionar.
En las entradas se introduce la información de manera que cuando se ordena, mediante los buses de control y de direcciones, el sistema selecciona en un instante dado cuales de esas informaciones presentes en las entradas deben transferirse al bus de datos para su proceso.
La parte de salida, por el contrario, consiste en una serie de registros en los que el sistema deposita el resultado de la información ya procesada.
Nota: Al igual que sucede en un sistema abierto con la Memoria Central, la Unidad de E/S es un elemento que no esta en el interior del microprocesador, pero si dentro de un microcontrolador.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.15 |
Los elementos de un sistema basado en CPU están interconectados entre si mediante "canales" de información o buses. Estos buses están compuestos por diferentes líneas (hilos eléctricos) que transportan información del mismo tipo. El número de líneas que compone el bus indica el ancho del bus. Por ejemplo, si tenemos un bus de datos de 16 bits, significa que circulan 16 bits en paralelo a la vez, por lo que el bus tiene un ancho de 16 líneas. En los sistemas microprogramables, existen tres buses fundamentales que son:
Por este bus van a circular los bits (combinación binaria) que seleccionaran la posición de la memoria o el registro de entrada/salida en el que deseamos leer o escribir. Este bus tiene tantas líneas (conductores) como bits de dirección tenga el sistema. El número de líneas que tiene un sistema basado en microprocesador depende del fabricante y determina la cantidad máxima de memoria que puede direccionar el sistema. El número total de direcciones de memoria que pueden direccionarse viene dado por la formula:
N° Direcciones de memoria=2Nº Líneas del bus de direcciones
Por ejemplo, el microprocesador 8086 de Intel poseía un bus de direcciones de 20 líneas, por tanto:
N° Direcciones de memoria= 220= 1.048.576 posiciones de memoria.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.16 |
Si en cada posición de memoria se almacena 1 byte (8 bits), el microprocesador 8086 podía direccionar como máximo una memoria de 1.024 Kbytes=1 Mbyte.
Como se puede observar en la figura, este bus es unidireccional. Es decir, las líneas van en un único sentido, siendo la CPU la única que puede utilizarlo.
Habitualmente, las líneas del bus de direcciones se denominan con la letra inicial A (de Address), poer ejemplo A15 (bit de mayor peso) A14 ... A1 A0 (bit de menor peso)
Por este bus circularan los bits que componen la información binaria, ya sean instrucciones o datos contenidos en la posición de memoria o en los registros de entrada/salida, seleccionada por el bus de direcciones. Al igual que el bus de direcciones, este tiene tantos hilos como bits tenga la palabra de datos con que opera el sistema.
Por ejemplo, un microprocesador de 8 bits posee un bus de datos formado por 8 hilos. Como podemos observar en la figura, este bus es bidireccional, es decir, que puede ir en ambos sentidos. Esto es, porque los dispositivos pueden recibir información (escritura) o enviarla (lectura), según el estado de la línea read/write del bus de control. Habitualmente, las líneas del bus de datos se denominan con la letra inicial D (de data), D7 (bit de mayor peso) D6 ... D1 D0 (bit de menor peso)
Este bus esta formado por una serie de líneas denominadas líneas de control, por las que va a circular el conjunto de señales necesarias para la correcta coordinación de todos los elementos del sistema, tales como: órdenes de lectura o escritura, inhabilitación (desactivación) de un dispositivo, etc.
Cuando uno de los registros de entrada y salida recibe su dirección por el bus de direcciones, el dispositivo se activa y según la orden de leer o escribir presente en el bus de control, pasan la información que contienen al bus de datos, o se cargan con la información que contiene el bus de datos.
Por ejemplo, si deseamos enviar un dato por el puerto paralelo de un PC, lo primero que haremos sera poner la dirección de ese puerto en el bus de direcciones. Como lo que queremos es enviar, es decir, escribir, activaremos en el bus de control la señal de escritura y, por ultimo, enviaremos por el bus de datos la información a sacar por dicho puerto. Si, por el contrario, queremos leer un dato por el puerto paralelo, primero enviaremos por el bus de direcciones la dirección donde se encuentra ese dispositivo. Como deseamos leer su contenido, activaremos la señal de lectura del bus de control y, por ultimo, el controlador de ese dispositivo nos pondrá en el bus de datos su contenido.
El software que se escribe y que posteriormente el sistema microprogramable ejecuta esta formado por una serie de instrucciones que indican al sistema lo que debe realizar en cada momento.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.17 |
Hasta ahora hemos hablado de que la CPU recoge las instrucciones de la memoria. ¿Pero como están compuestas estas instrucciones? Las instrucciones, como su propio nombre indica, van a decir que se debe hacer con los datos, o con que datos se debe realizar cierta operación.
Las instrucciones están formadas por dos partes, tal y como muestra a continuación
| INSTRUCCIÓN | |
| CÓDIGO OPERACIÓN | OPERANDO |
El código de operación, está siempre presente en cualquier tipo de instrucción. Por el contrario, el operando puede o no estarlo. Por ejemplo, para que la CPU detenga la ejecución de un programa, es suficiente con el código de operación. Sin embargo, para realizar una suma, a parte del código de operación habrá que indicar con que dato se debe sumar, ya sea explícitamente después del código de operación o indicando en su lugar la posición de memoria donde se encuentra dicho dato.
Las instrucciones se pueden clasificar según el tipo de operación que realicen en:
Para introducir los programas y datos en un sistema microprogramable, necesitamos de un método que sea comprensible tanto para el usuario como para el sistema. Sin embargo, no existe un lenguaje que sea igualmente comprensible para el usuario como para el sistema. Mientras que el primero utiliza un lenguaje complejo, el sistema únicamente opera en lenguaje binario.
Este lenguaje binario que utiliza la máquina es muy complejo de entender y, por tanto, de programar. Por esta razón se clasifican los lenguajes en niveles según estén mas o menos cercanos al lenguaje de la máquina en:
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.18 |
Es difícilmente entendible para el usuario, porque es el que ejecuta directamente la CPU. Este lenguaje esta formado por palabras binarias, cuya longitud depende del sistema empleado.
Por ejemplo, una CPU de 8 bits utilizara palabras formadas por 8 bits.
El problema de este lenguaje es que cada CPU utiliza sus propios códigos máquina, por lo que los programas no son intercambiables entre los sistemas microprogramables. Aunque la máquina solo entiende códigos binarios (ceros y unos), este tipo de lenguaje se puede programar en hexadecimal, que es mas manejable y su conversión al formato binario es directa.
En tabla siguiente se da un ejemplo de código de operación de instrucciones para un microcontrolador de la Familia PIC16X84, que utiliza una arquitectura Harvard y donde la memoria de programa tiene una longitud de 14 bits y la de datos de 8 bits.
Estas instrucciones suman dos valores (7+8) y el resultado lo depositan en la dirección de memoria de datos 10 h.
| Binario | Hexa | Código | Operando | Instrucción |
| 11000000000111 | 3007 | 1100xx | 0000 0111 | Carga en el acumulador el dato indicado en el operando |
| 11111000001000 | 3E08 | 11111x | 0000 1000 | Suma el acumulador y el dato indicado en el operando y guarda el resultado en el acumulador |
| 00000010010000 | 0090 | 0000001 | 0010000 | Almacena el resultado contenido en el acumulador en la dirección indicada |
Nota: x representa un valor indiferente, pero se ha tomado en binario como en hexadecimal como 0, tal y como lo hace el ensamblador MPLAB de microchip.
Este formato binario, denominado lenguaje ó código máquina, puesto que es el que realmente entiende el sistema, es el que debe estar en la memoria de programa para que pueda funcionar. Se comprende, no obstante, que escribir un programa, que puede constar de cientos, miles o millones de instrucciones, a este nivel, seria extraordinariamente penoso, sujeto a errores y muy difícil de interpretar por una persona, una vez escrito. Sin embargo, la velocidad con que se ejecuta es muy elevada, ya que las instrucciones son ejecutadas directamente por la máquina. Otra ventaja de este tipo de lenguaje reside en que nos podemos meter en lo mas profundo de la máquina.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.19 |
El lenguaje máquina no es muy manejable por su elevada complejidad, por lo que, para facilitar la confección de programas se utiliza otro tipo de lenguaje denominado lenguaje ensamblador o simbólico.
En el lenguaje ensamblador, las instrucciones se representan por nemónicos o combinaciones de letras que recuerdan el significado de la instrucción en inglés. Así, por ejemplo, en la siguiente tabla se representan los nemónicos utilizados para las instrucciones anteriores.
| Mnemónico | Hexa | Código | Operando | Instrucción |
| movlw 0x07 | 3007 | 1100xx | 0000 0111 | Carga en el acumulador el dato indicado en el operando |
| addlw 0x08 | 3E08 | 11111x | 0000 1000 | Suma el acumulador y el dato indicado en el operando y guarda el resultado en el acumulador |
| movwf 0x10 | 0090 | 0000001 | 001 0000 | Almacena el resultado contenido en el acumulador en la dirección indicada |
Ademas, las direcciones en vez de figurar con su valor binario real, figuran bajo nombres simbólicos (etiquetas) que se pueden asignar de modo que recuerden su significado o la dirección de las instrucciones.
La estructura de una instrucción escrita en lenguaje ensamblador constaría en general de tres campos:
Como ejemplo, a continuación se representa una porción de programa redactado para el microcontrolador PIC16X84 y su equivalencia en lenguaje máquina.
| Ensamblador | Lenguaje máquina | |||
| Etiqueta | Mnemónico | Operando | PC | Código+Operando |
| INICIO | movlw | 0x07 | 000000 | 3007 h |
| addlw | 0x08 | 000001 | 3E08 h | |
| movwf | RESULTADO | 000002 | 0090 h | |
Notas:
PC: Dirección de la memoria de programa.
RESULTADO: El ensamblador permite sustituir valores numéricos por etiquetas así RESULTADO será igual a 10 h.
Se comprende que, con un poco de practica, el programa en ensamblador es mucho mas fácil de escribir y leer que el lenguaje máquina.
Dependiendo del tipo de CPU las direcciones se especifican de diversas maneras (absoluta, directa, segmentada, como primer operando el byte bajo y como segundo el byte alto, etc).
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.20 |
Una vez escrito el programa en lenguaje ensamblador, su conversión a lenguaje máquina puede hacerse automáticamente en un ordenador mediante un programa, al cual habrá que indicarle, entre otras cosas, la equivalencia numérica de los símbolos o etiquetas utilizados para representar valores numéricos como operandos (en el ejemplo anterior, RESULTADO), mientras que las equivalencias numéricas de las etiquetas con la posición de cada instrucción en el programa ensamblador se generarán automáticamente (en el ejemplo anterior, INICIO).
Este proceso de traducción a lenguaje máquina se conoce como "ensamblado" y el programa de ordenador que lo realiza, ensamblador.
Es el lenguaje mas cercano al usuario y, por tanto, el mas evolucionado, ya que no se basa en la arquitectura de la máquina.
El nombre de las instrucciones y sentencias se corresponde con el nombre en ingles de la tarea que realizan, dependiendo ahora el repertorio de instrucciones no de la CPU, sino del paquete software con el que trabaja o del sistema operativo.
Algunos ejemplos de lenguajes de alto nivel son:
Los lenguajes de alto nivel son muy parecidos al lenguaje del usuario pero muy distinto del que comprende la máquina. Por tanto, para ejecutarse debe ser convertido y la conversión suele introducir bastante más código que si el programa se escribiese directamente en ensambladorpor por lo su ejecución es mas lenta. Ademas el programa se hace mas largo.
El inconveniente de este tipo de lenguaje es que no podemos meternos en lo mas profundo de la máquina. Sin embargo se puede escribir la mayor parte de un programa en un lenguaje de alto nivel, y luego añadir subrutinas realizadas en lenguaje máquina.
Una vez escrito el programa (programa fuente) en uno de los anteriores lenguajes, este debe "transformarse" en código máquina que es lo único que entiende el sistema microprogramable.
Para ello, disponemos de las siguientes herramientas:
La diferencia entre ensambladores y compiladores con respecto a los interpretes radica en que, el compilador y ensamblador generan el código máquina de todo el programa y lo ejecutan, así que la ejecución es mas rápida. El interprete en cambio lee una línea, la convierte a código máquina y, luego, la ejecuta, lee otra línea... y así todo el programa, por ello la ejecución es mas lenta.
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.21 |
Como antes se indicó, los PLDs (Programmable Logic Device) son circuitos integrados que en su interior integran una matriz de puertas lógicas cuya funcionalidad puede ser programada por el usuario. Internamente no tienen la estructura de los sistemas basados en una CPU, pero en diversas aplicaciones pueden utilizarse con algunas ventajas sobre estos, como por ejemplo la velocidad para resolver problemas simples puramente combinacionales frente a los microcontroladores.
La aplicación típica es la de implementar diversas funciones lógicas, reduciendo con este dispositivo todo el circuito a un único chip y simplificando las conexiones.
En los dispositivos actuales se utilizan fundamentalmente dos tipos de estructuras programables:
Son dispositivos no volátiles y consisten en una matriz de puertas AND seguida de otra matriz de puertas OR interconectadas a través de fusibles. Aprovechando que cualquier función se puede escribir como suma de productos, quemando los fusibles adecuados, estas permiten la programación de un número limitado de mintérminos (minterms).
| DISPOSITIVOS LÓGICOS MICROPROGRAMABLES | Sistemas microprogramables | 1.22 |
Existen varias clases de PLDs que emplean esta estructura:
PAL (Programmable Array Logic): Su principal característica es que se pueden programar las uniones en la matriz de puertas AND, siendo fijas las uniones en la matriz de puertas OR.
PLA (Programmable Logic Array): A diferencia de la anterior, en esta se pueden programar tanto las uniones en la matriz de puertas AND como en la matriz de puertas OR.
EPLD (Erasable PLD): Mientras que los anteriores PLDs son bipolares (programabas por fusible y una única vez), estos se graban eléctricamente y se borran por medio de luz ultravioleta como las memorias EPROM. Ademas de ser borrables, su nivel de integración es superior, permitiendo que un solo EPLD pueda sustituir entre 20 y 25 de los anteriores.
GAL (Generic Array Logic): Se designa así a los dispositivos borrables y grabables por medios eléctricos, que han sido diseñados con el objetivo de sustituir a la mayoría de las PALs manteniendo la compatibilidad terminal a terminal.
CPLD (Complex PLD): Alberga en su interior grupos de PLDs sencillos (desde 32 hasta 256) y añade otra serie de elementos que permite la interconexión en su interior de estos grupos.
Son volátiles y en lugar de utilizar una matriz de puertas, se basan en SRAM (RAM estática), ya que permite una mayor densidad de integración y la capacidad de funcionar a frecuencias mayores. Como las SRAM son volátiles, cada vez que se aplica la tensión de alimentación, se reprograma con la información que lee desde una memoria EEPROM de configuración externa al PLD. Básicamente, lo que hacen internamente es almacenar en la SRAM la tabla de verdad de una función combinacional.
Existen varias clases de PLDs que emplean esta estructura:
Para programar estos dispositivos se debe disponer de programas tales como PALASM u OrCAD/PLD que permiten expresar la lógica de los circuitos utilizando diversas formas de entrada: ecuaciones en forma de suma de productos, tablas de verdad, esquemas, etc.
Otros programas mas avanzados son capaces de simplificar la lógica y de ser independientes de los dispositivos utilizando HDLs (Hardware Description Languages), como Verilog que tiene una sintaxis similar al C y VHDL (Very high speed integrated circuit HDL)