Skip to content

the Register Transfer Level (RTL) implementation of a Multi-Cycle MIPS Processor. This project was developed as the Third Assignment for the Computer Architecture course at the University of Tehran.

Notifications You must be signed in to change notification settings

mragetsars/MIPS-MultiCycle-Processor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MIPS Multi-Cycle Processor Implementation

Computer Architecture - University of Tehran - Department of Electrical & Computer Engineering

Language Tool Status

📌 Overview

This repository contains the Register Transfer Level (RTL) implementation of a Multi-Cycle MIPS Processor. This project was developed as the Third Assignment for the Computer Architecture course at the University of Tehran.

Unlike single-cycle processors, this architecture breaks down instruction execution into multiple clock cycles, allowing for resource sharing (like a single Memory and a single ALU) and potentially higher clock frequencies.

🏗️ Architecture

The design follows a finite state machine (FSM) approach to manage the execution flow across different cycles: Fetch, Decode, Execute, Memory, and Write-back.

🗺️ DataPath Design

The multi-cycle datapath reduces hardware overhead by reusing key components. it includes the ALU, Register File, Program Counter (PC). Datapath Architecture

🎮 ControlUnit Design

The Control Unit is the brain of the multi-cycle processor, implemented as a Finite State Machine. It generates control signals based on the current state and the instruction opcode.

  • Main Decoder: Manages overall control signals like RegWrite, MemWrite, etc:

    State PCWrite IRWrite MemRead MemWrite IorD RegWrite MemtoReg ALUSrcB ALUOp RegDst Description
    FETCH 1 1 1 0 0 0 0 0 0 0 Instruction Fetch
    DECODE 0 0 0 0 0 0 0 0 0 0 Decode & Reg Read
    MEM_ADDR 0 0 0 0 0 0 0 0 0 0 Address Calculation
    MEM_READ 0 0 1 0 1 0 0 0 0 0 Memory Access (Load)
    MEM_WB 0 0 0 0 0 1 1 0 0 0 Write-back from Memory
    MEM_WRITE 0 0 0 1 1 0 0 0 0 0 Memory Access (Store)
    EXEC_TYPE_C 0 0 0 0 0 0 0 0 Func 0 R-type Execution
    EXEC_TYPE_D 0 0 0 0 0 0 0 1 Opcode 0 I-type Execution
    WB_ALU 0 0 0 0 0 1 0 0 0 Note A ALU Write-back
    BRANCH 1* 0 0 0 0 0 0 0 1 0 Branch Completion
    JUMP 1 0 0 0 0 0 0 0 0 0 Jump Completion
  • ALU Decoder: Determines the specific ALU operation based on funct3 and funct7 bits:

    R-Type Instruction Logic (Type-C)

    Function Bit ALUOp Operation
    Func[0] 3'b101 Pass In1
    Func[1] 3'b110 Pass In2
    Func[2] 3'b000 Addition (+)
    Func[3] 3'b001 Subtraction (-)
    Func[4] 3'b010 Bitwise AND (&)
    Func[5] 3'b011 Bitwise OR (|)
    Func[6] 3'b100 Bitwise NOT (~)

    I-Type Instruction Logic (Type-D)

    Opcode ALUOp Operation
    4'b1100 3'b000 ADDI (Add Immediate)
    4'b1101 3'b001 SUBI (Sub Immediate)
    4'b1110 3'b010 ANDI (And Immediate)
    4'b1111 3'b011 ORI (Or Immediate)
  • Conditional Signal Logic: Special conditions for register destinations and program counter updates:

    Signal Condition Value Description
    RegDst Opcode == 4'b1000 AND Func[0] == 1 1 Write to IR[11:9]
    Otherwise 0 Write to 3'b000
    PCSource current_state == JUMP 2'b01 Jump Target Address
    current_state == BRANCH AND Zero == 1 2'b10 Branch Target Address
    Otherwise 2'b00 PC + 1 (Default)
  • Multiplexer Selection Logic: Defines how data is routed through the datapath based on control signals:

    Mux Name Selection Signal sel=0 Output sel=1 Output
    AdrMux IorD PC_Out IR_Address_Ext
    WDMux MemtoReg ALU_Result_Reg MDR_Out
    RegDstMux RegDst 3'b000 IR_Out[11:9]
    SrcBMux ALUSrcB B_Out (if 00) Imm_Ext (if 01)

📂 Repository Structure

The project is organized as follows:

MIPS-Multi-Cycle-Processor-Implementation/
├── Description/           # Project requirements and documents
│   └── CA#03.pdf          # Problem statement (Assignment 3)
├── Design/                # Architecture diagrams and design docs
│   ├── DataPath.png       # Multi-cycle datapath schematic
│   ├── ControlUnit.png    # FSM and Control logic diagrams
│   ├── ALUControlLogic... # ALU decoding logic
│   ├── MuxSelection...    # Datapath multiplexer logic
│   └── Design.pdf         # Detailed project report
├── Project/               # ModelSim project files and simulation data
│   ├── CA_CA3.mpf         # ModelSim project file
│   └── program.mem        # Machine code for testing
├── Source/                # Verilog HDL source files
│   ├── TopModule.v        # Top-level entity
│   ├── Datapath.v         # Datapath interconnection
│   ├── ControlUnit.v      # Main FSM and ALU Control
│   ├── ALU.v              # Arithmetic Logic Unit
│   ├── Memory.v           # Combined Instruction/Data Memory
│   ├── RegisterFile.v     # MIPS Register File
│   ├── Register.v         # Basic flip-flop modules for state storage
│   ├── Mux.v / Adder.v    # Reusable hardware components
│   └── TestBench.v        # Testbench for verification
└── README.md              # Project documentation

👥 Contributors

This project was developed as a team effort for the Computer Architecture course at the University of Tehran.

About

the Register Transfer Level (RTL) implementation of a Multi-Cycle MIPS Processor. This project was developed as the Third Assignment for the Computer Architecture course at the University of Tehran.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published