Вы находитесь на странице: 1из 35

Lenguaje de Transferencia entre Registros 1

LENGUAJE DE TRANSFERENCIA ENTRE REGISTROS


1
Por: Alberto Cuervo García

RESUMEN
Se desarrollan los conceptos básicos del lenguaje de transferencia entre registros para
especificar y describir las interconexiones entre los diferentes módulos del hardware de un
sistema digital.
Para enfatizar estos conceptos se implementa el diseño lógico de un sencillo computador,
así como el software requerido para una aplicación que sirva de comprobación del
hardware implementado.

ABSTRACT
There are developed the basic concepts of the “Register Transfer Language” or “Computer
Hardware Description Language” in order to specify and describe the interconnections
between the differents units in the hardware of a digital system.
To emphasize these concepts, it is implemented the logic design of a small computer, as
well as the required software for an application which can be used to prove the
implemented hardware.

PALABRAS CLAVES
Microoperación, función de control, salida de tres estados, reloj, operador de reemplazo,
registro de instrucciones, contador de programa, decodificador de instrucciones,
acumulador, señales de tiempo, ciclo de instrucción, ciclo de búsqueda, ciclo de ejecución,
código de operación.

KEY WORDS
Microoperation, control function, three state output, clock, replacement operator, instruction
register, program counter, instruction decoder, accumulator, timing signals, instruction
cicle, fetch cicle, execution cicle, operation code.

1
Ingeniero Electricista, Especialista en Telecomunicaciones del área de Electrónica, M. Sc. en “Electrónica
del Estado Sólido:Microelectrónica”, más de 20 años en la docencia universitaria y 25 años de experiencia
profesional, habiendo sido miembro de comités regionales y nacionales del sector eléctrico colombiano.
Profesor Tiempo Completo de la Universidad Santiago de Cali. Vinculado al Grupo de Investigación en
Instrumentación Electrónica GIE. alcuervo03@yahoo.es
Lenguaje de Transferencia entre Registros 2

0. Introducción.
El “Lenguaje de Transferencia entre Registros” o “Lenguaje Descriptivo del Hardware del
Computador” (Register-Transfer Language o Computer Hardware Description Language
en inglés) consiste de un conjunto de notaciones simbólicas para representar registros y
operaciones específicas en los contenidos de los registros de un sistema digital, así como
las funciones de control encargadas de ordenar la ejecución de las distintas
microoperaciones que se deben realizar en un computador o en un sistema digital en
general.
Utiliza un conjunto de expresiones y afirmaciones, las cuales tienen similitud con las
afirmaciones utilizadas en los lenguajes de programación, brindando las herramientas
necesarias para especificar un conjunto de interconexiones entre las diversas unidades
funcionales de un sistema digital.
En este artículo se describen los conceptos básicos del Lenguaje de Transferencia entre
Registros ejemplificando la utilización del mismo con el diseño de un sencillo computador y
el software necesario para una aplicación específica.

1. Descripción de un sistema digital.


Un sistema digital puede ser descrito si se especifican :
1. El conjunto de registros en el sistema y sus funciones
2. La información binaria almacenada en los registros
3. Las operaciones realizadas a partir de la información almacenada en los registros y
4. Las funciones de control que ordenan ejecutar secuencialmente las
microoperaciones.
Los cuatro aspectos anteriormente relacionados constituyen la base del método del
lenguaje de transferencia entre registros para describir sistemas digitales:
1. Un registro, como se describe en este lenguaje, no sólo implica un registro con
carga o almacenamiento en paralelo, sino que abarca también todos los otros tipos
de registros tales como registros de desplazamiento, contadores, flip-flops,
unidades de memoria, etc. Un contador es considerado como un registro cuya
función es incrementar o decrementar en 1 la información almacenada en el mismo,
un flip-flop por si solo es considerado como un registro de 1 bit y una unidad de
memoria se considera como un conjunto de registros donde se va a guardar
información.
Lenguaje de Transferencia entre Registros 3

2. La información almacenada en los registros pueden ser números binarios, números


en el formato BCD, caracteres alfanuméricos, códigos de operación de
instrucciones o cualquier otra información binaria codificada. Las operaciones que
se realicen dependen de los tipos de datos que se encuentren.
3. Las operaciones realizadas con los datos almacenados en los registros se
denominan microoperaciones. 2 Una microoperación es una operación elemental
que puede ser realizada durante un período de los pulsos de reloj del sistema
digital. El resultado de esta operación puede reemplazar la información previamente
almacenada en un registro, o puede ser transferida a otro registro. Ejemplos de
microoperaciones son: sumar, cargar un dato, borrar el contenido de un registro,
desplazar un dato, incrementar un número almacenado, etc. Una microoperación
requiere solamente un pulso de reloj para su ejecución.
4. Las funciones de control permiten iniciar una secuencia de microoperaciones en el
sistema digital. Una función de control es una función booleana consistente en
ciertas variables de condición que dependen de los resultados de operaciones
previas y de señales de tiempo que le dan la secuencia requerida a las distintas
microoperaciones que se deben ejecutar en el sistema digital.

2. Proposiciones en el lenguaje de transferencia entre registros.


Una proposición 3 en el lenguaje de transferencia entre registros consiste de una función de
control y una lista de microoperaciones. La función de control especifica las condiciones y
la secuencia con que se ejecuta la lista de microoperaciones en el tiempo. Algunos
ejemplos de microoperaciones que se encuentran con mayor frecuencia en los sistemas
digitales son por ejemplo las que se relacionan a continuación:
1. Microoperación de transferencia entre registros que no cambia el contenido de la
información almacenada en el registro fuente o de origen cuando la información se
mueve de un registro a otro.
2. Microoperación aritmética, que como su nombre indica, realiza una operación
aritmética como sumar por ejemplo, con los números almacenados en los registros.
3. Microoperación lógica que realiza una operación bit a bit, como por ejemplo AND,
OR u OR Exclusivo, con los contenidos de los registros.

2
Alberto Cuervo García, “Elementos de Microprogramación”, Revista Ingenium nº 5, Univ Stgo de Cali.
3
Alberto Cuervo García, “Circuitos Digitales II”, Plataforma Virtual de la Univ. Santiago de Cali.
Lenguaje de Transferencia entre Registros 4

4. Microoperación de desplazamiento, la cual desplaza el contenido de un registro una


posición a la derecha o a la izquierda.

3. Representación de registros
Los registros en un sistema digital pueden ser representados de diversas maneras.
Comunmente se designan por letras mayúsculas, algunas veces seguidas de números
como se muestra en la figura 1.

A A7 A6 A5 A4 A3 A2 A1 A0

(a) Registro A (b) Se muestran las celdas individuales


11 0 15 8 7 0

RI CP(H) CP(L)

(c) Numeración de las celdas (d) Porciones de un registro

Figura 1. Representación de registros.

La forma más común de representar un registro es mediante un rectángulo con el nombre


del registro dentro del mismo como se muestra en (a). En (b) se muestran las celdas
individuales de un registro A de 8 bits, en donde cada celda se designa con el nombre del
registro y el respectivo subíndice.
La numeración de las celdas de derecha a izquierda pueden ser marcadas en la parte
superior del rectángulo como se muestra en (c) para un registro RI de 12 bits.
Un registro denominado CP de 16 bits se divide en dos porciones como se muestra en (d).
Los bits 0 a 7 de menor orden se designan por medio de la letra L (low) y los bits 8 a 15 de
mayor orden por la letra H (high).

4. Transferencia de información
La transferencia de información de un registro a otro se designa en forma simbólica por
medio del operador de reemplazo (←). Así, la microoperación :
A←B
denota la transferencia del contenido del registro B al registro A, o lo que es lo mismo, el
contenido del registro A es reemplazado por el contenido del registro B. Por definición, el
contenido del registro origen B no cambia después de la transferencia.
Lenguaje de Transferencia entre Registros 5

Existe una correspondencia directa entre una proposición escrita en el lenguaje de


transferencia entre registros y el hardware requerido para implementar dicha proposición.
Considere la siguiente proposición de transferencia entre registros:

x ´T1 + T3 : A← B

En la proposición anterior se puede observar que la misma está compuesta de dos partes:
la función de control y la microoperación A←B. La función de control es una función
booleana que se termina en dos puntos, por tanto la función de control es x ´T1 + T3. Ésta
simboliza que la microoperación de transferencia A ← B se ejecuta cuando la función
booleana x ´T1+ T3 = 1, donde x es una variable de condición y T1 y T3 son señales de
tiempo.
De acuerdo a lo anterior, la microoperación se ejecuta en el tiempo T1 (T1=1) si x=0 o en el
tiempo T3 (T3=1).

Una microoperación que especifica una transferencia de información entre registros


implica que la salida del registro origen (B) esté conectada a la entrada del registro destino
(A).
Esta transferencia no se requiere que ocurra con cada pulso de reloj, sino con aquellos
pulsos de reloj en que la función de control tiene el valor lógico 1.
Cada proposición escrita en el lenguaje de transferencia entre registros implica un
hardware determinado. Así, de acuerdo con la discusión anterior, en la figura 2 se muestra
el hardware requerido para implementar la proposición que nos ocupa.
En la figura 2 se muestra un registro A el cual posee una entrada de “carga sincrónica” 4
con los flancos positivos aplicados a la entrada de reloj. Cuando la entrada de carga se
encuentra activa en 1 lógico, el flanco positivo del reloj almacena el dato de entrada en el
registro, en caso contrario cuando la entrada de carga se encuentra inactiva el contenido
del registro A no se modifica.
Considere ahora las proposiciones siguientes:
x ´ T0 : A← B
T2 : A← C

4
Alberto Cuervo García, “Circuitos Digitales I: Registros, Contadores y Memoria RAM”, Plataforma Virtual de
la Univ. Santiago de Cali.
Lenguaje de Transferencia entre Registros 6

se ejecuta si x=0 se ejecuta

reloj
Unidad B
T0
de
T1
Control
T2
T3
x T4
T1 carga
A reloj y señales de tiempo
T3 reloj

Figura 2. Hardware requerido para la proposición x´T 1 + T3 : A B

En esta situación hay dos registros de origen (B y C) que transfieren sus datos a un solo
registro de destino (A). Para dar solución a esta situación se puede utilizar un multiplexor 5
de dos entradas y una línea de selección s como se muestra en la figura 3.

B C

Unidad
de
control
0 1
s multiplexor

x
T0 carga A
T2
reloj

Figura 3 Sistema digital con multiplexor

Cuando T2=1 (carga = 1) se almacena el contenido del registro C que es seleccionado por
el multiplexor en el registro A.
Cuando T0=1 (T2=0) el multiplexor selecciona el contenido del registro B el cual es
almacenado en el registro A si se cumple la condición de que x = 0.

5. Microoperaciones aritméticas
Como su nombre indica, estas microoperaciones se refieren a un procesamiento aritmético
de los datos contenidos en los registros como por ejemplo: sumar dos números,

5
Alberto Cuervo García, “Circuitos Digitales I: Multiplexor”, Plataforma Virtual de la Universidad Santiago de
Cali.
Lenguaje de Transferencia entre Registros 7

incrementar o decrementar un número contenido en un registro, restar un número de otro,


etc.
Considere la proposición siguiente:
y ´T2 + T4 : A ← A + B, C ← C + 1

En este caso la proposición contiene una lista de microoperaciones, dos microoperaciones


en el ejemplo, las cuales van separadas por una coma.
La primera microoperación implica que se deben sumar los contenidos de los registros A y
B y el resultado debe quedar almacenado en el registro A, por lo que el hardware
correspondiente debe contener un sumador 6 cuya salida (A + B) esté conectada a la
entrada del registro A.
La segunda microoperación implica que el contenido del registro C (en realidad un
contador) debe ser incrementado en la unidad y el número incrementado debe quedar en
C.
De acuerdo a lo anteriormente planteado, el hardware requerido para implementar la
proposición anterior se muestra en la figura 4. En esta figura, cuando se aplica un pulso de
reloj a la entrada up, este contador C cuenta en sentido ascendente y cuando se aplica a
la entrada down lo hace en sentido descendente.

reloj
T4

T2 carga
B up C
y reloj A down

Unidad
de
control

sumador

Figura 4. Hardware para la implementación de las microoperaciones aritméticas

6
Alberto Cuervo García, “Circuitos Digitales I: Decodificadores y Sumadores”, Plataforma Virtual de la
Universidad Santiago de Cali
Lenguaje de Transferencia entre Registros 8

6. Microoperaciones lógicas
Estas microoperaciones se refieren a una manipulación lógica de los datos contenidos en
los registros como por ejemplo : complementar o negar un dato contenido en un registro,
realizar el AND de los datos contenidos en dos registros, el OR, el OR exclusivo, etc.
Considere la proposición siguiente:
xT1 + T2 : A← A´, B ← B ∨ C
La primera microoperación implica complementar el dato que se encuentra en el registro A
y la segunda realizar el OR entre los contenidos de los registros B y C y el resultado
dejarlo almacenado en el registro B. Se debe observar que se utilizó el operador ∨ para
representar la operación OR en vez del operador + para que no haya confusión con la
suma aritmética.
El hardware requerido para implementar esta proposición se muestra en la figura 5.

Unidad
de
control
T2
T1
carga carga
x A B C

registros
reloj de 4 bits

Figura 5. Hardware de las microoperaciones lógicas

7. Microoperaciones de desplazamiento
Una microoperación de desplazamiento implica el corrimiento del dato contenido en un
registro una posición a la izquierda o a la derecha dependiendo de la dirección del
desplazamiento.
Considere la microoperación siguiente:
A ← shl A
Esta microoperación implica que se debe desplazar el dato contenido en el registro A una
posición hacia la izquierda (shl = shift left). Por ejemplo, si A es un registro de 4 bits
conteniendo el dato 1001, el desplazamiento ocurre de la forma como se muestra en la
figura 6.
Lenguaje de Transferencia entre Registros 9

A3 A2 A1 A0

antes del
1 0 0 1
desplazamiento

después del
desplazamiento
0 0 1 ?

Figura 6 Desplazamiento hacia la izquierda

Como se puede observar en la figura 6 queda indefinido el valor que va a quedar en la


celda A0 después del desplazamiento. Por tanto, para especificar el desplazamiento de un
dato en un registro se necesitan dos o más microoperaciones para definir el valor que
quedará en la celda extrema del registro: A0 si es un desplazamiento a la izquierda o A3 en
el ejemplo si es un desplazamiento a la derecha.

En la tabla 1 se muestran algunos ejemplos de desplazamientos, ilustrándose los mismos


gráficamente en la figura 7.

Microoperaciones Descripción
a) A ← shlA , A0 ← 0 Desplazamiento de A hacia la izquierda entrando un 0
por la posición de menor orden
b) A ← shlA , A0← C, C← A3 Rotación hacia la izquierda de A a través del flip-flop C
c) A ← shrA , A3← A0 Rotación hacia la derecha de A
d) A ← shlA , A0 ← A3 Rotación hacia la izquierda de A

Tabla 1 Ejemplos de desplazamientos

0
A A
(a) (b)

A A

(c) (d)

Figura 7 Cuatro ejemplos de desplazamientos


Lenguaje de Transferencia entre Registros 10

8. Proposiciones Condicionales
Una proposición condicional en el lenguaje de transferencia entre registros tiene la
siguiente estructura:
fc : si (condición) entonces (microoperaciones) si no (microoperaciones)
donde fc representa la función de control de la proposición. En esta proposición, si se
cumple la condición establecida entre paréntesis, se ejecutan las microoperaciones
encerradas entre paréntesis después de la palabra “entonces”. Si no se cumple la
condición, se ejecutan las microoperaciones después de “si no”.
De cualquier forma la función de control debe ser igual a 1 para que se ejecuten
cualesquiera de las microoperaciones. Si la parte “si no” falta, entonces si no se cumple la
condición no se ejecuta ninguna microoperación.
Las proposiciones condicionales facilitan la interpretación de la escritura, pero son más
una conveniencia que una real necesidad ya que se pueden descomponer en dos
proposiciones simples como se ilustra en el ejemplo siguiente.
Suponga la siguiente proposición condicional:
T3: si (CY=1) entonces (A←0) si no (A←shlA, A0←A3)
donde CY es un flip-flop y A es un registro de 4 bits. La condición en este ejemplo es que
el flip-flop CY se encuentre en el estado 1.
Esta proposición plantea lo siguiente: en el tiempo T3, si el flip-flop CY se encuentra en el
estado 1 se debe borrar el registro A, de lo contrario debe ocurrir una rotación hacia la
izquierda de A.
Esta proposición condicional es equivalente a escribir las dos proposiciones simples
siguientes, y el hardware requerido para implementarlas se muestra en la figura 8.
CY T3 : A ← 0
CY ´T3: A ← shl A , A0 ← A3
CY Modo de operación sincrónico
M1 M0
0 0 no opera
shli:entrada para 0 1 desplaza a la izq
control desplazamiento a la 1 0 desplaza a la derecha
izquierda 1 1 carga

M1
M0
shri A shli
T3 reset

A3 A2 A1 A0
reloj
Figura 8 Hardware para la proposición condicional
Lenguaje de Transferencia entre Registros 11

9. Transferencia con la Unidad de Memoria : buses de datos y direcciones.


La mayoría de los actuales sistemas digitales que poseen una unidad de memoria utilizan
un conjunto de cables denominados “bus de datos” para realizar una transferencia entre la
memoria y los diferentes registros que componen el sistema digital, o entre estos últimos.
En esta situación, tanto la memoria como los registros conectados al bus de datos deberán
tener salidas de 3 estados. Lo anterior se ilustra en la figura 9, en la cual RD es el
registro de direcciones que suministra la dirección a la unidad de memoria a través de otro
conjunto de cables denominado “bus de direcciones”.
En esta figura se ha ilustrado una operación de lectura de memoria representada por la
proposición de transferencia entre registros siguiente, donde la letra M se reserva para
hacer referencia a la unidad de memoria.
T1 : C ← M
Cuando T1=1, el terminal de carga del registro C se hace 1 al igual que se aplica un pulso
negativo al terminal OE de la memoria colocando ésta en el bus de datos el dato que tiene
almacenado en la dirección de memoria cuya dirección está en el registro RD (registro de
direcciones). Este dato aparece en las entradas de todos los registros y es almacenado en
el registro C con el flanco positivo del pulso de reloj que ocurre cuando T1=1.
En esta figura, OE (output enable) habilita la salida de la unidad de memoria colocando la
misma el dato almacenado en sus líneas del mismo nombre.

carga carga carga carga


B C D E
control

reloj

bus de datos

T1 dato
OE
WE Memoria
pulso CE dirección
de
lectura
RD bus de direcciones

se almacena el dato
reloj en el registro C

T1
pulso de Lectura
colocado por de
lectura
la memoria
bus de dato memoria
datos 3er estado 3er estado

Figura 9 Transferencia con la unidad de memoria


Lenguaje de Transferencia entre Registros 12

En ocasiones en un sistema digital puede haber más de un registro que suministre la


dirección a la unidad de memoria. En estas situaciones, la microoperación que especifique
una transferencia con memoria deberá especificar también el registro que suministra la
dirección. Así por ejemplo, considere la microoperación siguiente.
C ← M [A2]
Esta microoperación implica: “el dato que se encuentra en la localización de memoria cuya
dirección está contenida en el registro A2, transferirlo al registro C”.
En la tabla 2 se hace un resumen de los símbolos básicos vistos del lenguaje de
transferencia entre registros.

Símbolo Descripción Ejemplos


Letras (y numerales) Denota un registro A, RI, R2....etc.
Subíndice Denota un bit de un registro A2, B6...etc.
Paréntesis ( ) Denota una porción de un registro CP(H), CP(L)...etc.
Flecha ← Denota una transferencia de información C ← B, ...etc.
Dos puntos : Termina una función de control x´T1 :
Coma , Separa dos microoperaciones A← B , C← C + D
Llaves cuadradas [ ] Especifica una dirección de memoria C← M [A2]

Tabla 2. Símbolos básicos del lenguaje de transferencia entre registros

10. Especificación de un computador sencillo.


En esta sección se especifica un sencillo computador que se quiere implementar utilizando
los conceptos básicos vistos del lenguaje de transferencia entre registros.
Para especificar un sistema digital como un computador, deben ser especificados los
elementos del hardware que conformarán al mismo, así como el repertorio de
instrucciones que será capaz de reconocer y ejecutar el computador.
Hardware

Los elementos del hardware que debe tener el computador serán los siguientes.

1. Una unidad de memoria EPROM de 256 bytes.


2. Un registro de direcciones RD cuya función es entregarle a la unidad de memoria la
dirección de la localización cuya información almacenada se va a leer. Por tanto,
este registro será de 8 bits.
3. Un contador de programa CP. La función especifica del contador de programa es
contener la dirección de memoria donde se encuentra la próxima instrucción de
Lenguaje de Transferencia entre Registros 13

programa que debe ser buscada en la memoria para ser ejecutada. Por tanto será
también de 8 bits.
4. Un registro de instrucciones RI. Cuando el computador busca en la memoria una
instrucción (código de operación) se almacena en el registro de instrucciones para
ser decodificado por el decodificador de instrucciones. El RI será de 8 bits.
5. Decodificador de instrucciones. El decodificador de instrucciones decodifica
(interpreta) el código de operación y al activar una sola salida le dice a la unidad de
control de qué instrucción se trata.
6. Unidad de Control: esta unidad es la encargada de generar las señales de control
para el resto del sistema con el objetivo de ordenar la ejecución de las diferentes
microoperaciones que se deben realizar en el computador.
7. Un registro acumulador A de 8 bits y un registro de 1 bit C. El acumulador A del
computador es un registro que sirve de origen y destino en las operaciones
aritméticas y lógicas y el registro de 1 bit C es un flip-flop o bandera encargado de
guardar el acarreo que se puede generar en una operación aritmética como la suma
por ejemplo.
8. Un registro de 8 bits B de propósito general.
9. Una tecla denominada EJEC, la cual debe ser presionada para comenzar la
ejecución de un programa almacenado en la memoria en la dirección 0 dec.
10. Un acumulador temporal de 8 bits ACT transparente para el programador en el cual
se almacena en forma temporal uno de los operandos de origen en aquellas
instrucciones aritméticas o lógicas como la suma por ejemplo.
11. Un sumador para poder implementar la instrucción de sumar, que como se verá es
una de las instrcciones del repertorio del computador.
12. Un registro temporal TEMP transparente para el programador en el cual se
almacenará la dirección especificada por algunas instrucciones, como por ejemplo,
en las instrucciones de modo de direccionamiento directo.

El conjunto de registros especificados para el hardware del computador se muestran en la


figura 10. En esta figura se puede observar que la salida del registro de instrucciones se
aplica al decodificador de instrucciones para que este último decodifique el código de
operación de la instrucción. La salida del decodificador de instrucciones se aplica a la
Unidad de Control para que de acuerdo a la línea activa del decodificador el control genere
las señales de control apropiadas.
Lenguaje de Transferencia entre Registros 14

Los pulsos de reloj son aplicados a la Unidad de Control, así como al resto de los registros
que conforman el sistema (esto último no representado en la figura 10), como en cualquier
sistema digital del tipo secuencial sincrónico.

Reg de
C CP B
Instrucciones
señal
de RD ACT
Dec. de
instrucciones
estado

A sumador
ejec
Unidad
señales
de
de TEMP
Control Memoria
reloj control

Figura 10 Elementos del hardware del computador

Como se puede observar en la figura 10, la salida del flip-flop de acarreo C entra a la
unidad de control para que ésta conozca su valor y pueda tomar una decisión determinada
de acuerdo al valor que tiene esta bandera de acarreo. También entrará a la unidad de
control la señal externa “ejec” para que el control se entere cuando se ha presionado la
tecla del mismo nombre y ordene comenzar la ejecución del programa almacenado en la
EPROM.
Especificación del repertorio de instrucciones.
Con un registro de instrucciones de 8 bits, el código de operación de las instrucciones
puede ser de 8 bits, lo que implicaría que el computador podría reconocer hasta 28 = 256
instrucciones. Como es obvio, y en aras de la sencillez, nuestro computador tendrá
solamente un repertorio de 7 instrucciones las cuales tendrán 3 modos de
direccionamiento diferentes. Como se observará más adelante de acuerdo a los formatos
de las instrucciones, como el código de operación de la instrucción ocupa un byte de
memoria, el computador podría tener 256 instrucciones si se utilizara un decodificador de
instrucciones de 8 bits y el hardware necesario para esto.
7
Modo de direccionamiento: el término “modo de direccionamiento” se refiere a la forma
cómo una instrucción especifica un operando sobre el cual va a actuar. El repertorio de
instrucciones de nuestro computador utilizará uno de los siguientes modos de
direccionamiento:

7
Kenneth L. Short, Microprocessors and Programmed Logic”, 2ª ed, Prentice-Hall Inc., New Jersey
Lenguaje de Transferencia entre Registros 15

1. Modo de direccionamiento de registro, en el cual la instrucción especifica los


contenidos de registros, como por ejemplo “MOV B,A”. Esta instrucción especifica
que el dato contenido en el registro A debe ser almacenado en el registro B. La
instrucción consta solamente de un código de operación y por tanto ocupa una sola
localización en la memoria. El código de operación de una instrucción es un grupo
de bits, el cual al ser decodificado por el decodificador de instrucciones le informa a
la unidad de control de qué instrucción se trata.
2. Modo de direccionamiento inmediato ocurre cuando una instrucción contiene el
dato sobre el cual se va a actuar, como por ejemplo “MVI A, dato”. En ésta, el dato
especificado por la instrucción debe ser almacenado en el registro A. Ocupa dos
localizaciones en la memoria, la primera siempre contiene el código de operación y
el dato viene inmediatamente después del código de operación, esto es, el dato
está contenido en la segunda localización de memoria.
3. Modo de direccionamiento directo. Una instrucción con este modo de
direccionamiento no especifica el dato, sino la dirección de la localización de
memoria donde se encuentra el dato sobre el cual se va a operar. Por ejemplo,
“LDA dirección”. Esta instrucción especifica que el dato contenido en la dirección de
memoria especificada se debe almacenar en el registro A. Ocupa 2 localizaciones
en la memoria, en la primera se encuentra el código de operación y en la segunda
la dirección especificada por la instrucción. Recuerde que las direcciones en nuestro
computador son de 1 byte u ocho bits.
En la figura 11 se ilustra lo anteriormente expuesto y en la tabla 3 las instrucciones.
Instrucción Cod. de Modo de Descripción
operación direccionamiento
MOV B,A 00000000 de registro Se mueve el dato almacenado en el reg
A al reg B.
ADD A,B 00000001 de registro Se suman los contenidos de los reg A y
B y el resultado se queda en el reg A
MVI A, dato 00000010 inmediato El dato especificado por la instrucción se
mueve al reg A
JMP dirección 00000011 inmediato Se altera la secuencia del programa y se
salta a la dirección especificada.
JNC dirección 00000100 inmediato Salto condicional: el salto se produce si
el acarreo es 0, si no hay acarreo.
LDA dirección 00000101 directo El dato contenido en la dirección de
memoria especificada se mueve a A.
NOP 00000110 ------------- No operar

Tabla 3 Repertorio de instrucciones del computador


Lenguaje de Transferencia entre Registros 16

En esta tabla, además de las instrucciones simbólicas que debe poseer el computador,
aparece el modo de operación asignado a cada una de las mismas, así como los modos
de direccionamiento que poseen.

direcciones memoria

10 Cod Oper MOV B,A

15 Cod Oper
instrucciones

MVI A, 18 El número 18 se almacena en A


16 18

25 Cod Oper
LDA 64 El número 20 se almacena en A
26 64

64 20

Figura 11 Ejemplos de ubicación de las instrucciones en memoria

11. Diseño lógico del computador


Cuando un computador ejecuta un programa, él alterna repetidamente entre los ciclos de
búsqueda y ejecución como se muestra en la figura 12.

búsqueda ejecución

Figura 12 Operación secuencial de un computador

Durante el ciclo de búsqueda, el computador lee el código de operación en la memoria y lo


ubica en el registro de instrucciones. Una vez allí, este código es decodificado por el
Lenguaje de Transferencia entre Registros 17

decodificador de instrucciones, pudiendo pasar a ejecutar dicha instrucción. Una vez


ejecutada la instrucción, regresa de nuevo al ciclo de búsqueda para leer la instrucción
siguiente, y así sucesivamente.
El primer paso en el diseño del computador consiste en escribir las proposiciones de
transferencia entre registros que satisfagan los requerimientos planteados.
Ciclo de búsqueda:
El contador de programa es el registro encargado de tener la dirección de la próxima
instrucción que se debe buscar en la memoria. Por tanto lo primero que debe hacer el
computador es transferir esta dirección al registro de direcciones para que la reciba la
memoria.
Después, cuando ya la memoria tenga esta dirección, se lee la memoria (el código de
operación) y se almacena en el registro de instrucciones para ser decodificado. También
deberá incrementar el contador de programa para dejarlo preparado para que lea la
instrucción siguiente cuando regrese al ciclo de búsqueda.
Lo anterior traducido al lenguaje de transferencia entre registros será:
T0 : RD ← CP
T1 : RI ← M , CP ← CP + 1
Donde T0 y T1 son señales de tiempo
Ciclo de ejecución:
A partir de T2, como el código de operación se encuentra en el RI, el decodificador de
instrucciones tendrá una sola salida activa dependiendo de la instrucción que se trate.
Por tanto, a partir de T2, las microoperaciones que se efectuarán dependerán de las
salidas del decodificador de instrucciones, es decir, de cuál fue el código de operación
buscado en la memoria durante el ciclo de búsqueda.
Por lo anterior, se describirán las proposiciones de transferencia entre registros durante el
ciclo de ejecución para cada una de las instrucciones de su repertorio.
En las proposiciones siguientes, y0 es la salida del decodificador de instrucciones cuando
la entrada al mismo es 00000000, y1 cuando la entrada es 00000001, etc.
MOV B,A Código de operación = 00000000
En esta instrucción se debe transferir el dato del registro A al registro B, entonces:
yoT2 : ACT ← 0
yoT3 : B ← A + ACT
En T3, ya queda ejecutada la instrucción, debiendo regresar el control a T0 del ciclo de
búsqueda para buscar en la memoria la instrucción siguiente.
Lenguaje de Transferencia entre Registros 18

ADD A,B Código de operación = 00000001


y1T2 : ACT ← B
y1T3 : A ← A+ACT, C ← Cout
Igualmente, en T3 queda ejecutada esta instrucción, por lo que el control deberá regresar a
T0 para buscar en la memoria la instrucción siguiente. Como se verá, todas las
instrucciones excepto una se terminan de ejecutar en el tiempo T3. Todas las instrucciones
que terminen en T3 tendrán 4 estados (períodos de los pulsos de reloj) en su ciclo de
instrucción (búsqueda + ejecución).
En esta instrucción, A+ACT representa la salida del sumador, por lo que éste deberá ser
de 3 estados si se utiliza un bus como es el caso. Cout representa el acarreo de salida del
sumador.
MVI A,dato Código de operación = 00000010
Como el contador fue incrementado durante el ciclo de búsqueda de esta instrucción, éste
tiene la dirección de memoria donde se encuentra el dato. Por tanto el contenido del
contador de programa deberá ser transferido al registro de direcciones para leer el dato de
la memoria e incrementado para dejarlo preparado para buscar la instrucción siguiente
cuando se regrese al ciclo de búsqueda. Esto se traduce en las siguientes proposiciones
de transferencia entre registros:
y2T2 : RD ← CP
y2T3 : A ← M , CP ← CP + 1
JMP dirección Código de operación = 00000011
Esta instrucción especifica un salto incondicional. Un programa se ejecuta instrucción tras
instrucción hasta que se ejecute una instrucción de salto o de bifurcación del programa
como ésta. Su ejecución implica que la siguiente instrucción que se debe ejecutar se
encuentra en la dirección de memoria especificada.
Debido a lo anterior, como el CP se encuentra apuntando a la dirección especificada por la
instrucción debido a que fue incrementado en el ciclo de búsqueda, el contenido del CP
deberá ser transferido al RD para leer la dirección a donde se quiere saltar. Esta dirección
deberá ser almacenada en el CP para que cuando se regrese al ciclo de búsqueda se
produzca el salto.
y3T2 : RD ← CP
y3T3 : CP ← M
Lenguaje de Transferencia entre Registros 19

JNC dirección Código de operación = 00000100


Esta instrucción representa un salto condicional. El salto se produce si C=0, esto es, si no
se produjo un acarreo durante la ejecución de la instrucción de suma. Por tanto, las
proposiciones de transferencia entre registros serán las siguientes:
y4T2 : RD ← CP
C´y4T3 : CP ← M
C y4T3 : CP ← CP + 1
Como se puede observar, en T3 si C=0 se carga la dirección especificada en el CP para
producir el salto, de lo contrario se incrementa el CP para que cuando el control regrese a
T0 busque la instrucción siguiente.
Las dos últimas proposiciones se podrían haber escrito como una proposición condicional:
y4T3 : si (C=0) entonces (CP←M) si no (CP←CP+1)
LDA dirección Código de operación = 00000101
Para ejecutar esta instrucción, el computador deberá leer de la memoria la dirección
especificada por la instrucción donde se encuentra el dato que debe ser transferido al
registro A, e incrementar el contador de programa para que quede apuntando a la
siguiente instrucción cuando regrese al ciclo de búsqueda.
Esta dirección deberá ser después transferida al registro de direcciones para obtener de la
memoria el dato. Lo anterior se resume en las siguientes proposiciones:
y5T2 : RD ← CP
y5T3 : TEMP ← M, CP ← CP+1
y5T4 : RD ← TEMP
y5T5 : A ← M
Esta es la única instrucción que no tiene 4 estados en su ciclo de instrucción, tiene 6
estados.
NOP Código de operación = 00000110
La ejecución de esta instrucción implica “no operar”, es decir, no ejecutar ninguna
microoperación en su ciclo de ejecución. Por tanto en T2 y en T3 no se ejecutará ninguna
microoperación, regresando a T0 del ciclo de búsqueda siguiente después de T3. Tendrá
también 4 estados como se verá en la sección que describe el generador de las señales
de tiempo del control.
El segundo paso en el diseño del computador consiste en obtener las funciones de control
para cada una de las microoperaciones que debe realizar.
Lenguaje de Transferencia entre Registros 20

Así por ejemplo, analizando la microoperación CP←M, se observa que ésta se debe
efectuar en el tiempo T3 si y3=1 ó en el tiempo T3 si C=0 y y4=1. Esto es, la función de
control completa para esta microoperación es:
y3T3 + C´y4T3 : CP ← M
Realizando el mismo análisis para cada una de las microoperaciones se puede elaborar la
tabla 4 en la cual se observan las funciones de control para cada una de las
microoperaciones que debe ordenar ejecutar la unidad de control del computador.

Microoperaciones Funciónes de control


RD ← CP F1= T0 + y2T2 + y4T2 + y5T2 + y3T2
RI ← M F2= T1
CP← CP + 1 F3= T1 + y2T3 + Cy4T3 + y5T3
ACT ← 0 F4= y0T2
A ← A + ACT F5= y1T3
C ← Cout F5= y1T3
CP ← M F6= y3T3 + C´y4T3
TEMP ← M F7= y5T3
A←M F8= y2T3 + y5T5
RD ← TEMP F9= y5T4
ACT ← B F10= y1T2
B ← A + ACT F11= y0T3

Tabla 4 Funciones de control de las microoperaciones

Como se verá posteriormente, las funciones de control de la tabla 4 serán las señales de
salida de la unidad de control del computador que ordenarán ejecutar cada una de las
microoperaciones, esto es, una unidad funcional de la unidad de control será una lógica
combinacional la cual tiene como salidas las funciones de control de la tabla 4 y como
señales de entrada las salidas del decodificador de instrucciones, las señales de tiempo y
el bit de acarreo C.
Organización del hardware del computador.
La organización del computador que se adoptará será la de utilizar un bus de datos para
realizar las transferncias de información que se plantean en las distintas microoperaciones,
como se muestra en la figura 13.
En esta figura cabe destacar lo siguiente:
1. La entrada del RI está conectada al bus de datos para recibir información de la
unidad de memoria. Su salida entra al decodificador de instrucciones para que el
código de operación de la instrucción se decodifique.
Lenguaje de Transferencia entre Registros 21

2. El repertorio de instrucciones de este computador es muy pequeño, en realidad 7


instrucciones en total. Esto hace que nada más se utilicen 3 bits de los 8
disponibles para el código de operación de las instrucciones. Por lo tanto se puede
utilizar un decodificador de instrucciones de 3 entradas y 8 salidas como se
muestra en la figura 13.
3. La salida del decodificador de instrucciones entra a la unidad de control para
implementar las funciones de control de la tabla 4.
4. Los pulsos de reloj (aunque no se muestra) entran a la unidad de control y a todos
los registros del sistema.
5. La microoperación de suma (según se plantea en las proposiciones de
transferencia entre registros) siempre se efectúa con el acumulador A y el
acumulador temporal ACT. Por tanto las salidas de estos dos registros van a un
sumador.
6. La salida de este sumador (A+ACT) está conectada al bus de datos para transferir
información por esta vía al registro A o al registro de propósito general B. Esto
implica que la salida del sumador debe ser de 3 estados.
7. Debido a lo planteado en el punto anterior, las entradas de los registros A y B
deben quedar conectadas al bus de datos.
8. La entrada del registro de direcciones RD está conectada al bus de datos para
recibir información por esta vía de los registros CP y TEMP. La salida del mismo
(que no es más que el bus de direcciones) queda conectada a la entrada de
dirección de la unidad de memoria.
9. La salida de la unidad de la memoria EPROM está conectada al bus de datos para
enviar información a los registros RI, CP, TEMP y el acumulador A.
10. Como Cout es la salida de acarreo del sumador, la misma va conectada a la entrada
del registro de 1 bit C.
11. El registro CP (contador de programa) no es más que un contador con capacidad
de carga en paralelo cuya entrada está conectada al bus de datos para recibir
información de la unidad de memoria. Su salida va al bus de datos para transferirle
información al registro de direcciones RD.
12. De la tabla 4 se puede observar que el registro acumulador A recibe datos de dos
orígenes: el sumador y la memoria. Por tanto el terminal de carga del registro A
debe ser activado con la función F5 + F8.
Lenguaje de Transferencia entre Registros 22

13. De forma similar se observa que el registro de direcciones RD recibe datos también
de dos orígenes: el contador de programa CP y el registro termporal TEMP. Por
tanto, el terminal de carga del registro RD debe ser activado con la función F1 + F9.
14. El sumador, la memoria y todos los registros (B, CP y TEMP) cuyas salidas están
conectadas al bus de datos deben tener salidas de 3 estados.
15. Las salidas de los elementos relacionados en el punto 14 deben quedar habilitadas
siempre que sirvan de origen de una transferencia, por tanto: la salida del sumador
debe quedar habilitada con F5+F11, la salida de la memoria con F2+F6+F7+F8, la
del reg B con F10, la del registro CP con F1 y la del registro TEMP con F9, para
garantizar que estos elementos coloquen un dato en el bus de datos.
16. El terminal de carga del registro de instrucciones RI debe ser activado con la señal
F2 para que con el flanco positivo del pulso de reloj correspondiente se almacene
en el mismo el dato que ha colocado la memoria en el bus de datos.
17. El terminal de carga del registro CP debe ser activado con la señal F6 para
almacenar el dato con el pulso de reloj correspondiente que ha colocado la
memoria en el bus de datos.
18. El terminal de carga del registro de propósito general B debe ser activado con la
señal F11 para que se almacene en el mismo el dato colocado por el sumador en el
bus de datos.
19. El terminal de carga del registro TEMP debe ser activado con la señal F7 para
garantizar que en el mismo se almacene el dato que ha colocado la memoria en el
bus de datos.
20. En todo elemento del sistema digital cuya salida sea de 3 estados conectada a un
bus de datos común y sirva de origen en una transferencia de información, su
salida debe ser habilitada con las funciones de control correspondientes para que
coloque dicha información en el bus y lo reciba el elemento destino.
21. Todo registro del sistema digital que sea destino en una transferencia de
información, debe ser colocado en el modo de carga por las funciones de control
correspondientes para que el pulso de reloj almacene esta información en el
mismo. Esta información debe haber sido colocada previamente en el bus de datos
proveniniente directamente de otro elemento o registro del sistema digital.
22. El terminal de “conteo” del CP debe ser activado con F3 para permitir que el flanco
positivo del pulso de reloj correspondiente lo incremente.
Lenguaje de Transferencia entre Registros 23

borrado
inicial borrado carga
carga conteo
OE TEMP OE CP OE B
entr / sal carga entr / sal entr / sal

bus de
datos

8 bits

carga entr carga entr borrado entr


RI RI1 A carga ACT
RI2 RI0 salida salida

decodificador
de
OE
instrucciones
y5 y4 y3 y2 y1 y0 SUMADOR
de 8 bits
C entr Cout salida de
carga 3 estados

F4

F3
unidad
de F5 carga entr
RD
control F11 salida OE: Output enable
F10
F9 8 bits habilita salida
F1 Borrado: cuando =1 el
F7 dirección
reloj borra el registro
F8
F6 carga: cuando = 1, el
F2
CE MEMORIA reloj almacena el dato
EPROM a la entrada
ejec salida de conteo: cuando =1, el
OE 3 estados reloj incrementa el
pulso dato registro
negativo
reloj a los demás de lectura
registros del
computador

Figura 13 Organización del computador

Se debe observar que la salida y6 del decodificador de instrucciones no se utiliza, pués la


misma se activa cuando la instrucción sea “no operar” en la que no se realiza ninguna
microoperación.
Lenguaje de Transferencia entre Registros 24

12. Implementación de los registros del sistema


Con el propósito de buscar uniformidad, todos los registros del sistema se implementarán
utilizando los circuitos integrados comerciales 74LS163.
El 74LS163 es un circuito integrado de 4 bits que permite operaciones sincrónicas con los
flancos positivos aplicados al reloj, tales como: carga en paralelo, borrado y conteo
creciente de acuerdo con la tabla que se muestra en la figura 14.
De igual forma, para aquellos registros que necesiten salida de 3 estados como TEMP,
CP, y el registro de propósito general B, se adicionará a los mismos el circuito integrado
74LS465. Este circuito es un buffer con salida de 3 estados capaz de manejar el bus de
datos.

operación
sincrónica
borrado clear
entrada clear load ENP ENT
carga load
74LS163 0 X X X borrado
conteo ENP
1 ENT 1 0 X X carga
salida reloj conteo
RCO 1 1 1 1
ascendente
1 1 0 X
no opera
RCO: acarreo de salida
1 1 X 1
RCO=1 cuando la salida = 1111

Figura 14 operación del circuito integrado 74LS163

Debido a lo anterior, el circuito de los registros se muestra en la figura 15 y en la tabla 5 las


conexiones de los terminales para los diferentes registros que posee el computador. En
esta tabla, X significa que la conexión es la mostrada en la figura 13.

TEMP CP B RI A ACT RD
Conteo tierra X tierra tierra tierra tierra tierra
Carga X X X X X X X
Borrado tierra Borrado tierra tierra tierra X tierra
inicial

Tabla 5 Conexiones de los terminales de los registros.


Lenguaje de Transferencia entre Registros 25

conteo RCO ENT RCO ENT


ENP ENP +5V
clear
74LS163 clear 74LS163
load load
borrado

carga

buffer de 3 estados
OE 74LS465 OC : output control
OC

entrada/salida
Figura 15 Circuito de los registros.

Los registros RI, A, ACT y RD no necesitan salida de 3 estados, por lo que no se utiliza en
la implementación de los mismos el buffer de 3 estados de la figura 15.
13. Implementación del sumador
Al igual que con los registros, en la implementación del sumador debe incluirse un buffer
de 3 estados, pués la salida del sumador esta conectada al bus de datos.
Se utilizarán para la implementación del mismo 2 circuitos integrados 74LS283
(sumadores de 4 bits) y un buffer de 3 estados 74LS465 como se muestra en la figura 16.
del registro A del registro ACT

Cout 32103210 32 10321 0


CO CI CO CI
al flip-flop C 321 0 3210

74LS283 74LS283

OE 74LS465
OC
al bus
de datos
salida de 3
estados

Figura 16 Circuito del sumador


Lenguaje de Transferencia entre Registros 26

14. Unidad de memoria y flip-flop de acarreo.


De acuerdo con las especificaciones de la unidad de memoria, esta es una EPROM de
256 bytes. Se utilizará una pastilla de memoria EPROM 27C64, que aunque tiene una
capacidad mucho mayor, 8 Kbytes, se encuentran disponibles en el laboratorio de
electrónica de la universidad Santiago de Cali.
Esta pastilla es una memoria cuya salida es de 3 estados con 13 líneas de dirección y 8
líneas para el dato de salida. Su interconexión se muestra en la figura 17.
En la misma figura 17 se ha dibujado el flip-flop de acarreo, implementado con un flip-flop
tipo D de flancos positivos. Debe observarse que la salida de este flip-flop entra a la unidad
de control para que esta última conozca el valor que se produjo durante la ejecución de la
instrucción de suma y tome la decisión de ordenar la bifurcación del programa o no, en la
ejecución de la instrucción de salto condicional.

dirección
del registro RD

Flip-flop de acarreo

A12 ..... A8A7 ........... A0 carga


C D
OE a la unidad entrada
OE de control reloj
EPROM 27C64 C Cout del
CE sumador
D7 ..... D0
Si carga = 0, D=C y el flip flop
dato carga su mismo valor, no opera
Si carga = 1, D = entrada y
almacena este valor

Figura 17 Memoria y flip-flop de acarreo

15. Implementación de la unidad de control


La unidad de control está compuesta por dos unidades funcionales: la lógica
combinacional del control y el generador de tiempos como se muestra en la figura 18.
A la lógica combinacional llegan las salidas del decodificador de instrucciones, las señales
de tiempo, y también C para implementar las funciones de control obtenidas, las cuales se
mostraron en la tabla 4.
Conocidas estas funciones booleanas, este circuito puede ser fácilmente implementado
utilizando compuertas o cualquier otro dispositivo lógico programable.
Lenguaje de Transferencia entre Registros 27

Debido a que las señales de tiempo ocurren secuencialmente una tras otra, las mismas
pueden ser implementadas fácilmente utilizando un registro de desplazamiento hacia la
derecha en el cual un solo flip-flop se encuentre en el estado 1.
Se debe recordar que el computador necesita para su operación 6 señales de tiempo
(T0…T5). Todas las instrucciones, de acuerdo a las proposiciones de transferencia entre
registros escritas, necesitan 4 señales de tiempo (T0…T3). Solamente una instrucción,
“LDA dirección” cuyo código de operación es el 00000101 necesita 6 señales de tiempo o
estados.
De acuerdo al análisis anterior, cuando el generador de tiempos se encuentre en T3, si
y5=1, debe seguir hasta T5 y regresarse a T0 para el siguiente ciclo de búsqueda.
En caso contrario, si y5=0, entonces de T3 debe regresar a T0.
La señal Ejec también entra al generador de tiempos pués esta señal de acuerdo a los
requerimientos planteados anteriormente debe iniciar la ejecución de un programa
almacenado en la memoria.
Esto es, inicialmente cuando se suministra la energía eléctrica al computador, todas las
señales de tiempo son 0. En el flanco negativo del pulso de reloj en que Ejec=1, T0 se
hace 1 y se comienzan a generar las señales de tiempo. Debe observarse que Ejec nada
más puede tener el valor 1 durante un período de los pulsos de reloj.
De acuerdo con el análisis anterior, el circuito del generador de tiempos puede ser
implementado como se muestra en la figura 19, donde se han utilizado 6 flip-flops JK de
flancos negativos para el registro de desplazamiento.
y6 y5 y4 y3 y2 y1 y0

F1
F2
F3 reloj
F4
Lógica F5
F6
combinacional F7 Ejec
F8
del control F9
F10 T0
F11

C T1

T2

T3
T5 T4 T3 T2 T1 T0

Ejec Generador etc.


de tiempos
reloj

Figura 18 Unidades funcionales de la Unidad de Control


Lenguaje de Transferencia entre Registros 28

T0 T1 T2 T3 T4 T5

J T0 J T1 J T2 J T3 J T4 J T5
ejec
reloj
K K K K K K
clear clear clear clear clear clear
borrado
inicial

y5

Figura 19 Circuito del generador de tiempos

En la figura 19 puede observarse que cuando T3=1, este 1 aparece en la J del flip-flop T4 si
y5=1. En caso contrario, si y5=0, el 1 aparece en la J del flip-flop T0 generándose entonces
esta última señal después de T3.

16. Implementación de la señal Ejec.

La señal ejec se coloca en 1 al presionar una tecla. Pero la acción de presionar una tecla
es una acción totalmente asincrónica, esto es, puede ocurrir en cualquier momento del
tiempo y puede estar presionada por un intervalo de tiempo relativamente prolongado
comparado con el período de los pulsos de reloj.
Esto generaría un serio inconveniente, pués la duración de la señal ejec nada más puede
durar un período del reloj y ocurrir sincrónicamente cuando ocurre un flanco positivo del
mismo.
En la figura 20 se ilustra esta situación, por lo que para superar este inconveniente se
utilizará un circuito secuencial sincrónico cuyo diagrama de estados se muestra en la
misma figura 20 para generar la señal ejec a partir de la señal de la tecla.
De acuerdo con el diagrama de estados de la figura 20, en el estado de inicio el circuito se
encuentra esperando que la señal tecla se haga 1. Cuando tecla=1, el pulso de reloj
ocasiona que pase al estado de pulso donde se genera la señal ejec y al siguiente pulso
de reloj pasa al estado de espera.
Va a permanecer en el estado de espera hasta que la señal tecla regrese a 0.
Lenguaje de Transferencia entre Registros 29

reloj
inicio inicio inicio pulso espera espera inicio

tecla

ejec

la señal ejec=1 cuando el circuito se encuentre en el estado de pulso

tecla=1
inicio pulso espera

tecla=1
tecla=0
tecla=0

diagrama de estados

Figura 20 Señales de la tecla y ejec y diagrama de estados

Si se utilizan flip-flops tipo D de flancos positivos y el método de 1 flip-flop/estado para


implementar este circuito secuencial, las funciones de las entradas D de los flip-flops
pueden obtenerse por simple inspección del diagrama de estados. Estas son:
Dinicio = tecla´inicio + tecla´espera
Dpulso = tecla . inicio
Despera= pulso + tecla.espera
Con las funciones anteriores, se obtiene el circuito que se muestra en la figura 21. La señal
“borrado inicial” que se produce por un breve lapso de tiempo al encender el computador
(al conectarle la energía eléctrica) deberá colocar a este circuito en el estado de inicio.
Por lo anterior, como se muestra en la figura 21, la señal de “borrado inicial” va conectada
al terminal de preset del flip-flop inicio y a los terminales de clear de los flip-flops pulso y
espera.

Resumiendo, la señal de borrado inicial debe realizar las acciones siguientes:

• Borrar el contador de programa CP para que el computador comience a ejecutar un


programa ubicado en la localización 0 de la memoria.
• Borrar el generador de tiempos de la unidad de control y
• Colocar al circuito secuencial que genera la señal ejec en el estado de inicio.
Lenguaje de Transferencia entre Registros 30

ejec = pulso

pulso
D inicio D D espera
tecla
ejec

preset clear clear

reloj

tecla

borrado inicial

Figura 21 Implementación de la señal "ejec"

17. Obtención de la señal “borrado inicial” y la señal “tecla”.


Para obtener la señal de borrado inicial se utiliza una red RC con una constante de tiempo
igual al producto de la resistencia por el condensador. En la figura 22 se muestra este
circuito con una constante de tiempo ≈ 150 milisegundos, tiempo adecuado para que la
señal “borrado inicial” permanezca en 1 el tiempo suficiente al encender el computador y
realice las 3 acciones descritas anteriormente.
El inversor colocado debe ser CMOS con entrada tipo “Schmitt trigger”, para que al cerrar
el interruptor on/off, momento en que el condensador se encuentra descargado, la
corriente I mostrada sea prácticamente 0. Esta corriente I tendería a reducir la constante
de tiempo con que se carga el condensador,
Por otro lado la entrada Schmitt trigger garantiza una transición abrupa de 1 a 0 en la
señal “borrado inicial”, pués en caso contrario se podrían generar oscilaciones indeseadas
en los circuitos que esta señal excita.
La señal tecla se obtiene de un latch formado por 2 compuertas NAND con el objetivo de
eliminar el ruido de rebote común a todo interruptor mecánico. La tecla mecánica debe ser
del tipo 1 polo, dos posiciones.
Lenguaje de Transferencia entre Registros 31

+5v. on/off +5v.

a la alimentación 4.7 K
1 polo
de los circuitos tecla
2 posiciones
220 integrados
Kohmios I 74ACT14
tecla
0.68 borrado inicial
4.7 K
microfaradios CMOS, schmitt trigger
+5v.

Figura 22 Señal tecla y borrado inicial

18. Programa elaborado para el computador.

En la tabla 6 se muestra un sencillo programa elaborado para este computador con el


objetivo de comprobar inicialmente la operación del mismo.

dirección código etiqueta instrucción comentario


00 05-50 LDA 80 ; se busca un dato en memoria
02 00 MOV B,A ; se transfiere al reg B
03 05-5A LDA 90 ; se busca otro dato de la memoria
05 01 ADD A,B ;se suman los dos datos
06 04-0A JNC terminar ; si no hay acarreo se termina
08 02-00 MVI A,0 ;si lo hay se borra al acumulador
0A 06 terminar : NOP
0B 03-0A JMP terminar

Tabla 6 Programa elaborado

Este sencillo programa suma el dato que está almacenado en la dirección 80 con el dato
almacenado en la dirección 90 de la memoria. El resultado se queda en el registro
acumulador si no se produce un acarreo en la instrucción de suma. Si se produce un
acarreo, entonces se limpia al acumulador.
Este programa puede ser fácilmente grabado en la pastilla de la memoria EPROM al igual
que los dos datos anteriores haciendo uso del programador universal existente en el
laboratorio de electrónica de la universidad Santiago de Cali. Las direcciones de memoria
así como los códigos de las instrucciones de la tabla 6 están en hexadecimal.
Para la prueba del computador se recomienda utilizar un generador de pulsos del
laboratorio con una frecuencia baja de 1 KHz. para aplicárselos al computador diseñado.
Lenguaje de Transferencia entre Registros 32

19. Conclusiones

El artículo presente fué escrito con el objetivo de presentar los conceptos básicos del
lenguaje de transferencia entre registros. Para ilustrar la utilización de estos conceptos se
realizó el diseño lógico de un sencillo computador capaz de interpretar y ejecutar un
pequeño conjunto de siete instrucciones, presentando la organización y la arquitectura del
computador diseñado.
La arquitectura del computador se refiere a todas aquellas características del mismo que
son visibles para un programador, las cuales tienen una incidencia directa en la ejecución
de un programa, mientras la organización se refiere al análisis de las diferentes unidades
funcionales que tiene el computador así como la interconexión entre las mismas.
Se procuró suministrar unos conocimientos básicos sobre aspectos de la Organización y
Arquitectura de Computadores, tratando tanto el hardware como el software ya que para
entender mejor la organización y arquitectura de un computador es necesario mostrar una
visión general del mismo que permita ver cómo sus diferentes partes encajan en un todo.
En todo momento se trató de enfocar los conceptos presentados de la forma más
descriptiva y práctica posible que ayuden a comprender satisfactoriamente el uso del
lenguaje de transferencia entre registros en el diseño de un sistema digital.
Se utilizó en el diseño del computador un bus de datos al cual está conectada la memoria
y diferentes registros para realizar transferencias de información entre los mismos. Esto
implica que no es necesario utilizar multiplexores voluminosos que harían más complejo el
hardware del computador, pero sin embargo trae aparejado el inconveniente de que se
pueden presentar picos de corriente durante un breve lapso de tiempo (unos pocos
nanosegundos) en que se produce la conmutación de un dispositivo a otro cuyas salidas
están conectadas al bus de datos. Esto se debe a que frecuentemente no se puede
predecir si en el momento de la conmutación las salidas de dos dispositivos queden
simultáneamente conectadas al bus debido a la demora intrínsica de los dispositivos
electrónicos utilizados. 8
La escritura de este artículo estuvo dirigida a estudiantes de Ingeniería de Sistemas e
Ingeniería Electrónica que cursan un nivel intermedio en circuitos digitales y a todos
aquellos profesionales que de una forma u otra están relacionados con esta área y deseen
actualizarse en el diseño de sistemas digitales utilizando como herramienta el lenguaje de
transferencia entre registros.

8
Eilhard Haseloff, “Designing With Logic”, Texas Instruments Incorporated, junio 1997
Lenguaje de Transferencia entre Registros 33

Se recomienda al lector con interés en la investigación explorar el uso de otros lenguajes


de descripción de hardware o HDL (hardware description language), entre los cuales los
dos más populares que son apoyados por el IEEE (Instituto de Ingenieros en Electricidad y
Electrónica) son el VHDL y el Verilog.
VHDL es un lenguaje cuyo uso exige el Departamento de Defensa de Estados Unidos y
que usualmente usaban los contratistas de esa dependencia, aunque ahora se le usa
comercialmente y en investigación en varias universidades.
Verilog por su parte es un lenguaje más fácil de aprender. Fué promovido inicialmente por
una compañía llamada Cadence Data Systems, pero esta compañía transfirió el control de
este lenguaje a un consorcio de empresas y universidades denominado Open Verilog
International.
Finalmente, deseo agradecer a John Guerrero, estudiante de 70 semestre de Ingeniería
Electrónica por su interés y dedicación en la revisión del diseño del computador
presentado en este artículo y en la simulación del mismo en un PC con el programa de
simulación Proteus, obteniendo una correcta operación del computador diseñado.

20. BIBLIOGRAFÍA
1. Texas Instruments, página web: www.ti.com
2. Alberto Cuervo G, “Elementos de Microprogramación”, revista Ingenium no 5 de
la Universidad Santiago de Cali
3. Alberto Cuervo G, “Circuitos Digitales II”, Plataforma Virtual de la Universidad
Santiago de Cali.
4. Alberto Cuervo G, “Circuitos Digitales I: Registros, Contadores y Memoria RAM”,
Plataforma Virtual de la Universidad Santiago de Cali
5. Alberto Cuervo G, “ Circuitos Digitales I: Multiplexor”, Plataforma Virtual de la
Universidad Santiago de Cali
6. Alberto Cuervo G., “Circuitos Digitales I: Decodificadores y Sumadores”,
Plataforma Virtual de la Universidad Santiago de Cali
7. Kenneth L. Short, “Microprocessors and Programmed Logic”, 2ª ed, Prentice-
Hall, New Jersey
8. Eilhard Haseloff, “Designing with Logic”, Texas Instruments Incorporated, junio
1997
Lenguaje de Transferencia entre Registros 34
Lenguaje de Transferencia entre Registros 35