Está en la página 1de 86

DISEÑO RTL DE PROCESADORES

ARITMÉTICOS

MICROELECTRÓNICA

IE. MSc. José Armando Becerra Vargas


REQUISITOS DEL CURSO

Para abordar temas de diseño jerárquico, descripción a nivel RTL y diseño de


procesadores aritméticos en general, el estudiante debe tener conocimientos de
los siguientes temas:

1. Análisis y síntesis de sistemas combinacionales; lógica cableada, Lógica


modular y descripción en VHDL de sistemas combinacionales.
2. Análisis y síntesis de sistemas secuenciales; Máquinas de estado de Mealy y
Moore, Diseño de alto nivel y descripción en VHDL de sistemas secuenciales.
3. Conocimiento básico de arquitectura de computadores; Funcionamiento de
una ALU, sistemas que realizan operaciones, Registros, Contadores,
Memorias RAM y ROM, descripción en VHDL de sistemas complejos.
4. Manejo adecuado de las herramientas EDA. Para el caso específico,
conocimiento, destreza y manejo del software ISE FOUNDATION de XILINX.
CONSIDERACIONES GENERALES DE UN SISTEMA DE
TRANSFERENCIA DE REGISTROS

Los componentes básicos de este método son aquellos que describen un sistema digital a
partir del nivel operacional. La operación de un sistema digital se describe de mejor
manera especificando:
1. El conjunto de registros en el sistema y sus funciones.
2. La información en código binario almacenada en los registros.
3. Las operaciones realizadas a partir de la información almacenada en los registros.
4. Las funciones de control que inician la secuencia de operaciones.
Estos cuatro componentes forman la base del método de lógica de transferencia entre
registros para describir sistemas digitales.
Un registro como se define en la notación de lógica de transferencia entre registros, no
solamente implica un registro en general, sino que abarca todos los otros tipos de registros,
tales como registros de desplazamiento, contadores y unidades de memoria. Un contador
se considera como un registro cuya función es incrementar en 1 la información almacenada
en él. Una unidad de memoria se considera como una colección de registros de
almacenamiento donde se va a almacenar la información. Un Flip-Flop por si solo se toma
como un registro de 1 bit, los Flip-Flop y las compuertas asociadas de cualquier circuito
secuencia se llaman registro.
CONSIDERACIONES GENERALES DE UN SISTEMA DE
TRANSFERENCIA DE REGISTROS

La información binaria almacenada en los registros podría ser números binarios, números
decimales codificados en binario, caracteres alfanuméricos, control de información ó
cualquier información binaria codificada. Las operaciones que se realizan mediante los
datos almacenados en los registros, depende del tipo de datos que se encuentren. Los
números se manipulan con operaciones aritméticas, mientras que el control de
información se manipula por lo general con operaciones lógicas tales como activar o borrar
bits del registro.

Las operaciones realizadas con los datos almacenados en los registros, se llaman
microoperaciones. Una microoperación es una operación elemental que puede ser
realizada en paralelo durante un periodo de pulso de reloj. El resultado de la operación
puede reemplazar la información binaria previa de un registro o puede ser transferida a
otro registro.

Ejemplos de microoperaciones son: Desplazar, contar, sumar, borrar y cargar.


CONSIDERACIONES GENERALES DE UN SISTEMA DE
TRANSFERENCIA DE REGISTROS

Las microoperaciones especifican las operaciones elementales que se realizan con la


información almacenada en los registros. Los tipos de microoperaciones encontradas más
a menudo en los sistemas digitales pueden clasificarse en cuatro categorías:
1. Microoperaciones de transferencia entre registros que no cambian el contenido de la
información cuando la información binaria se mueve de un registro a otro.
2. Las microoperaciones aritméticas realizan aritmética con los números almacenados en
los registros.
3. Microoperaciones lógicas realizan operaciones tales como la AND y OR con el par de
bits individuales almacenados en los registros.
4. Las microoperaciones de desplazamiento especifican operaciones para los registros de
desplazamiento.
ESTRUCTURA GENERAL DE UN SISTEMA DE
TRANSFERENCIA DE REGISTROS

Diagrama de GLUSHKOV
NIVEL DE TRANSFERENCIA ENTRE REGISTROS

El comportamiento de un sistema digital a nivel de transferencia de registros


se puede definir mediante un conjunto de operaciones O1 ,O2 , O3 , … On
realizadas sobre diferentes datos externos o internos.

Cada una de estas operaciones elementales se lleva a cabo mediante


transferencias entre registros cuya forma mas general puede ser:

R[m]  f ( R[i], R[j], R[k], …)


LENGUAJE DE TRANSFERENCIA DE REGISTROS

 Sean A y B dos registros, la operación mas habitual es transferir el


contenido de un registro a otro, se expresa así: BA

 En caso de necesitar saber el número o posición de los bits


transferidos se indica de la siguiente manera: B[7-0]  A[15-8]

 Normalmente la transferencia está controlada mediante una señal


de habilitación E (enable), se suele expresar de la siguiente forma:
E:BA

 La señal de habilitación puede ser mas compleja, por ejemplo:


Si x = 0 y t = 1  B A
En otro caso  B  C
LENGUAJE DE TRANSFERENCIA DE REGISTROS

Los registros pueden ser objeto de las operaciones aritméticas y


lógicas habituales, así tendremos:

D  A B
LSR (A)
ASR (A)
AA+1

Otro operador disponible es & (concatenación) p.ej LSR (A&B)


LENGUAJE DE TRANSFERENCIA DE REGISTROS

Las transferencias de datos entre registros y memoria se pueden


tratar como casos particulares del caso anterior donde tendremos dos
operaciones gobernadas por las señales de control R (lectura) y W
(escritura) y usando los registros MAR y MBR con la notación habitual
tendremos:
MAR: Memory Address Register
R: MBR  M((MAR)) MBR: Memory Buffer Register
W: M((MAR))  MBR MDR: Memory Data Register

Por último las transferencias entre buses y registros se escriben de


forma similar:

A  Inbus [8]
Outbus [8]  A
OPERACIONES DE TRANSFERENCIA

Identificación de Registros en operaciones de transferencia:

OPERACIÓN DESCRIPCIÓN

R2  R1 : El contenido de R1 se transfiere a R2
OPERACIONES DE TRANSFERENCIA

Operación condicional:

if ( K1  1) then ( R 2  R1)

Notación de transferencia entre registros:

K1: R2  R1
OPERACIONES DE TRANSFERENCIA

Símbolos usados en el lenguaje de transferencia de Registros:

SÍMBOLO DESCRIPCIÓN EJEMPLO

Letras y/o Letras y Números Denota un Registro AR, R2, DR, IR

Paréntesis Denota parte de un Registro R2(1), R2(7:0), AR(L)

Flecha Denota Transferencia de Datos R2  R1

Coma Separa operaciones simultaneas R1  R2, R2  R0

Paréntesis cuadrados Especifica una dirección de memoria DR  M[MAR]


OPERACIONES DE TRANSFERENCIA

Ejemplo de Micro-operaciones Aritméticas:

DESIGNACIÓN SIMBÓLICA DESCRIPCIÓN

R0  R1 + R2 El contenido de R1 más R2 se transfiere a R0

R2  /R2 Complemento a uno del contenido de R2 se carga en R2.

R2  /R2 + 1 Complemento a dos del contenido de R2 se carga en R2.

R0  R1 + /R2 + 1 R1 más el complemento a dos de R2 se transfiere a R0 (Substracción o Resta)

R1  R1 + 1 Incrementa el contenido de R1 (Contador ascendente)

R1  R1 - 1 Decrementa el contenido de R1 (Contador descendente)


OPERACIONES DE TRANSFERENCIA

Implementación de las operaciones de transferencia:

___
X  K1 : R1  R1  R2
___
X  K1 : R1  R1  R 2 1
OPERACIONES DE TRANSFERENCIA

Micro-operaciones Lógicas:
DESIGNACIÓN SIMBÓLICA DESCRIPCIÓN

R0  /R1 Operación Lógica NOT bit a bit (Complemento a uno)

R0  R1 L R2 Operación Lógica AND bit a bit (Clarear bits)

R0  R1 V R2 Operación Lógica OR bit a bit (Poner bits)

R0  R1  R2 Operación Lógica XOR bit a bit (Complementa bits)

Ejemplo de operaciones de desplazamiento:


TIPO DESIGNACIÓN SIMBÓLICA FUENTE R2 DESTINACIÓN DESPUÉS DEL CORRIMIENTO R1

SHIFT LEFT R1  sl R2 10011110 00111100


SHIFT RIGHT R1  sr R2 11100101 01110010
TRANSFERENCIA UTILIZANDO MULTIPLEXORES

Ejemplo: Implementación de la operación condicional múltiple.


___
K1 : R0  R1, K1 K 2 : R0  R2
TRANSFERENCIA UTILIZANDO MULTIPLEXORES

Circuito detallado de la implementación de: K1 : R0  R1, K1' K 2 : R0  R 2


TRANSFERENCIA UTILIZANDO MULTIPLEXORES

Multiplexores dedicados Un solo Bus


TRANSFERENCIA UTILIZANDO MULTIPLEXORES

SELECT CARGA
TRANSFERENCIA DE
REGISTRO
S0 S1 L2 L1 L0

RO  R2 1 0 0 0 1

RO  R1, R2  R1 0 1 1 0 1

RO  R1, R1  R0 IMPOSIBLE

Ejemplo de Transferencia de Registros


utilizando una configuración de un solo BUS.
TIPOS DE BUSES

BUS Multiplexado BUS Tri estado con


Registros bidireccionales
TIPOS DE BUSES

Funcionamiento de un Registro Bidireccional:


TIPOS DE BUSES – ESTRUCTURA CON MEMORIA

Conexión de una Memoria al Bus de Datos y al Bus de Direcciones:


UNIDAD DE DATOS

Conjunto e Registros
(RTL)

Unidad Funcional
(Operaciones)
UNIDAD FUNCIONAL (ALU)

Unidad Aritmético-Lógica (ALU)


ESTRUCTURA COMPLETA DE UNA ALU

UNIDAD LÓGICA
UNIDAD ARITMÉTICA
CICLO DE MICRO-OPERACIONES DE UNA ALU

Tabla de Funciones
Select Input G = A + Y + Cin
S1 S0 Y Cin = 0 Cin = 1
0 0 Todo 0's G = A (Transferencia) G = A + 1 (Incrementa)
0 1 B G = A + B (Adición) G=A+B+1
1 0 /B G = A + /B G = A + /B + 1 (Substracción)
1 1 Todo 1's G = A - 1 (Decrementa) G = A (Transferencia)

INPUTS OUTPUT

S1 S0 Bi Yi

0 0 0 0
Yi = 0
0 0 1 0

0 1 0 0
Yi = Bi
0 1 1 1

1 0 0 1
Yi = /Bi

Yi  Bi  S 0  / Bi  S1
1 0 1 0

1 1 0 1
Yi = 1
1 1 1 1

Tabla de Verdad Mapa de Karnaugh


UNIDAD ARITMÉTICA DE CUATRO BITs

Se basa en un diseño
totalmente combinacional,
los bloques FA, se refieren
a sumadores completos de
un bit
UNIDAD LÓGICA

TABLA FUNCIONAL CIRCUITO LÓGICO


S1 S0 OUTPUT OPERACIÓN
0 0 G=ALB AND
0 1 G=AVB OR
1 0 G=AB XOR
1 1 G = /A NOT

El Multiplexor selecciona la función


lógica deseada. Pueden existir más
de cuatro funciones lógicas, lo que
requiere un MUX de mayor
capacidad.
UNA ETAPA DE LA ALU
TABLA FUNCIONAL DE LA ALU

SELECCIÓN DE OPERACIÓN
OPERACIÓN FUNCIÓN
S2 S1 S0 Cin

0 0 0 0 G=A Transfer A

0 0 0 1 G=A+1 Increment A

0 0 1 0 G=A+B Addition

0 0 1 1 G=A+B+1 Add with Carry input of 1

0 1 0 0 G = A + /B A más complemento a uno de B

0 1 0 1 G = A + /B + 1 Substraction

0 1 1 0 G=A-1 Decrement A

0 1 1 1 G=A Transfer A

1 0 0 X G=ALB AND

1 0 1 X G=AVB OR

1 1 0 X G=AB XOR

1 1 1 X G = /A NOT (Complemento a uno)


DESPLAZADORES (SHIFTERS)
DESPLAZADOR ROTATORIO

Tabla Funcional
SELECCIÓN OUTPUT OPERACIÓN

S1 S0 Y3 Y2 Y1 Y0

0 0 D3 D2 D1 D0 NO ROTAR

0 1 D2 D1 D0 D3 ROTA UNA POSICIÓN

1 0 D1 D0 D3 D2 ROTA DOS POSICIONES

1 1 D0 D3 D2 D1 ROTA TRES POSICIONES

Circuito Lógico
DIAGRAMA GENERAL DE UNA UNIDAD DE DATOS

La unidad de datos presentada en la


figura, tiene una arquitectura tipo
Hardvard (Bus de datos e instrucciones
separados). El arreglo de registros
permite cargar, almacenar y operar
fácilmente los datos que se desean
procesar.

MB: MUX BUS


MD: MUX DATA
FS: FUNCTION SELECT
V: OVERFLOW
C: CARRY
N: NEGATIVE
Z: ZERO
TABLA PARA LA UNIDAD FUNCIONAL

SELECCIÓN MICRO-OPERACIÓN
FS MF G H
00000 0 0000 00 F=A
00001 0 0001 00 F=A+1
00010 0 0010 00 F=A+B
00011 0 0011 00 F=A+B+1
00100 0 0100 01 F = A + B’
00101 0 0101 01 F = A + B’ + 1
00110 0 0110 01 F=A–1
00111 0 0111 01 F=A
01000 0 1000 00 F=ALB
01010 0 1010 10 F=AVB
01100 0 1100 10 F=AB
01110 0 1110 10 F = A’
10000 1 0000 00 F=B
10100 1 0100 01 F = sr B
11000 1 1000 10 F = sl B
DETALLE DE LA UNIDAD FUNCIONAL
VARIABLES DE CONTROL PARA LA UNIDAD DE
DATOS
CODIFICACIÓN DEL VECTOR DE CONTROL PARA LA
UNIDAD DE DATOS
DA, AA, BA MB FS MD RW

Function Code Function Code Function Code Function Code Function Code

R0 000 Register 0 F=A 00000 Function 0 No Write 0


R1 001 Constant 1 F = A+1 00001 Data In 1 Write 1
R2 010 F = A+B 00010
R3 011 F = A+B+1 00011
R4 100 F = A+B’ 00100
R5 101 F = A+B’+1 00101
R6 110 F = A-1 00110
R7 111 F=A 00111
F=AB 01000
F=AB 01010
F=AB 01100
F = A’ 01110
F=B 10000
F = sr B 10100
F = sl B 11000
EJEMPLOS DE MICROOPERACIONES

Notación Simbólica
Microoperación DA AA BA MB FS MD RW

R1  R2+R3’+1 R1 R2 R3 Register F = A+B’+1 Function Write


R4  sl R6 R4 -- R6 Register F = sl B Function Write
R7  R7+1 R7 R7 -- Register F = A+1 Function Write
R1  R0+2 R1 R0 .. Constant F = A+B Function Write
Data out  R3 -- -- R3 Register -- -- No Write
R4  Data in R4 -- -- -- -- Data in Write
R5  0 R5 R0 R0 Register F = A B Function Write

Codificación Binaria
Microoperación DA AA BA MB FS MD RW

R1  R2 - R3 001 010 011 0 00101 0 1


R4  sl R6 100 000 110 0 11000 0 1
R7  R7+1 111 111 000 0 00001 0 1
R1  R0+2 001 000 000 1 00010 0 1
Data out  R3 000 000 011 0 00000 0 0
R4  Data in 100 000 000 0 00000 1 1
R5  0 101 000 000 0 01100 0 1
SIMULACIÓN DE LA SECUENCIA DE
MICROOPERACIONES

R2  R2 – R3
R4  sl R6
R7  R7 + 1
R1  R0 + 2
Data out R3
R4  Data in
R5  0
INTRODUCCIÓN A LA ARQUITECTURA DE
PROCESADORES

TAREAS DE LA CPU

 Captar Instrucción: Leer instrucción de la memoria.


 Interpretar la instrucción: Decodificar la instrucción y
determinar acciones a realizar.
 Captar datos: Leer datos de memoria y/o E/S.
 Procesar datos: realizar operación aritmética y/o lógica.
 Escribir datos: llevar datos a memoria o E/S.

Para realizar estas operaciones, la CPU requiere


memoria interna
INTRODUCCIÓN A LA ARQUITECTURA DE
PROCESADORES
COMPONENTES DEL PROCESADOR
INTRODUCCIÓN A LA ARQUITECTURA DE
PROCESADORES
ESTRUCTURA INTERNA DE UNA CPU
INTRODUCCIÓN A LA ARQUITECTURA DE
PROCESADORES
ORGANIZACIÓN DE LOS REGISTROS
La memoria para almacenamiento interno posee REGISTROS (nivel más alto en
jerarquía de memoria), existen dos tipos de registros:

1. Registros Visibles para el usuario: El usuario puede usarlos para minimizar


los accesos a memoria.
2. Registros de control y de estado: Son usados por la unidad de control y por
programas privilegiados para controlar la ejecución de un programa.

REGISTROS DE USO GENERAL


 Como su nombre lo dice, pueden ser utilizados para almacenar cualquier
información
 Puede haber excepciones: Ej. Registros para almacenar punto flotante,
punteros de pila, etc.
 Algunas veces pueden almacenar direcciones, en otros, existen registros
para datos y otros para direcciones
INTRODUCCIÓN A LA ARQUITECTURA DE
PROCESADORES
EJEMPLO DE REGISTROS DE DIRECCIONES

 Punteros de segmento: Usados en memorias segmentadas, almacenan la


dirección base del segmento
 Registros índices: Usado en direccionamiento indexado, pueden ser
autoindexados.
 Puntero de pila: Mantiene la dirección de la cabeza de la pila.

CÓDIGOS DE CONDICIÓN
 También llamados Flags
 Son bits fijados por la CPU como resultado de una operación
 Los códigos de condición se reúnen en uno o más registros, generalmente
forman parte de un registro de control
 Generalmente los bits pueden ser leídos por referencia implícita, pero no
pueden ser modificados
INTRODUCCIÓN A LA ARQUITECTURA DE
PROCESADORES
REGISTROS DE CONTROL Y DE ESTADO
Son esenciales cuatro registros para la ejecución de una instrucción:
 Contador del Programa (PC): Dirección de la próxima instrucción a ejecutar.
 Registro de Instrucción: Instrucción captada mas reciente.
 Registro de Dirección de Memoria: Dirección de una posición de memoria.
 Registro intermedio de memoria: Contiene la palabra leída o a escribir en
memoria.

NOMBRE DE LOS REGISTROS DE CONTROL Y DE ESTADO


 PC = Program Counter: Contiene la dirección de la instrucción a captar.
 IR = Instruction Register: Contiene la última instrucción captada.
 MAR = Memory Address Register: Contiene la dirección de una posición de
memoria.
 MBR = Memory Buffer Register: Contiene la palabra de datos a escribir en
memoria, o la palabra leída más reciente.
INTRODUCCIÓN A LA ARQUITECTURA DE
PROCESADORES
PALABRA DE ESTADO DEL PROGRAMA (PSW)
Contiene la siguiente información de estado:

 Signo: Signo del último resultado aritmético


 Cero: Indica si el último resultado fue cero
 Acarreo: Usado en operaciones multipalabra
 Igual: Resultado de una operación lógica es igual
 Desbordamiento: Overflow aritmético
 Interrupciones: Habilitadas/ deshabilitadas
 Supervisor: Estado de la CPU en modo supervisor o usuario
EJEMPLOS DE ORGANIZACIONES DE
MICROPROCESADORES
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR

CICLO DE INSTRUCCIÓN
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
CICLO FETCH (Captación)
Función: Lleva la siguiente instrucción de la memoria a la CPU.
1. El PC tiene la dirección de la siguiente instrucción.
2. El procesador capta la instrucción de la memoria direccionada por el PC.
3. Se incrementa PC en 1.
4. El código de la instrucción se carga en IR.

CICLO DECODE (Decodificación)


Función: Decodifica los bits presentes en IR
1. Interpreta el código de operación.
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
CICLO EXECUTION(Ejecución)
Función: Ejecuta la instrucción
1. Procesador - memoria: Transferencia CPU  Memoria
2. Procesador - I/O: Transferencia CPU  Módulos I/O.
3. Procesamiento de datos: Operaciones aritméticas o lógicas.
4. Control: Cambio de secuencias.
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
Ejemplo:

1. El PC contiene el valor
300. Se carga esta
instrucción en IR (esto
implica el uso de MAR y
MBR)
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
Ejemplo:

2. Los primeros cuatro


bits de IR (“1”) indican
que el acumulador AC se
va a cargar con un dato
de la memoria. Los
restantes 12 bits
especifican la dirección.
(es decir “940”)
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
Ejemplo:

3. El registro PC se
incrementa y se capta la
siguiente instrucción
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
Ejemplo:

4. Los primeros cuatro


bits (“5”) indican que la
instrucción es de suma
entre el acumulador y
una memoria. Los
siguientes 12 bits indican
la dirección de la
memoria (“941”). El
contenido de AC y el de
la posición 941 se suman
y el resultado se
almacena en AC.
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
Ejemplo:

5. El registro PC se
incrementa en 1 y se
capta la siguiente
instrucción.
CICLOS FETCH, DECODE Y EXECUTE DEL
PROCESADOR
Ejemplo:

6. Los primeros cuatro


bits indican (“2”) que el
acumulador se debe
almacenar en una
memoria. Los siguientes
12 bits indican la
dirección de la memoria
(“941”). El contenido de
AC se almacena en la
posición 941.

Se requieren tres ciclos


de instrucción para
ejecutar esta tarea.
CONJUNTO DE INSTRUCCÍONES DEL PROCESADOR

Las instrucciones de una CPU a otra difieren bastante, sin embargo en todas
las CPU se puede encontrar como mínimo el siguiente conjunto de
instrucciones:

1. Instrucciones de transferencia de datos.


2. Instrucciones aritméticas.
3. Instrucciones lógicas.
4. Control de flujo.
5. Entrada / Salida.
ESTRUCTURA DE UN PROCESADOR CON
ARQUITECTURA TIPO HARDVARD
DIAGRAMA DE BLOQUES DE UN PROCESADOR CON
ARQUITECTURA TIPO HARDVARD
DIAGRAMA DE BLOQUES DE UN PROCESADOR CON
ARQUITECTURA TIPO VON NEUMAN
ARQUITECTURA HARVARD vs VON NEUMAN

1. MEMORY: Harvard
dispone de dos tipos de
memoria una para
Instrucciones y otra para
datos; la arquitectura
Von Neuman, comparte
la memoria entre
instrucciones y datos.

2. BUS: Al igual que la


memoria, Harvard
dispone de dos buses
dedicados, uno para
datos y otro para
instrucciones; Von
Neuman comparte el Bus
de instrucciones y Datos.
EJEMPLO DE APLICACIÓN

Para aclarar lo visto, vamos a desarrollar el siguiente ejercicio:

La figura muestra la memoria (MEM) de un sistema: el registro de direcciones (MAR)


puede ser cargado con el contador del programa (PC) o con el puntero de pila (SP), el
registro de datos (MDR) está conectado a un bus de datos internos (IDB), al que también
se conecta el registro [A], y otro externo (EDB) conectado con la memoria.

Se quiere incorporar las dos operaciones de pila: EMPUJAR (PUSH) y EXTRAER (POP)
que consisten respectivamente, en llevar [A] a la pila y en llevar de la pila a [A] (recuerde
que PUSH [A] implica MEM  [A] y SP  SP+1, mientras que POP [A] implica SP  SP–1
y [A]  MEM (SP)). Cuando no hay operación de la pila, el puntero SP apunta a la
primera dirección libre.

Desarrollar la Carta ASM y a partir de ella diseñar adecuadamente la unidad de control


que permita ejecutar las operaciones de PUSH (I1I0 = 00) y POP (I1I0 = 01).

Nota: los códigos I1I0 = 1X están reservados para otras operaciones no definidas en el
enunciado.
EJEMPLO DE APLICACIÓN
SOLUCIÓN AL EJEMPLO DE APLICACIÓN

Según el enunciado, la pila se va llenando desde las direcciones más bajas hasta las más altas. Las dos
operaciones de pila implican direccionar la memoria MEM con la dirección que indica el puntero de pila,
SP. De aquí que, tras apuntar SP a la dirección adecuada, habrá que transferir SP hacia MAR. En ambas
operaciones la transferencia entre MEM y A debe pasar por MDR. Operación PUSH (I1I0 = 00): Como SP
apunta a la dirección vacía, es ahí a donde hay que transferir A y, después, se incrementa SP para que
continúe apuntando a la primera dirección vacía.

MICROOPERACIÓN SEÑALES A ACTIVAR


1. MAR  SP / MDR  A WSP / RA / WI
2. MEM  MDR / SP  SP + 1 CS / W / RE / ISP

Operación POP (I1I0 = 01): Hay que decrementar SP para que apunte a la última dirección llena. Sólo
entonces se lleva SP a MAR para, después, leer de MEM hacia MDR y, de este registro, llevar el dato leído
hacia A.
MICROOPERACIÓN SEÑALES A ACTIVAR
1. SP  SP – 1 DSP
2. MAR  SP WSP
3. MDR  MEM CS / R / WE
4. A  MDR RI / WA
CARTA ASM DEL EJEMPLO

En el desarrollo de la carta ASM


puede verse claramente la rutina
de cada una de las operaciones
solicitadas, también se incluye la
salida hacia otras operaciones
que no son de interés en este
ejemplo. El estado S6 devolverá
el sistema hacia S0 con la señal
de RESET, con las interrupciones
del sistema o simplemente el
siguiente pulso de reloj lo
devolverá.
OTROS EJEMPLOS

1. Bit Counter

2. Shift-and-Add Multiplier
1. BIT COUNTER

Sistema que permite contar el número de ‘1s’ presentes en el Registro A,


guardando el resultado en el Registro B

Pseudo-código para el Bit Counter

B = 0;
while A≠0 do
Se utiliza un lenguaje estándar de
if a0 = 1 then programación para describir el
B = B + 1; algoritmo que se va a utilizar. Luego se
describe como diseño ASM
end if;
Right-shift A;
end while ;
CARTA ASM PARA EL BIT COUNTER

Carta ASM para el diseño del


DATAPATH del contador de bits ‘1’,
describe las micro-operaciones
presentes en el diseño.
DIAGRAMA DE TIEMPOS DEL BIT COUNTER
DISEÑO DEL DATAPATH PARA EL BIT COUNTER
CARTA ASM PARA EL CONTROL DEL BIT COUNTER

Carta ASM para el diseño de la lógica


de control del contador de bits ‘1’.
Obsérvese que las señales utilizadas
son las señales de STATUS.

Z = ‘1’ when A[n] = ‘0’


a0  Bit menos significativo de A
s  Señal de inicio START
Done  Indica que el proceso terminó
LB  Load B, Borra el contador B
LA  Load A, Carga el registro A
EB  Incrementa el contador B
EA  Desplaza A hacia la derecha
CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (1)

-- Descripción en Código VHDL del contador de ‘1s’


-- Declaración de Librerías, cláusula USE

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
LIBRARY work ;
USE work.components.shiftrne ;

-- Declaración de la entidad

ENTITY bitcount IS
PORT(Clock, Resetn : IN STD_LOGIC ;
LA, s : IN STD_LOGIC ;
Data : IN STD_LOGIC_VECTOR(7 DOWNTO 0) ;
B : BUFFER INTEGER RANGE 0 to 8 ;
Done : OUT STD_LOGIC ) ;
END bitcount ;
CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (2)

ARCHITECTURE Behavior OF bitcount IS


TYPE State_type IS ( S1, S2, S3 ) ;
SIGNAL y : State_type ;
SIGNAL A : STD_LOGIC_VECTOR(7 DOWNTO 0) ;
SIGNAL z, EA, LB, EB, low : STD_LOGIC ;
BEGIN
FSM_transitions: PROCESS ( Resetn, Clock )
BEGIN
IF Resetn = '0' THEN
y <= S1 ;
ELSIF (Clock'EVENT AND Clock = '1') THEN
CASE y IS
WHEN S1 =>
IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF ;
WHEN S2 =>
IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF ;
WHEN S3 =>
IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF ;
END CASE ;
END IF ;
END PROCESS ;
CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (3)

FSM_outputs: PROCESS ( y, A(0) )


BEGIN
EA <= '0' ; LB <= '0' ; EB <= '0' ; Done <= '0' ;
CASE y IS
WHEN S1 =>
LB <= '1'
WHEN S2 =>
EA <= '1' ;
IF A(0) = '1' THEN
EB <= '1' ;
ELSE
EB <= '0' ;
END IF ;
WHEN S3 =>
Done <= '1' ;
END CASE ;
END PROCESS ;
CÓDIGO VHDL PARA DESCRIBIR EL BIT COUNTER (4)

-- El DATAPATH es descrito a continuación


upcount: PROCESS ( Resetn, Clock )
BEGIN
IF Resetn = '0' THEN
B <= 0 ;
ELSIF (Clock'EVENT AND Clock = '1') THEN
IF LB = '1' THEN
B <= 0 ;
ELSEIF EB = '1' THEN
B <= B + 1 ;
END IF ;
END IF;
END PROCESS;
low <= '0' ;
ShiftA: shiftrne GENERIC MAP ( N => 8 )
PORT MAP ( Data, LA, EA, low, Clock, A ) ;
z <= '1' WHEN A = "00000000" ELSE '0' ;
END Behavior ;
2. MULTIPLICADOR BINARIO DE n BITS

ALGORITMO PARA LA MULTIPLICACIÓN

Decimal Binaria P = 0;
13 1 1 0 1 Multiplicando
For i = 0 to n – 1 do
x 11 1 0 1 1 Multiplicador
13 1 1 0 1 if bi = 1 then
13 1 1 0 1
P = P + A;
143 0 0 0 0
1 1 0 1 end if;
1 0 0 0 1 1 1 1 Producto
Left-Shift A;
End for;

a. Método manual b. Pseudo - Code


CARTA ASM PARA EL MULTIPLICADOR BINARIO

Carta ASM para el diseño del


DATAPATH del multiplicador
binario, describe las micro-
operaciones presentes en el diseño.
DIAGRAMA DE TIEMPOS PARA EL MULTIPLICADOR
DISEÑO DEL DATAPATH PARA EL MULTIPLICADOR

RA  Shift-Left Register
RB  Shift-Right Register
ADDER  Sumador de 2n bits
MUX  Multiplexor 2:1 de 2n bits
P  Registro genérico de 2n bits
NOR  Compuerta NOR de n entradas
Data P  Resultado de la multiplicación
B0  LSB del registro B
CARTA ASM PARA EL CONTROL DEL MULTIPLICADOR

Carta ASM para el diseño de la lógica


de control del Multiplicador Binario.
Obsérvese que las señales utilizadas
son las señales de STATUS.

Z = ‘1’ when B[n] = ‘0’


b0  Bit menos significativo de B
s  Señal de inicio START
Done  Indica que el proceso terminó
RB  Shift-Right B
RA  Shift-Left A
Psel  Control del MUX
EP  Suma a P el contenido de A
CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (1)

LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
USE ieee.std_logic_unsigned.all ;
USE work.components.all ;

ENTITY multiply IS
GENERIC ( N : INTEGER := 8; NN : INTEGER := 16 ) ;
PORT ( Clock : IN STD_LOGIC ;
Resetn : IN STD_LOGIC ;
LA, LB, s : IN STD_LOGIC ;
DataA : IN STD_LOGIC_VECTOR(N–1 DOWNTO 0) ;
DataB : IN STD_LOGIC_VECTOR(N–1 DOWNTO 0) ;
P : BUFFER STD_LOGIC_VECTOR(N–1 DOWNTO 0) ;
Done : OUT STD_LOGIC ) ;
END multiply ;
CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2)

ARCHITECTURE Behavior OF multiply IS


TYPE State_type IS ( S1, S2, S3 ) ;
SIGNAL y : State_type ;
SIGNAL Psel, z, EA, EB, EP, Zero : STD_LOGIC ;
SIGNAL B, N_Zeros : STD_LOGIC_VECTOR(N–1 DOWNTO 0) ;
SIGNAL A, Ain, DataP, Sum : STD_LOGIC_VECTOR(NN–1 DOWNTO 0) ;
BEGIN
FSM_transitions: PROCESS ( Resetn, Clock )
BEGIN
IF Resetn = '0’ THEN
y <= S1 ;
ELSIF (Clock'EVENT AND Clock = '1') THEN
CASE y IS
WHEN S1 =>
IF s = '0' THEN y <= S1 ; ELSE y <= S2 ; END IF;
WHEN S2 =>
IF z = '0' THEN y <= S2 ; ELSE y <= S3 ; END IF;
WHEN S3 =>
IF s = '1' THEN y <= S3 ; ELSE y <= S1 ; END IF;
END CASE ;
END IF ;
END PROCESS;
CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (2)

FSM_outputs: PROCESS ( y, s, B(0) )


BEGIN
EP <= '0' ; EA <= '0' ; EB <= '0' ; Done <= '0' ; Psel <= '0';
CASE y IS
WHEN S1 =>
EP <= '1‘ ;
WHEN S2 =>
EA <= '1' ; EB <= '1' ; Psel <= '1‘ ;
IF B(0) = '1' THEN
EP <= '1' ;
ELSE
EP <= '0' ;
END IF ;
WHEN S3 =>
Done <= '1‘ ;
END CASE ;
END PROCESS ;
CÓDIGO VHDL PARA DESCRIBIR EL MULTIPLICADOR (3)

- - Define the datapath circuit


Zero <= '0' ;
N_Zeros <= (OTHERS => '0' ) ;
Ain <= N_Zeros & DataA ;

ShiftA: shiftlne GENERIC MAP ( N => NN )


PORT MAP ( Ain, LA, EA, Zero, Clock, A ) ;
ShiftB: shiftrne GENERIC MAP ( N => N )
PORT MAP ( DataB, LB, EB, Zero, Clock, B ) ;

z <= '1' WHEN B = N_Zeros ELSE '0' ;


Sum <= A + P ;

- - Define the 2n 2-to-1 multiplexers for DataP


GenMUX: FOR i IN 0 TO NN–1 GENERATE
Muxi: mux2to1 PORT MAP ( Zero, Sum(i), Psel, DataP(i) ) ;
END GENERATE;

RegP: regne GENERIC MAP ( N => NN )


PORT MAP ( DataP, Resetn, EP, Clock, P ) ;
END Behavior ;