Procesador de 4 bits en VHDL
Enviado por Omar Valdivia • 5 de Octubre de 2020 • Apuntes • 1.731 Palabras (7 Páginas) • 613 Visitas
Índice:
Introducción 2
Estructura del procesador 3
Componentes Empleados 4
Máquinas de estado y VHDL 6
Diagrama del procesador realizado 22
Conclusiones 29
Introducción:
A lo largo del curso, se estudió el funcionamiento de los circuitos de mediana escala de integración y dispositivos lógicos programables. Los componentes utilizados fueron usados en distintas prácticas donde se observaron sus operaciones y aplicaciones. Al comienzo, se trabajó con circuitos secuenciales implementando componentes básicos de la electrónica digital, avanzando hacia los dispositivos programables como EPROM y GAL para conocer la forma en que se pueden implementar los mismos circuitos usando componentes más avanzados.
El objetivo fue aprender sobre las distintas etapas de diseño que conlleva el construir un procesador capaz de realizar operaciones matemáticas siguiendo instrucciones preestablecidas. Para éste proyecto, construimos un procesador capaz de multiplicar dos números de 4 bits, permitiendo al usuario ingresar ambos números por medio de dip-switch y mostrando el resultado en un display de 7 segmentos.
Con éste fin, se debe conocer la estructura de una unidad central de procesamiento (CPU). Una vez que se tienen los dispositivos necesarios para implementar cada parte del CPU, se procede a realizar el diseño tomando en cuenta las características de dichos dispositivos. Como siguiente fase, realizamos el diseño de máquinas de estados correspondientes a cada operación del CPU, las cuales se implementarán en código VHDL. Al finalizar la implementación de las máquinas de estado, podemos construir la unidad de control que se encargará de dirigir las operaciones del procesador para obtener el resultado deseado.
En éste documento presentaremos cada fase del desarrollo del procesador, su implementación, y una simulación en el software Logisim para visualizar su funcionamiento.
Estructura del procesador:
El componente más importante de una computadora es la unidad central de procesamiento. Ésta se encarga de ejecutar diversas instrucciones almacenadas en la memoria principal con el fin de realizar una tarea. Éste proceso se puede resumir en tres pasos: leer la instrucción, decodificarla y ejecutarla. La implementación de nuestro procesador tiene como fin lograr que se realicen estos pasos. Los distintos componentes que conforman al procesador están conectados por medio de un bus de datos, a través del cual se pueden comunicar para transferir datos, direcciones y señales de control.
El procesador está conformado por una variedad de componentes encargados de tareas específicas, pero a grandes rasgos se pueden describir las siguientes áreas principales para un procesador de 4 bits como se muestra en la figura 1:
[pic 1]
Figura 1: Estructura básica de un procesador de 4 bits
Componentes Empleados:
ALU: La finalidad de la unidad aritmética lógica consiste en aceptar datos binarios que están almacenados en la memoria y ejecutar operaciones aritméticas con estos datos, de acuerdo con instrucciones que provienen de la unidad de control.
[pic 2]
Figura 2: Unidad Aritmética lógica
A continuación, se muestra el esquema de un circuito integrado comercial 74LS181, consistente en una ALU de 4 bits:[pic 3]
[pic 4][pic 5]
Figura 3:Circuito Integrado de una ALU
Latch: Son utilizados como memoria temporal para información binaria entre unidades de procesamiento y entrada/salida de datos.
[pic 6]
Figura 4: Circuito Integrado de un Latch
Banco de registros: Se define como el conjunto de registros que sirven para que el procesador almacene temporalmente datos y resultados intermedios. Se puede representar el banco como una estructura bidimensional de 4 palabras de 4 bits.
Para nuestro procesador, utilizamos una implementación del circuito integrado comercial 74LS670, con el siguiente esquema de conexiones:
[pic 7][pic 8]
Figura 5: Banco de Registros
Formato de Operaciones:
Primeramente, se realizaron las siguientes Operaciones para el procesador utilizando una memoria de 8 bits por palabra:
Para Operaciones con registros:
OP | Función |
00 | [S] + Ci -> [D] |
01 | [S] + [D] + Ci -> [D] |
10 | [D] – [S] – ~Ci -> [D] |
Tabla 1: Operaciones entre Registros
Tabla de Acarreo
CC | Ci |
00 | 0 |
01 | 1 |
10 | Ci |
11 | ~Ci |
Tabla 2: Acarreo
Formato de instrucciones:
[pic 9]
Figura 6: Formato de instrucciones de acuerdo a 8 bits
Máquinas de estado junto con su VHDL:
Para OP = 00:
[pic 10]
Figura 7: Maquina de estado cuando OP = 00
VHDL realizado:
library ieee;
use ieee.std_logic_1164.all;
entity OP00 is port(
clk, rst : in std_logic; O,P : in std_logic;
PC, SEL, RB, WRS, WB, F : out std_logic
);
end OP00;
architecture arch_OP00 of OP00 is
type state is (S0, S1, S2, S3, S4 ,S5, S6); signal states : state;
begin
process(clk)
begin
if rising_edge(clk) then case states is
when S0 =>
if O = '0' and P = '0' then
states <= S1; PC <= '0';
else states <= S0;
PC <= '0';
end if; when S1 =>
...