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í: BA
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:BA
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)
AA+1
Otro operador disponible es & (concatenación) [Link] 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=AB 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=AB 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=AB
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=AB 01000
F=AB 01010
F=AB 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 [Link] ;
-- 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 [Link] ;
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 ;