You are on page 1of 23

UNIVERSIDAD AUTNOMA

DE BAJA CALIFORNIA
Facultad de Ciencias Qumicas e Ingeniera

Organizacin de Computadoras y
Lenguaje Ensamblador
Prctica 3: Microprocesador de 4 bits
(Unidad de memoria, Unidad de Ejecucin y Unidad de Control)

Maestro:
ngel Humberto Corral Domnguez
Alumno: Fecha de Entrega:
1200271 Gutirrez Nez Jos Armando 15-Octubre-2015
Pgina 1 de 23
UNIDAD DE CONTROL (UC)

La Unidad de Control es la parte del procesador emite seales de control externas al


procesador para producir el intercambio de datos con la memoria y los mdulos de E/S. Tambin
emite seales de control internas al procesador para transferir datos entre registros, hacer que la
ALU ejecute una funcin correcta, y regular otras operaciones internas. La entrada a la Unidad de
Control est compuesta por el registro de instrucciones, los indicadores de estado, y ciertas
seales de control de fuentes externas (por ejemplo., seales de interrupcin).

La Unidad de Control proporciona seales que activan las microoperaciones de la ruta de datos
para llevar a cabo tareas concretas. Tambin determina la secuencia en la que se realizan las
diversas operaciones.

La Unidad de Control, que genera las seales para la secuencia de las microoperaciones, es un
circuito secuencial cuyos estados gobiernan las seales de control del sistema. En cualquier
instante, el estado actual de un circuito secuencial activa un determinado conjunto de
microoperaciones ya previsto de antemano. Usando las condiciones de estado y las entradas de
control, la unidad de control determina su prximo estado. El circuito digital que acta como
controlador proporciona una secuencia de seales para la activacin de las microoperaciones y, a
su vez determina su siguiente estado.

En un sistema programable, parte de la entrada al procesador est formada por una secuencia
de instrucciones. Cada instruccin especifica la operacin que el sistema va a ejecutar, que
operandos va a usar, dnde colocar los resultados de la operacin. En los sistemas programables
se suelen almacenar las instrucciones en una memoria RAM o ROM. Para ejecutar una secuencia
de instrucciones es necesario proporcionar la direccin de memoria que va a ser ejecutada. Esta
direccin parte de un registro llamado contador de programa, PC, (Program Counter). Tambin se
requieres que dicho pese cuente con la posibilidad de tener una carga en paralelo para poder
cambiar la secuencia de operaciones.

Microoperaciones

El prefijo micro alude al hecho de que cada paso es muy sencillo y hace muy poco, la ejecucin
de un programa consiste en la ejecucin secuencial de instrucciones. Cada instruccin se ejecuta
durante un ciclo de instrucciones compuesto por subciclos ms cortos.

Pgina 2 de 23
Este procesador es para operaciones de 4 bits, contiene 4 registros y opera con instrucciones
de 10 bits, y una memoria de 32 instrucciones mximo.

Tipos de Operaciones
Instrucciones de Registro

9 8 7 6 5 4 3 2 1 0
O P C C T T S D

CC Ci
OP TT Funcin
00 0
00 00 [S] + Ci [D]
01 1
01 00 [S] + [D] + Ci [D]
10 Ci
10 00 [D] [S] - Ci [D]
11 Ci
[S] = Fuente (Source)
[D] = Destino (Destiny)
Ci = Acarreo (Carry)
Para las instrucciones bsica TT siempre ser 00

Ejemplo:

ADD R0, R1 ; Sumar a R0 el contenido de R1


[R0] + [R1] + 0 [R0]

9 8 7 6 5 4 3 2 1 0
La instruccin quedara con el siguiente OPCODE 0 1 0 0 0 0 0 1 0 0

Instrucciones de Salto

9 8 7 6 5 4 3 2 1 0
1 1 C C F A D D R E

Cuando la computadora ejecuta un programa, toma las instrucciones en forma secuencial de la


unidad de memoria. En algunos casos se requiere que la siguiente instruccin no sea la que est
en secuencia, para esto se utilizan este tipo de instrucciones. Depende del valor de CC es el tipo
de salto que se dar.

Pgina 3 de 23
CC F
01 X JMP ADDRE Salto incondicional a Address
10 0 JC ADDRE Si C=1 Salta a Address
11 0 JNC ADDRE Si C=0 Salta a Address
10 1 JZ ADDRE Si Z=1 Salta a Address
11 1 JNZ ADDRE Si Z=0 Salta a Address

Instrucciones de Entrada/Salida

9 8 7 6 5 4 3 2 1 0
1 1 0 0 0 0 L H D

La instruccin de Entrada y salida de datos se obtiene siempre que OP=11, CC=00 y TT=00
Si L=1 indica que es de CARGA, de lo contrario es SALIDA de datos y si H=1 indica que el
procesador se detendr y este no deber continuar hasta que se presione el interruptor ENTER.

Todas estas Operaciones se han dividido en pequeas problemas, aplicando el concepto bsico de
la estrategia de programacin estructurada (Divide y venceras), utilizando un algoritmo llamado
Top Level se puede dividir la unidad de control en pequeas entidades dedicadas a ciertas tareas
especficas, y utilizando la herramienta de ASM (Mquina de Estados Algortmica) en este caso se
dividieron en 5 microoperaciones y un subcircuito maestro que se encarga de activar o desactivar
las entidades de las microoperaciones. Todos han sido implementados con VHDL en gal22v10.

Microoperaciones utilizadas en este diseo:

Circuitos que realiza lectura y escritura del Banco de Registros.


Circuito que controla las operaciones de la ALU.
Circuito para operaciones de Saltos puede ser salto condicional o incondicional
Circuito para operaciones de Entrada/Salida
Circuito decodificador el cual se encarga de habilitar o deshabilitar las otras entidades de
acuerdo al OPCODE

Pgina 4 de 23
DIAGRAMA DEL PROCESADOR

CIRCUITO SIMULADO EN ISIS PROTEUS

Pgina 5 de 23
Diseo del contador de 5 bits:
Ya que se requiere un contador de 5 bits con carga en paralelo y el contador que se tiene
disponible comercial es de 4 bits (74LS193), existen dos alternativas

Configurar dos contadores de 4 bits para obtener uno de 5 bits


Implementacin con VHDL

En este caso se implement con VHDL, teniendo como base origen la tabla de verdad del 74LS193
de su datasheet.

--Codigo para un contador de 5 bits


library ieee;
use ieee.std_logic_1164.all;
use work.std_arith.all;
entity contador is port (
D: in std_logic_vector(4 downto 0);
carga, rst, clk: in std_logic;
Q: out std_logic_vector(4 downto 0));
attribute pin_numbers of contador: entity is
"D(0):2 D(1):3 D(2):4 D(3):5 D(4):6 carga:7 rst:8 Q(0):23 Q(1):22 Q(2):21 Q(3):20 Q(4):19 ";
end contador;

architecture arq_contador of contador is


begin
process (clk, rst, carga) begin
if(rst='1') then
Q<="00000";
elsif (clk'event and clk = '1') then
if(carga='1') then
Q <= D;
else
Q <= Q+1;
end if;
end if;
end process;
end arq_contador;

Pgina 6 de 23
Diseo del Registro de Instruccin (IR)

Dado que las instrucciones son de 10 bits, y el registro comercial (74LS193) es de 4 bits se vuelven
a tener dos alternativas
Configurar 3 registros para obtener palabras de 10 bits
Implementacin en VHDL

--Cdigo para el registro de Instruccin (IR)


LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY ent_ir IS PORT(


RST, clk: IN std_logic;
D: IN std_logic_vector (9 DOWNTO 0);
Q: OUT std_logic_vector(9 DOWNTO 0));
ATTRIBUTE pin_numbers OF ent_ir: ENTITY IS
"D(0):2 D(1):3 D(2):4 D(3):5 D(4):6 D(5):7 D(6):8 D(7):9 D(8):10 D(9):11 RST:13 "
& "Q(0):23 Q(1):22 Q(2):21 Q(3):20 Q(4):19 Q(5):18 Q(6):17 Q(7):16 Q(8):15 Q(9):14";
END ent_ir;

ARCHITECTURE arq_ir OF ent_ir IS


BEGIN
PROCESS (RST, clk) BEGIN
IF RST = '1' THEN
Q <= "0000000000";
ELSIF (clk'event and clk='1') THEN
Q <= D;
END IF;
END PROCESS;
END arq_ir;

Pgina 7 de 23
Diseo de La Unidad de Control

Subcircuitos dentro de La Unidad de Control

Pgina 8 de 23
Diseo del circuito que realiza lectura del Banco de Registros y graba los registros RS y/o RD.

ASM de la microoperacin

Explicacin
Si la bandera de activacin est APAGADA (ACT=0)
Regresa a S0 (S0 realiza siempre un reset a las terminales de salida)
si no
S1: Al vector A se le asigna el contenido de los bits S, para seleccionar la localidad a leer
S2: Habilita la lectura del Banco de Registros (74LS670)
S3: Da el pulso de reloj del registro RS
Si OP=00 (Pregunta si la operacin es de un solo registro)
S6: Deshabilita la lectura del banco
S7: Prende la bandera FIN=1 para indicar que el proceso a terminado y regresa a S0
si no
S4: Asigna al vector A el contenido del vector D, ya que significa que la operacin es de dos registros
S5: Da el pulso de reloj del registro RD
S7: Prende la bandera FIN=1 para indicar que el proceso a terminado y regresa a S0
Termina Condicin
Termina Condicin

VHDL

--Cdigo para leer el Banco de Registros


--y grabar en los registros RS y RD
library ieee;
use ieee.std_logic_1164.all;

entity ctrl_write_reg is port (


ENABLED, clk, RST: in std_logic;
OP, S, D: in std_logic_vector(1 downto 0);
RE, RS, RD, FIN: out std_logic;
A: out std_logic_vector(1 downto 0));
attribute pin_numbers of ctrl_write_reg: entity is
"D(0):2 D(1):3 S(0):4 S(1):5 OP(0):6 OP(1):7 ENABLED:8, RST:9 A(0):23 A(1):22 RE:21 RS:20 RD:19 FIN:18 ";
end ctrl_write_reg;

Pgina 9 de 23
architecture arq_ctrl_write_reg of ctrl_write_reg is
type estados is(S0, S1, S2, S3, S4, S5, S6, S7);
signal edo_presente, edo_futuro: estados;
begin
senial_control: process(edo_presente, ENABLED,RST,S, OP,D) begin
if RST = '1' then
edo_futuro <= S0;
A <= "00";
RE <= '1';
RS <= '0';
RD <= '0';
FIN <= '0';
else
case edo_presente is
when S0 => A <= "00";
RE <= '1';
RS <= '0';
RD <= '0';
FIN <= '0';
if ENABLED = '1' then
edo_futuro <= S1;
else
edo_futuro <= S0;
end if;
when S1 =>
A <= S;
edo_futuro <= S2;
when S2 =>
RE <= '0';
edo_futuro <= S3;
when S3 =>
RS <= '1';
if OP = "00" then
edo_futuro <= S6;
else
edo_futuro <= S4;
end if;
when S4 => A <= D;
edo_futuro <= S5;
when S5 => RD <= '1';
edo_futuro <= S7;
when S6 => RE <= '1';
edo_futuro <= S7;
when S7 => FIN <= '1';
edo_futuro <= S0;
end case;
end if;
end process senial_control;

proceso_clk: process(clk,RST) begin


if(clk'event and clk='1')then
if RST = '0' then
edo_presente<=edo_futuro;
else
null;
end if;
end if;
end process proceso_clk;
end arq_ctrl_write_reg;

Pgina 10 de 23
Diseo del circuito que graba en Banco de Registros.

ASM de la microoperacin

Explicacin
Si la bandera de activacin est APAGADA (ACT=0)
Regresa a S0 (S0 realiza siempre un reset a las terminales de salida)
si no
S1: Al vector A se le asigna el contenido de los bits D, para seleccionar la localidad a ESCRIBIR
S2: Habilita la escritura del Banco de Registros (74LS670)
S3: Deshabilita la escritura del Banco de Registros (74LS670)
S4: Habilita el RST de los registros [RS] y [RD]
S5: Deshabilita el RST de los registros [RS] y [RD]
S6: Prende la Bandera FIN = 1 para indicar que el proceso a terminado y regresa a S0
Termina Condicin

--Cdigo para grabar la salida de la ALU (F) en el Banco de Registros


library ieee;
use ieee.std_logic_1164.all;

entity ctrl_alu_banco is port (


clk, ACTIVO, RST: in std_logic;
D: in std_logic_vector (1 downto 0);
W, CLR, FIN: out std_logic;
A: out std_logic_vector (1 downto 0));
attribute pin_numbers of ctrl_alu_banco: entity is
"ACTIVO:2 D(0):3 D(1):4 RST:5 A(0):23 A(1):22 W:21 CLR:20 FIN:19 ";
end ctrl_alu_banco;

architecture arq_ctrl_alu_banco of ctrl_alu_banco is


type estados is(S0, S1, S2, S3, S4, S5, S6);
signal edo_presente, edo_futuro: estados;
begin
senial_control: process (edo_presente, ACTIVO, RST, D)
begin
if RST = '1' then
Pgina 11 de 23
edo_futuro <= S0;
A <= "00";
W <= '1';
CLR <= '1';
FIN <= '0';
else
case edo_presente is
when S0 => A <= "00";
W <= '1';
CLR <= '1';
FIN <= '0';
if ACTIVO = '1' then
edo_futuro <= S1;
else
edo_futuro <= S0;
end if;
when S1 => A <= D;
edo_futuro <= S2;
when S2 => W <= '0';
edo_futuro <= S3;
when S3 => W <= '1';
edo_futuro <= S4;
when S4 => CLR <= '0';
edo_futuro <= S5;
when S5 => CLR <= '1';
edo_futuro <= S6;
when S6 => FIN <= '1';
edo_futuro <= S0;
end case;
end if;
end process senial_control;

proceso_clk: process(clk,RST) begin


if(clk'event and clk='1')then
if RST = '0' then
edo_presente<=edo_futuro;
else
null;
end if;
end if;
end process proceso_clk;

end arq_ctrl_alu_banco;

Pgina 12 de 23
Diseo del circuito para las Operaciones de Entrada/Salida

Tabla de Instrucciones de Entrada/Salida

LH Operacin
00 Salida sin Enter
01 Salida con Enter
10 Entrada sin Enter
11 Entrada con Enter

ASM de la microoperacin

Explicacin
Si la bandera de activacin est APAGADA (ACT=0)
Regresa a S0 (S0 realiza siempre un reset a las terminales de salida)
si no
Segn sea (LH)
Si LH =00
S1: Habilita el buffer de salida de datos
S6: Prende la Bandera FIN = 1 para indicar que el proceso a terminado y regresa a S0
Si LH = 01
S2: Habilita el buffer de salida de datos
Si ENTER = 1
S6: Prende la Bandera FIN = 1 para indicar que el proceso a terminado y regresa a S0
si no
Regresa a S2
Termina Condicin
Si LH=10
S3: Habilita Buffer de entrada de datos
S5: Activa el pulso de [RD]
S6: Prende la Bandera FIN = 1 para indicar que el proceso a terminado y regresa a S0
caso contrario
Pgina 13 de 23
S4: Habilita Buffer de entrada de datos
Si ENTER = 1
S5: Activa el pulso de [RD]
si no
Regresa a S4
Termina Condicin
S6: Prende la Bandera FIN = 1 para indicar que el proceso a terminado y regresa a S0
Termina Condicin segn
Termina Condicin

FIN RD IN OUT
Si (D3) (D2) (D1) (D0) Hex Descripcin
S0 0 0 1 1 3h Reset en todas las terminales de salida
S1 0 0 1 0 2h Enva la seal de activacin al buffer de salida
S2 0 0 1 0 2h Enva la seal de activacin al buffer de salida
S3 0 0 0 1 1h Enva la seal de activacin al buffer de entrada
S4 0 0 0 1 1h Enva la seal de activacin al buffer de entrada
S5 0 1 0 1 5h Enva el pulso al registro [RD] mientras est activado el buffer de entrada
S6 1 0 1 1 Bh Enva la seal de que el proceso a finalizado

--Este codigo es para las operaciones de


--Entrada/Salida (E/S)
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY ctrl_es IS PORT (


ACTIVO, ENTER, RST, CLK: IN std_logic;
LH: IN std_logic_vector(1 DOWNTO 0);
D: OUT std_logic_vector( 3 DOWNTO 0) );
ATTRIBUTE pin_numbers OF ctrl_es: ENTITY IS
"ACTIVO:2 LH(0):3 LH(1):4 ENTER:5 RST:6 D(0):23 D(1):22 D(2):21 D(3):20 ";
END ctrl_es;

ARCHITECTURE arq_ctrl_es OF ctrl_es IS


TYPE estados IS (S0, S1, S2, S3, S4, S5, S6);
SIGNAL estado: estados;
BEGIN
PROCESS (LH, ACTIVO, RST, ENTER, CLK) BEGIN
IF RST = '1' THEN
estado <= S0;
ELSIF(CLK'event AND CLK='1') THEN
CASE estado IS
WHEN S0 =>
IF ACTIVO = '0' THEN
estado <= S0;
ELSE
IF LH = "00" THEN
estado <= S1;
ELSIF LH = "01" THEN
estado <= S2;
ELSIF LH = "10" THEN
estado <= S3;
ELSE

Pgina 14 de 23
estado <= S4;
END IF;
END IF;
WHEN S1 =>
estado <= S6;
WHEN S2 =>
IF ENTER = '1' THEN
estado <= S6;
ELSE
estado <= S2;
END IF;
WHEN S3 =>
estado <= S5;
WHEN S4 =>
IF ENTER = '1' THEN
estado <= S5;
ELSE
estado <= S4;
END IF;
WHEN S5 =>
estado <= S6;
WHEN S6 =>
estado <= S0;
END CASE;
END IF;
END PROCESS;
D <= x"3" WHEN (estado=S0) ELSE
x"2" WHEN (estado=S1) ELSE
x"2" WHEN (estado=S2) ELSE
x"1" WHEN (estado=S3) ELSE
x"1" WHEN (estado=S4) ELSE
x"5" WHEN (estado=S5) ELSE
x"B";
END arq_ctrl_es;

Pgina 15 de 23
Diseo del circuito de Saltos

CCF Descripcin
010 Salto incondicional
011 Salto incondicional
100 Salta si C=1 (JC)
101 Salta si Z=1 (JZ)
110 Salta si C=0 (JNC)
111 Salta si Z=0 (JNZ)

ASM de la microoperacin

Explicacin
Si la bandera de activacin est APAGADA (ACT=0)
Regresa a S0 (S0 realiza siempre un reset a las terminales de salida)
si no
segn sea (CCF)
si CCF= 010 o CCF=011
S1: Enva seal al PC para dar permiso al clk de cargar una localidad
S2: Enva pulso al clk del Pc
si CCF= 100
si C = 1
S1: Enva seal al PC para dar permiso al clk de cargar una localidad
Pgina 16 de 23
S2: Enva pulso al clk del Pc
Termina condicin
si CCF= 101
si Z = 1
S1: Enva seal al PC para dar permiso al clk de cargar una localidad
S2: Enva pulso al clk del Pc
Termina condicin
si CCF= 110
si C = 0
S1: Enva seal al PC para dar permiso al clk de cargar una localidad
S2: Enva pulso al clk del Pc
Termina condicin
caso contrario:
si Z = 0
S1: Enva seal al PC para dar permiso al clk de cargar una localidad
S2: Enva pulso al clk del Pc
Termina condicin
fin condicin segn
S6: Prende la Bandera FIN = 1 para indicar que el proceso a terminado y regresa a S0
Termina Condicin

Si FIN CLK_PC CARGAR


Q(2) Q(1) Q(0)
S0 0 0 0
S1 0 0 1
S2 0 1 1
S3 1 0 0

--Circuito de control de saltos


LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY ctrl_saltos IS PORT (


HABILITADO, C, Z, RST, clk: IN std_logic;
CCF : IN std_logic_vector (2 DOWNTO 0);
Q: OUT std_logic_vector (2 DOWNTO 0));
ATTRIBUTE pin_numbers OF ctrl_saltos: ENTITY IS
"HABILITADO:2 CCF(0):3 CCF(1):4 CCF(2):5 C:6 Z:7 RST:8 Q(0):23 Q(1):22 Q(2):21 ";
END ctrl_saltos;

ARCHITECTURE arq_ctrl_saltos OF ctrl_saltos IS


TYPE estados IS (S0, S1, S2, S3);
SIGNAL estado: estados;
BEGIN
PROCESS(HABILITADO, CCF, C, Z, RST, clk ) BEGIN
IF RST = '1' THEN
estado<=S0;
ELSIF (clk'event and clk='1') THEN
CASE estado IS
WHEN S0 =>
IF HABILITADO = '1' THEN
IF (CCF = "010" OR CCF = "011" ) THEN

Pgina 17 de 23
estado <= S1;
ELSIF CCF = "100" THEN
IF C = '1' THEN
estado <= S1;
ELSE
estado <= S3;
END IF;
ELSIF CCF = "101" THEN
IF Z = '1' THEN
estado <= S1;
ELSE
estado <= S3;
END IF;
ELSIF CCF = "110" THEN
IF C = '0' THEN
estado <= S1;
ELSE
estado <= S3;
END IF;
ELSE
IF Z = '0' THEN
estado <= S1;
ELSE
estado <= S3;
END IF;
END IF;
ELSE
estado <= S0;
END IF;
WHEN S1 =>
estado <= S2;
WHEN S2 =>
estado <= S3;
WHEN S3 =>
estado <= S0;
END CASE;
END IF;
END PROCESS;

Q <= "000" WHEN (estado = S0) ELSE


"001" WHEN (estado = S1) ELSE
"011" WHEN (estado = S2) ELSE
"100";
END arq_ctrl_saltos;

Pgina 18 de 23
Diseo para la operacin de la ALU.

OP TT Operacin S en Hex CC Ci
00 00 [S] + Ci [D] 9h 00 0
01 1
01 00 [S] + [D] + Ci [D] 9h 10 Ci
10 00 [D] - [S] - Ci [D] 6h 11 Ci

--Control de las operaciones de la ALU


library ieee;
use ieee.std_logic_1164.all;

entity ctrl_alu is port (


CC, OP: in std_logic_vector(1 downto 0);
ACARREO_UE: in bit;
S: out std_logic_vector(3 downto 0);
Cin: out bit );
attribute pin_numbers of ctrl_alu: entity is
"CC(0):1 CC(1):2 OP(0):3 OP(1):4 ACARREO_UE:5 S(0):23 S(1):22 S(2):21 S(3):20 Cin:19 ";
end ctrl_alu;

architecture arq_ctrl_alu of ctrl_alu is


begin
selector_op_alu: process (OP) begin
case OP is
when "00" => S <= x"9";
when "01" => S <= x"9";
when "10" => S <= x"6";
when others => S <= x"0";
end case;
end process selector_op_alu;
salida_acarreo: process (CC, ACARREO_UE) begin
case CC is
when "00" => Cin <= not '0';
when "01" => Cin <= not '1';
when "10" => Cin <= not ACARREO_UE;
when others => Cin <= ACARREO_UE;
end case;
end process salida_acarreo;
end arq_ctrl_alu;

Pgina 19 de 23
Diseo del circuito para el Control Principal.
O P C C T T S/L S/H D D Tipo de instruccin
0 0 X X X X X X X X
0 1 X X X X X X X X Ins. de Registro
1 0 X X X X X X X X
1 1 0 0 X X 0 X X X Ins. de Salida
1 1 0 0 X X 1 X X X Ins. de Entrada
1 1 0 1 X X X X X X
1 1 1 0 X X X X X X Inst. de Saltos
1 1 1 1 X X X X X X

ASM de la microoperacin

Grabar Banco

OE Memoria
Leer Banco

clk_PC

Cl_IR
Salto
E/S
Si
S0 0 0 0 0 0 0 1
S1 0 0 0 0 0 0 0
S2 0 0 0 0 0 1 0
S3 0 0 0 0 1 0 1
S4 0 0 0 1 0 0 1
S5 0 0 1 0 0 0 1
S6 0 1 0 0 0 0 1
S7 1 0 0 0 0 0 1

--Circuito de control master, el cual manda llamar


--a las micro operaciones necesarias
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY ctrl_principal IS PORT (


HABILITADO, L, RST, clk : IN std_logic;
OP, CC: IN std_logic_vector (1 DOWNTO 0);
Q: OUT std_logic_vector (6 DOWNTO 0));
ATTRIBUTE pin_numbers OF ctrl_principal: ENTITY IS
"HABILITADO:2 L:3 CC(0):4 CC(1):5 OP(0):6 OP(1):7 RST:8 Q(0):23 Q(1):22 Q(2):21 Q(3):20 Q(4):19 Q(5):18 Q(6):17 ";
END ctrl_principal;

ARCHITECTURE arq_ctrl_principal OF ctrl_principal IS


TYPE estados IS (S0, S1, S2, S3, S4, S5, S6, S7);
SIGNAL estado: estados;
BEGIN
PROCESS(HABILITADO, L, CC, OP, RST, clk ) BEGIN
IF RST = '1' THEN
estado<=S0;
ELSIF (clk'event and clk='1') THEN
CASE estado IS
WHEN S0 =>
IF HABILITADO = '1' THEN
estado <= S1;

Pgina 20 de 23
ELSE
estado <= S0;
END IF;
WHEN S1 =>
estado <= S2;
WHEN S2 =>
estado <= S3;
WHEN S3 =>
IF OP = "11" THEN
IF CC = "00" THEN
IF L = '1' THEN
estado <= S6;
ELSE
estado <= S4;
END IF;
ELSE
estado <= S7;
END IF;
ELSE
estado <= S4;
END IF;
WHEN S4 =>
IF OP = "11" THEN
estado <= S6;
ELSE
estado <= S5;
END IF;
WHEN S5 =>
estado <= S0;
WHEN S6 =>
IF L = '1' THEN
estado <= S5;
ELSE
estado <= S0;
END IF;
WHEN S7 =>
estado <= S0;
END CASE;
END IF;
END PROCESS;

Q <= "0000001" WHEN (estado = S0) ELSE


"0000000" WHEN (estado = S1) ELSE
"0000010" WHEN (estado = S2) ELSE
"0000101" WHEN (estado = S3) ELSE
"0001001" WHEN (estado = S4) ELSE
"0010001" WHEN (estado = S5) ELSE
"0100001" WHEN (estado = S6) ELSE
"1000001";
END arq_ctrl_principal;

Pgina 21 de 23
Conclusiones

La unidad de control es importante en una computadora, ya que es la que se encarga de enviar las
seales necesarias que indican que dispositivos se activan o desactivan, envan pulsos de reloj necesarios.
Pero para el diseo de la unidad de control se requiere conocer la arquitectura de la unidad de ejecucin ya
que la unidad de control va ligada a la unidad de ejecucin.

La unidad de control puede implementarse de diferentes formas: Utilizando compuertas bsicas (que
es a lo que se le conoce como unidad cableada), por medio del uso de EEPROM y por medio de VHDL a la
cual se le conoce como U. de Control programada. Est prctica se puede implementar en dispositivos
grandes utilizando un solo componente, sim embargo ya que se utiliz el GAL como componente principal y
su capacidad es pequea, se dividi la unidad en microoperaciones, y una unidad de control muy pequea, la
cual es la que se encarga de crear el ciclo FETCH y llamar a las microperaciones necesarias segn el
OPCODE del programa lo requiera.

El simulador empleado fue ISIS Proteus, ya que tiene la caracterstica de poder simular gales y
EEPROM, es importante al momento del diseo saber el orden de todas las terminales, ya que en mas de una
ocasin se tuvo el problema de haber invertido algunas seales de salida al programar.

Todo se encapsul para una mejor presentacin y entendimiento.

Pgina 22 de 23
BIBLIOGRAFA

Fundamentos de Sistema Digitales, Prentice Hall, Thomas L. Floyd.

Sistemas Digitales, Principios y Aplicaciones, Prentice Hall, Ronald j. Tocci

Organizacin y arquitectura de computadoras, Prenticel Hall, Jaime Martinez Garza

VHDL El arte de programar en sistemas digitales, Ed. Patria, David G. Maxinez, Jessica Alcal

Pgina 23 de 23

You might also like