0% encontró este documento útil (0 votos)
184 vistas8 páginas

Informe Lab04

Este componente se encarga de ayudar al sistema a realizar las operaciones de carga y almacenamiento de datos entre los registros y la memoria.

Cargado por

Juan Metalero
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
184 vistas8 páginas

Informe Lab04

Este componente se encarga de ayudar al sistema a realizar las operaciones de carga y almacenamiento de datos entre los registros y la memoria.

Cargado por

Juan Metalero
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

INFORME LABORATORIO 04

DISEÑO E IMPLEMENTACIÓN DE UN PROCESADOR MONOCICLO

GRUPO 06

DAVID MEJIA RESTREPO

C.C. 1039474824

ANDRES FELIPE VASQUEZ RAMIREZ

C.C. 1017174170

FACULTAD DE INGENIERIA

INGENIERIA EN SISTEMAS

ARQUITECTURA DE COMPUTADORES Y LABORATORIO


UNIVERSIDAD DE ANTIOQUIA
NOVIEMBRE DE 2017
Descripción

Se implementó un procesador monociclo MIPS de 32 bits el cual soporta múltiples


instrucciones mostradas en la Tabla 1 en el cual se observan además de las instrucciones
requeridas para el laboratorio, adicionales instrucciones. Adicional se reestructuro uno de los
códigos del laboratorio anterior para ser probado en nuestro procesador MIPS monociclo de
32 bits. Se utilizó la herramienta de Logisim para implementar y simular el procesador, y la
herramienta de MARS para generar el código y la data del codigo a simular que
posteriormente se modifico para ser analizada de forma efectiva por el procesador MIPS
monociclo de 32 bits.

Consideraciones

Se realiza un código de prueba con instrucciones básicas, para determinar el correcto


funcionamiento de la arquitectura del procesador. En las instrucciones se cuentan con sumas
(add, addi), resta (sub), manejo de memoria ROM ( lw/sw ).

La arquitectura cuenta con las instrucciones básicas más instrucciones adicionales debido que
nuestro codigo utiliza saltos y validaciones adicionales. Estas instrucciones son las siguientes
con sus códigos en binario

Formato R está dado por ALU op como 000000


Se maneja los 32 registro del MIPS con la siguiente distribución (MIPS standard), pero se la
CPU se agregan los valores del HI, LO y PC, para los momentos de tener que realizar una
división / multiplicación.

Código de prueba:

El código a ejecutar consta de instrucciones la, lw, sw, addi, slt, beq, j, el código a ejecutar
toma un primer array (vector) y busca el numero mayor, y este es sumado en cada una de las
posiciones del segundo vecto.

.data
intA: .word 15
intB: .word 3
.text

la $t1, intA
lw $t1, 0($t1)
addi $t2, $zero, 4
la $t1, intB
lw $t1, 0($t1)
addi $t3, $zero, 10
add $t4, $t1, $t2
addi $t5, $zero, 8
sw $t4, 0($t5)
Código a ejecutar:

En nuestro ejemplo el vector es de 5 posiciones [9, 4, 5, 2, 10] y suma el número 10 al


segundo vector [1, 2, 5, 6, 8] resultando [11, 12, 15, 16, 18].
.data
sizeA: .word 5
arrayA: .word 9,4,5,2,2
sizeB: .word 5
arrayB: .word 1,1,1,1,1
.text

addi $t0, $zero, 0


la $t1, sizeA
lw $t1, 0($t1) # t8 = sizeA
la $t2, arrayA # t6 = Dirección del arrayA
addi $t4, $zero, 0 # t4 = 0

loopHigh:
slt $t3, $t0, $t1 # if k < size t0 = 1
beq $t3, $zero, addV2 # if k > 0 salte al método addV2
lw $a0, 0($t2) # Carga la base del vector en $a0
slt $t3, $t4, $a0 # if item del vector > Número mayor t3 = 1
beq $t3, $zero, noHigh # if t3 = 0 salte a noHIgh
add $t4, $a0, $zero # t4 = item del vector

noHigh:
addi $t2, $t2, 4 # Incrementa la dirección del vector
addi $t0, $t0, 1 # k++
j loopHigh

addV2: # t0 = k / t1 = sizeB / t2 = apuntador arrayB / t3 =


booleano / t4 = número mayor / a0 = item del vector
addi $t0, $zero, 0
la $t1, sizeB
lw $t1, 0($t1) # t8 = sizeB
la $t2, arrayB # t6 = Dirección del arreyB

loopAdd:
slt $t3, $t0, $t1 # if k < size t0 = 1
beq $t3, $zero, exit # if k > 0 salte al método addV2
lw $a0, 0($t2) # Carga la base del vector en $a0
add $a0, $a0, $t4 # suma t4 a el item del vector a0
sw $a0, 0($t2) # Guarda el item en el vector
addi $t2, $t2, 4 # Incrementa la dirección del vector
addi $t0, $t0, 1 # k++
Modificaciones al procesador MIPS

El procesador tiene alguna variaciones con respecto a la arquitectura estándar, en esta se


cambia los estados de AluOP y Control, cambiando las salidas del control y ALUOP y las
instrucciones de ingreso de la ALU, esto con respecto a la solicitud realizada en el laboratorio
de la siguiente manera.

ALUOp (2 bits) ALU Control (3 bits)


Equip
o SW/LW R beq ADD SUB AND OR NOR SLT

6 0 2 1 0 5 4 3 2 1

En la Arquitectura desarrollada se adapta el control y ALUOP con la información solicitada y


considerando las otras instrucciones con valores definidos por nosotros.
Para las instrucciones se crea el un decodificador de instrucciones para el soporte de todas
las instrucciones mencionadas anteriormente de la siguiente manera.
Componentes del procesador:

main: aquí podremos ingresar la data y el text del programa y/o algoritmo a ejecutar,
de modo que aquí se da inicio a nuestro programa. Sus componentes mas importantes serian:
CPU, RAM y ROM

CPU: aquí se encuentra la datapath base y la unidad de control de nuestro procesador.


Sus componentes más importantes son: ALU, Register File y Control

Control: aquí el sistema procesa la solicitud recibida y procede a enviar las señales
correspondiente a los demás componentes del sistema. Su componente más importante es:
Instruction Decode

Instruction Decode: este componente se encarga de activar señales para decirle al


Control que tipo de instrucción ha llegado

ALU: la ALU se encarga de procesar los datos que le llegan y realizar las operaciones
algorítmicas y lógicas del sistema

Register File: Este sector se encarga de almacenar los 32 registros del sistema. Se
compone de múltiples RegFile8reg y un zeroReg para obtener los 32 registros

RegFile8reg: Estos sectores guardan hasta 8 registros exceptuando. Que más se puede
decir.. son casi todos los registros exceptuando los que almacena zeroReg

zeroReg: Este sector funciona casi igual que los RegFile8reg, excepto porque este
almacena el registro zero que siempre equivale a 0

BussSplit: Este sector divide los 32 bits que llegan al sistema para poder ser
analizados por las diferentes partes del sistema. Algunos ejemplos serian: opcode, shamt, rd,
rt, rs, function y los imm(immediate)

leadingZeros: Este componente genera los ceros a la izquierda del dato que ingresa.

AbsoluteAddress: Este componente se encarga de completar el imm(immédiate) de


dirección cuando no viene en 32 bits

BranchUnit: Este componente suma la dirección actual con la que trae el


imm(immédiate) para obtener la dirección correspondiente a una instrucción tipo branch o
parecidas

MUL_DIV_Unit: Este componente se encarga de almacenar los 16 bits más


significativos y menos significativos de la multiplicación y la división
MemBankText: Este componente es el banco de memoria que almacena el Text

MemBankData: Este componente es el banco de memoria que almacena el data

También podría gustarte