Rechnerarchitektur 1 DI Alwin Zulehner 19. Mai 2016 Johannes Kepler Universität Übung 7 Abgabe bis Donnerstag, 2. Juni 10:00 via EPIIC: http://ep.iic.jku.at. SystemVerilog Dateien müssen vor der Abgabe in EPIIC ausgeführt werden. Dateien, die nicht kompilieren können nicht abgegeben werden. 1. ALU Implementierung (4 Punkte) Die in der Vorlesung vorgestellte ALU (siehe Abbildung 1) muss leicht angepasst werden, damit sie in der MIPS Architektur verwendet werden kann: • Das Eingangscarry c soll aus dem select Signal berechnet werden (0 bei Addition und 1 bei Subtraktion) und kein eigener Eingang sein. • Ein zusätzlicher Ausgang zero wird benötigt, der 1 ist wenn das Resultat der Berechnung 0 ist. • Das MSB (most significant bit) des Ausgangs wird nicht benötig. Vervollständige das Modul ALU in der Datei building blocks.sv um die modifizierte ALU in SystemVerilog zu implementieren. Mit Ausnahme des enthaltenen Addierers ist eine strukturelle Beschreibung des Moduls erforderlich. Abbildung 1: Arithmetic Logic Unit (ALU) 2 Übung 7 2. (12 Punkte) Ziel dieser Aufgabe ist es den MIPS Prozesor aus Abbildung 2 in SystemVerilog zu implementieren. Implementierungen der Komponenten des Datenpfades (mit Ausnahme der ALU) sind in der Datei building blocks vorhanden und sollen im Modul mips (in der Datei mips.sv ) zusammengefügt werden. Dazu ist auch das Modul control unit zu vervollständigen, das die Signale zur Steuerung des Datenpfades generiert. Folgende Instruktionen müssen unterstützt werden: Tabelle 1: Unterstützte Instruktionen (a) MIPS Instruktionen OP-code 000000 000010 000100 001000 100011 101011 Name R-Typ j beq addi lw sw Beschreibung R-Typ Instruktionen jump Branch if equal add immediate load word store word (b) R-Typ Instruktionen Funktionscode 100000 100010 100100 100101 100110 Name add sub and or xor Verwende das Modul testbench aus der Datei test sum.sv um die Implementierung zu testen. Das Modul führt das Programm sum.s, das die Summe der ungeraden Zahlen in einem Array addiert, auf dem MIPS Prozessor aus. Bei der Simulation wird auch die Datei sum.dat benötigt. Diese Datei enthält das Array und dessen Länge. 3. Erweiterung des MIPS Prozessors (8 Punkte) Erweitere den MIPS Prozessor in Abbildung 2 um die Befehle jal und jr um Funktionsaufrufe zu ermöglichen. Die beiden Befehle haben folgende Semantik: • jal ist eine J-Typ Instruktion (OP-code = 000011) die PC+4 in Register $ra (31) schreibt und PC auf {(PC+4)[31:28], target, 2’b0} (identisch zum Befehl j) setzt. • jr ist eine R-Typ Instruktion (funct = 001000) mit der Semantik PC = [rs]. Füge die Erweiterungen auch der Implementierung aus Aufgabe 2 hinzu und teste den erweiterten Prozessor mit dem Modul testbench aus der Datei test ackermann. Das Modul führt das Programm ackermann.s, das die Ackermann Funktion für die Parameter 3 und 2 berechnet (siehe Übung 2), aus und überprüft das Resultat. 27:0 0 Abbildung 2: MIPS Prozessor 31:28 PCJump 1 0 1 PC’ 4 PC CLK RD + PCPlus4 Instruction Memory A Instr 25:0 WE3 <<2 15:0 RD2 RD1 Sign Extend 1 SignImm RegWrite RegDst ALUSrc WD3 Register File A3 A2 A1 CLK Funct WriteReg 4:0 15:11 20:16 20:16 25:21 5:0 Op 0 31:26 1 SrcB SrcA <<2 0 MemtoReg Control MemtoWrite Unit Branch ALUControl 2:0 ALU + PCBranch Writedata ALUResult Zero WE WD RD Data Memory A CLK PCSrc ReadData Result 1 0 Jump Übung 7 3