Arquitectura de Computadoras - Edición 2017 Laboratorio - Organización de la CPU Objetivos Ejercitar conceptos vistos en el curso sobre diseño de circuitos digitales. Familiarizarse con el funcionamiento interno de la CPU a través de la implementación de varios componentes internos de su microarquitectura. Descripción de la tarea Se desea implementar una CPU simple de una arquitectura simple de 16 bits conectada a través del modelo de Von Neumann: Para su realización, los estudiantes deberán descargar del sitio EVA del curso una implementación incompleta de una CPU y realizar las modificaciones indicadas más adelante en la letra para asegurar su correcto funcionamiento. La CPU sobre la que se trabajará tiene las siguientes características:
Entradas: reloj ( CLK ), reset activo por nivel bajo, buses de datos, dirección y control. 16 registros de 16 bits, de nombres Reg1, Reg2,,Reg15. PC e IR de 16 bits Registro de banderas ( Zero, Negativo, Carry, Overflow ) Memoria RAM de 64K palabras de 16 bits, direccionable por palabra. Arquitectura de 16 bits con el siguiente set de instrucciones: Instrucción NOP MOVI Reg1,Inm MOVR Reg1, Reg2 LOAD Reg1, Reg2 SAVE Reg1, Reg2 ADD Reg1, Reg2, Reg3 AND Reg1, Reg2, Reg3 OR Reg1, Reg2, Reg3 XOR Reg1, Reg2, Reg3 NOT Reg1, Reg2 SHR Reg1, Reg2, Reg3 MAC Reg1, Reg2, Reg3 CMP Reg1, Reg2 JMP Reg1 JC Reg1 DJNZ Reg1, Reg2 Descripción No hace nada Carga el inmediato Inm en los bits menos significativos de Reg1, dejando los bits más significativos en 0 Carga en Reg1 el contenido de Reg2 Carga el contenido de memoria apuntado por Reg2 en Reg1 Guarda el registro Reg2 en la dirección de memoria apuntada por Reg1 Suma Reg2 y Reg3 y guarda el resultado en Reg1. Afecta las banderas C, V. Realiza un AND bit a bit entre Reg2 y Reg3 y guarda el Realiza un OR bit a bit entre Reg2 y Reg3 y guarda el Realiza un XOR bit a bit entre Reg2 y Reg3 y guarda el Realiza un NOT bit a bit de Reg2 y guarda el resultado en Reg1 Desplaza Reg2 a la derecha Reg3 lugares y guarda el Realiza la multiplicación entre la parte baja de los registros Reg2 y Reg3 y suma el resultado al registro Reg1. El resultado se guarda en Reg1. Afecta las banderas C, V. Realiza la resta entre los registros Reg1 y Reg2y actualiza las banderas con los resultados correspondientes. Afecta las banderas C y V Hace un salto incondicional a la dirección apuntada por Reg1 Hace un salto a la dirección apuntada por Reg1 si la bandera de C vale 1 Decrementa el registro Reg1 afectando la bandera Z, y luego salta a la dirección apuntada por Reg2 si la bandera de Z vale 1 2
Nota: Además de lo mencionado, las operaciones ADD, SHR, NOT, AND, OR, XOR, MAC y CMP afectan las banderas Z y N. El formato de instrucción que se va a utilizar es el siguiente: NOP 0000 0000 0000 0000 MOVI 0001 Reg1 Inmediato MOVR 0010 Reg1 Reg2 0000 LOAD 0011 Reg1 Reg2 0000 SAVE 0100 Reg1 Reg2 0000 ADD 0101 Reg1 Reg2 Reg3 AND 0110 Reg1 Reg2 Reg3 OR 0111 Reg1 Reg2 Reg3 XOR 1000 Reg1 Reg2 Reg3 NOT 1001 Reg1 Reg2 0000 SHR 1010 Reg1 Reg2 Reg3 MAC 1011 Reg1 Reg2 Reg3 CMP 1100 Reg1 Reg2 0000 JMP 1101 Reg1 0000 0000 JC 1110 Reg1 0000 0000 DJNZ 1111 Reg1 Reg2 0000 3
Se Pide 1) Implementar con MAX+PLUS II el circuito lógico 8bit_mul.gdf, que dado dos números de 8 bits representados en complemento a 2, los multiplica y devuelve el resultado en complemento a 2 de 16 bits. Dicho circuito es utilizado en la ALU. El símbolo generado (8bit_mul.sym) debe ser idéntico al entregado por lo docentes. 2) Construir con MAX+PLUS II la unidad de control de la CPU, de modo que la CPU implemente el set de instrucciones indicado anteriormente. La unidad de control deberá implementar un ciclo de instrucción siguiendo la filosofía CISC, es decir, que tendrá un ciclo de instrucción corto para instrucciones simples y uno más largo para instrucciones más complejas. El símbolo generado (control_unit.sym) debe ser idéntico al entregado por lo docentes. 3) Implementar un módulo de prueba de la CPU que ejecute un programa que calcule el producto escalar (módulo 65536) de la parte baja de los vectores ubicados en los rangos de memoria 0x0020-0x003F y 0x0040-0x005F de memoria. El resultado de dicho cálculo, deberá guardarse en la dirección de memoria 0x00F0. Luego de guardar el resultado el programa deberá quedar esperando en un bucle infinito. Nota: para las partes 1) y 2), no se deben modificar ninguno de los módulos entregados por los docentes. 4
Forma de entrega y grupos de trabajo El trabajo debe realizarse en grupo de exactamente cuatro personas y cada grupo debe entregar un único archivo (laboratorio.zip) que contenga en su interior: Un directorio con el proyecto Max+Plus II que contenga la CPU entregada por los docentes más los archivos.gdf y.sym necesarios para la implementación de las partes 1) y 2). El proyecto debe incluir un archivo del editor de ondas con los casos de prueba más la prueba del programa pedido en la parte 3). Además se deberá entregar un archivo de inicialización de memoria (ram.mif) que implemente el programa pedido Documentación escrita que describa la implementación de los módulos y del programa. La entrega se realizará a través del sitio EVA del curso. Los trabajos deberán ser entregados indefectiblemente antes del domingo 15 de octubre a las 23.30 horas. No se aceptará ningún trabajo pasada la citada fecha. En particular, no se aceptarán trabajos enviados por mail a los docentes del curso, ni entregados en medios magnéticos en el instituto. El sistema de entregas soporta múltiples entregas por grupo. Pruebe de realizar una entrega vacía con tiempo, a los efectos de verificar que su sistema le permite entregar correctamente. 5