From 95542f32cc236daec0b81c3e57fce7c1725231b5 Mon Sep 17 00:00:00 2001 From: John Date: Tue, 18 Apr 2017 18:13:46 -0400 Subject: [PATCH] Multiple updates, just reuploaded all files --- ControlUnit.v | 16 ++++++++++------ DataMem.v | 10 ++++++---- ID.v | 8 +++++--- IDEXERegister.v | 8 +++++--- IF.v | 2 ++ IFIDRegister.v | 2 ++ InstrMem.v | 2 ++ MEM.v | 2 ++ PCRegister.v | 2 ++ RegFile.v | 2 ++ RegMux.v | 2 ++ SignExtender.v | 2 ++ adder.v | 2 ++ alu.v | 14 ++++++++------ cpu.v | 26 ++++++++++++++++++++++++-- 15 files changed, 76 insertions(+), 24 deletions(-) diff --git a/ControlUnit.v b/ControlUnit.v index 3bc7329..249261f 100644 --- a/ControlUnit.v +++ b/ControlUnit.v @@ -1,12 +1,16 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// -// // -// Control unit module // -// // +// // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // +// Control unit module // +// // ////////////////////////////////////////////////////////////////////////////////// -// // -// NOTE: Not all instructions are implemented yet. // -// // +// // +// NOTE: Not all instructions are implemented yet. Lab 4 requires only LW to // +// be defined, but I have defined control outputs for a few other // +// (simple) instructions to be prepared. // +// // ////////////////////////////////////////////////////////////////////////////////// diff --git a/DataMem.v b/DataMem.v index 08f3e12..cae1bbe 100644 --- a/DataMem.v +++ b/DataMem.v @@ -1,8 +1,10 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// -// // -// Data memory module // -// // +// // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // +// Data memory module // +// // ////////////////////////////////////////////////////////////////////////////////// module DataMem( @@ -34,4 +36,4 @@ always @ (*) begin mem[writeAddr] = dataIn; end - end + end \ No newline at end of file diff --git a/ID.v b/ID.v index 07df24f..543dc6c 100644 --- a/ID.v +++ b/ID.v @@ -1,8 +1,10 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// -// // -// ID secondary-level module // -// // +// // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // +// ID secondary level module // +// // ////////////////////////////////////////////////////////////////////////////////// diff --git a/IDEXERegister.v b/IDEXERegister.v index 7fc0df4..c8117ed 100644 --- a/IDEXERegister.v +++ b/IDEXERegister.v @@ -1,8 +1,10 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// -// -// ID/EXE register module -// +// // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // +// ID/EXE register module // +// // ////////////////////////////////////////////////////////////////////////////////// diff --git a/IF.v b/IF.v index 2291a11..387a943 100644 --- a/IF.v +++ b/IF.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // IF secondary level module // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/IFIDRegister.v b/IFIDRegister.v index 2325496..eecf793 100644 --- a/IFIDRegister.v +++ b/IFIDRegister.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // IF/ID register module // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/InstrMem.v b/InstrMem.v index 39b80ca..aca2f34 100644 --- a/InstrMem.v +++ b/InstrMem.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // Instruction memory module // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/MEM.v b/MEM.v index acacfe3..d270cc7 100644 --- a/MEM.v +++ b/MEM.v @@ -9,12 +9,14 @@ module MEM( input [4:0] RdRtin, input [31:0] aluresult, qb, output wregout, m2regout, + output [4:0] RdRtout, output [31:0] aluresultout, dataout ); assign wregout = wregin; assign m2regout = m2regin; assign aluresultout = aluresult; +assign RdRtout = RdRtin; DataMem DataMem(aluresult, aluresult, qb, wmemin, dataout); diff --git a/PCRegister.v b/PCRegister.v index c9ae273..e986b4c 100644 --- a/PCRegister.v +++ b/PCRegister.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // Program counter module // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/RegFile.v b/RegFile.v index 15c317d..24a3ef3 100644 --- a/RegFile.v +++ b/RegFile.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // Register file module // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/RegMux.v b/RegMux.v index c511cbf..4c23cf2 100644 --- a/RegMux.v +++ b/RegMux.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // Generic multiplexer module // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/SignExtender.v b/SignExtender.v index fc6f789..98b06b9 100644 --- a/SignExtender.v +++ b/SignExtender.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // Sign extender module // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/adder.v b/adder.v index 81d2fed..4c0f211 100644 --- a/adder.v +++ b/adder.v @@ -1,6 +1,8 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // // Generic 32 bit adder // // // ////////////////////////////////////////////////////////////////////////////////// diff --git a/alu.v b/alu.v index 8525c9d..499f268 100644 --- a/alu.v +++ b/alu.v @@ -1,9 +1,11 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// -// // -// Arithmetic logic unit // -// Overflow and zero outputs not yet implemented // -// // +// // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // +// Arithmetic logic unit // +// Overflow and zero outputs not yet implemented // +// // ////////////////////////////////////////////////////////////////////////////////// module ALU( @@ -47,5 +49,5 @@ always @ (*) begin end end - -endmodule + +endmodule \ No newline at end of file diff --git a/cpu.v b/cpu.v index a5ddab6..6279125 100644 --- a/cpu.v +++ b/cpu.v @@ -1,7 +1,9 @@ `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // // -// Top level module // +// CMPEN 331 Spring 2017 // +// Code by John Huddleston (Section 2) // +// Top level module // // // ////////////////////////////////////////////////////////////////////////////////// @@ -10,15 +12,35 @@ module cpu( input clk ); + // Wires for Lab 4 components wire [31:0] instrAddr, newInstrAddr, instr2reg, instr, tempWData, regOutA, regOutB, extended; wire tempWReg, wreg, m2reg, wmem, aluimm; wire[3:0] aluc; wire [4:0] RdRt, tempWAddr; + // Wires for EXE and EXE/MEM register components + wire wreg2exe, m2reg2exe, wmem2exe, aluimm2exe, wreg2exemem, m2reg2exemem, wmem2exemem; + wire [3:0] aluc2exe; + wire [4:0] RdRt2exe, RdRt2exemem; + wire [31:0] regOutA2exe, regOutB2exe, extended2exe, aluresult2exemem, qb2exemem; + + // Wires for MEM and MEM/WB components + wire wreg2mem, m2reg2mem, wmem2mem, wreg2memwb, m2reg2memwb; + wire [4:0] RdRt2mem, RdRt2memwb; + wire [31:0] aluresult2mem, qb2mem, aluresult2memwb, dataout2memwb; + PCRegister PCRegister(clk, newInstrAddr, instrAddr); IF IF(instrAddr, newInstrAddr, instr2reg); IFIDRegister IFIDRegister(instr2reg, instr, clk); ID ID(instr, tempWData, clk, tempWReg, tempWAddr, wreg, m2reg, wmem, aluc, aluimm, RdRt, regOutA, regOutB, extended); - IDEXERegister IDEXERegister(wreg, m2reg, wmem, aluimm, clk, aluc, RdRt, regOutA, regOutB, extended); + IDEXERegister IDEXERegister(wreg, m2reg, wmem, aluimm, clk, aluc, RdRt, regOutA, regOutB, extended, wreg2exe, + m2reg2exe, wmem2exe, aluimm2exe, aluc2exe, RdRt2exe, regOutA2exe, regOutB2exe, extended2exe); + EXE EXE(wreg2exe, m2reg2exe, wmem2exe, aluimm2exe, aluc2exe, RdRt2exe, regOutA2exe, regOutB2exe, extended2exe, + wreg2exemem, m2reg2exemem, wmem2exemem, RdRt2exemem, qb2exemem, aluresult2exemem); + EXEMEMRegister EXEMEMRegister(clk, wreg2exemem, m2reg2exemem, wmem2exemem, RdRt2exemem, aluresult2exemem, qb2exemem, + wreg2mem, m2reg2mem, wmem2mem, RdRt2mem, aluresult2mem, dataout2mem); + MEM MEM(wreg2mem, m2reg2mem, wmem2mem, RdRt2mem, aluresult2mem, qb2mem, wreg2memwb, m2reg2memwb, RdRt2memwb, + aluresult2memwb, dataout2memwb); + MEMWBRegister MEMWBRegister(clk, wreg2memwb, m2reg2memwb, RdRt2memwb, aluresult2memwb, dataout2memwb); endmodule