Skip to content

A high-performance MIPS processor simulator written in Rust, featuring both functional and advanced timing simulations. Explore pipelined execution, Tomasulo's algorithm for out-of-order execution, multi-level cache hierarchies, and sophisticated branch prediction. Ideal for computer architecture education, research, and CPU design.

License

Notifications You must be signed in to change notification settings

muditbhargava66/vmips-simulator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ VMIPS Rust Simulator

CI License: MIT Rust Version Release Last Commit

A comprehensive, high-performance MIPS processor simulator written in Rust for education and research

Featuring functional simulation, advanced timing models, and out-of-order execution

Project Banner

πŸš€ Quick Start β€’ πŸ“š Examples β€’ πŸ—οΈ Architecture β€’ πŸ“– Documentation β€’ 🀝 Contributing


✨ Key Features

🎯 Simulation Modes

  • Functional Simulator - Accurate instruction execution
  • Timing Simulator - Cycle-accurate pipeline modeling
  • Out-of-Order Execution - Tomasulo's algorithm implementation
  • Superscalar Support - Multiple instruction issue per cycle

πŸ—οΈ Advanced Architecture

  • Multi-level Cache Hierarchy (L1/L2 with configurable policies)
  • Branch Prediction (2-bit saturating counters + BTB)
  • Hazard Detection & Resolution (Data/Control hazards)
  • Register Renaming with Reorder Buffer (ROB)

πŸ”§ Developer Experience

  • Modern CLI Interface with comprehensive options
  • Enhanced Pipeline Visualization - Real-time execution view with instruction flow
  • Performance Analytics - Detailed statistics and metrics
  • ELF Binary Support - Load real MIPS programs
  • Robust Error Handling - Comprehensive error detection and reporting

πŸ“š Educational Focus

  • 8 Working Examples - From basic to advanced algorithms
  • Comprehensive Documentation - Architecture guides and tutorials
  • Step-by-step Debugging - Understand every instruction
  • Configurable Complexity - Adjust for learning level

πŸ”§ Supported MIPS Instructions

πŸ“‹ Complete Instruction Set (Click to expand)
Category Instructions Count
R-type ADD, SUB, AND, OR, SLT, SLL, SRL, SRA, SLLV, SRLV, SRAV, JR, JALR, MULT, DIV, DIVU, MFLO, MFHI, MTLO, MTHI, XOR, NOR 21
I-type ADDI, ADDIU, LW, SW, BEQ, BNE, LUI, ORI, ANDI, XORI, SLTI, SLTIU, LB, LBU, LH, LHU, SB, SH 18
J-type J, JAL 2
Branch BGTZ, BLEZ, BLTZ, BGEZ 4
Floating-Point ADD.S, SUB.S, MUL.S, DIV.S, ABS.S, NEG.S, MOV.S, CVT.S.W, CVT.W.S, C.EQ.S, C.LT.S, C.LE.S, LWC1, SWC1, BC1T, BC1F 16
Special SYSCALL, BREAK, NOP 3

Total: 64+ Instructions - Complete MIPS32 instruction set support

πŸš€ Quick Start

Prerequisites

  • Rust 1.56+ - Install Rust
  • Git - For cloning the repository

Installation

# Clone the repository
git clone https://github.com/muditbhargava66/vmips-simulator.git
cd vmips-simulator

# Build the project
cargo build --release

# Run tests to verify installation
cargo test --all

Basic Usage

# Functional simulation (fast, accurate)
cargo run --bin vmips_rust functional

# Timing simulation with visualization
cargo run --bin vmips_rust timing --visualize --max-cycles 1000

# Custom configuration
cargo run --bin vmips_rust functional --memory-size 16384 --log-level debug

Command Line Interface

πŸ”§ Complete CLI Options
vmips_rust functional [OPTIONS]
vmips_rust timing [OPTIONS]

OPTIONS:
    -m, --memory-size <SIZE>     Memory size in bytes [default: 8192]
    -l, --log-level <LEVEL>      Log level: error, warn, info, debug [default: info]
    -o, --output <FILE>          Output log file path
    -v, --visualize              Enable pipeline visualization (timing only)
        --max-cycles <CYCLES>    Maximum simulation cycles [default: 1000]
        --elf                    Load ELF binary format
        --input <FILE>           Input program file

πŸ“š Examples

Explore 8 comprehensive examples that demonstrate MIPS programming concepts:

πŸ”’ Mathematical Operations

# Calculate 6! = 720
cargo run --example factorial

# Fibonacci sequence F(10) = 55
cargo run --example fibonacci

# Vector dot product: [1,2,3]Β·[4,5,6] = 32
cargo run --example dot_product

# Complex arithmetic: (15+25)*3-10/2 = 115
cargo run --example simple_calculator

πŸ—ƒοΈ Data Structures & Algorithms

# Bubble sort demonstration
cargo run --example bubble_sort

# 2Γ—2 matrix multiplication
cargo run --example matrix_multiply

# Array summation: [10,20,30,40,50] = 150
cargo run --example array_sum

# String length calculation: "HELLO" = 5
cargo run --example string_length

🎯 Example Features

  • βœ… Educational Comments - Step-by-step explanations
  • βœ… Expected Outputs - Clear result verification
  • βœ… Debug Information - Register and memory states
  • βœ… Concept Demonstration - MIPS programming patterns

πŸ§ͺ Testing & Quality Assurance

Test Suite

# Run all tests (39 unit + 6 integration tests)
cargo test --all

# Run with verbose output
cargo test --all --verbose

# Run specific test module
cargo test functional_simulator

Code Quality

# Check code formatting
cargo fmt --check

# Run linter (warnings allowed in v0.2.0, will be fixed in v0.2.1)
cargo clippy --all-targets

# Run performance benchmarks
cargo bench

Example Verification

# Test all examples automatically
for example in bubble_sort dot_product factorial matrix_multiply simple_calculator fibonacci array_sum string_length; do
  cargo run --example $example
done

πŸ—οΈ Architecture

πŸ“ Project Structure
vmips-simulator/
β”œβ”€β”€ πŸš€ src/
β”‚   β”œβ”€β”€ assembler/              # MIPS assembler implementation
β”‚   β”œβ”€β”€ functional_simulator/   # Functional simulation engine
β”‚   β”‚   β”œβ”€β”€ simulator.rs        # Core simulation logic
β”‚   β”‚   β”œβ”€β”€ registers.rs        # Register file management
β”‚   β”‚   β”œβ”€β”€ memory.rs          # Memory subsystem
β”‚   β”‚   └── instructions.rs    # MIPS instruction set
β”‚   β”œβ”€β”€ timing_simulator/       # Timing simulation engine
β”‚   β”‚   β”œβ”€β”€ simulator.rs        # Pipeline simulation
β”‚   β”‚   β”œβ”€β”€ pipeline.rs         # Pipeline stages & hazards
β”‚   β”‚   β”œβ”€β”€ components.rs       # Cache & branch predictor
β”‚   β”‚   β”œβ”€β”€ tomasulo.rs        # Out-of-order execution
β”‚   β”‚   └── visualization.rs    # Pipeline visualization
β”‚   β”œβ”€β”€ utils/                  # Shared utilities
β”‚   β”œβ”€β”€ main.rs                # CLI interface
β”‚   └── lib.rs                 # Library exports
β”œβ”€β”€ πŸ“š examples/               # 8 educational examples
β”œβ”€β”€ πŸ§ͺ tests/                  # Comprehensive test suite
β”œβ”€β”€ πŸ“Š benches/               # Performance benchmarks
β”œβ”€β”€ πŸ“– docs/                  # Documentation & guides
└── πŸ”§ Configuration files

🎯 Core Components

Component Purpose Key Features
Functional Simulator Accurate instruction execution Fast simulation, precise results
Timing Simulator Cycle-accurate modeling Pipeline visualization, hazard detection
Tomasulo Engine Out-of-order execution Register renaming, ROB, reservation stations
Cache Hierarchy Memory subsystem L1/L2 caches, configurable policies
Branch Predictor Control flow optimization 2-bit counters, BTB, speculation

πŸ“– Documentation

Resource Description
πŸ“š Getting Started Installation and first steps
πŸ—οΈ Architecture Guide System design and components
πŸ“‹ Instruction Set Complete MIPS instruction reference
🎯 Examples Guide Detailed example walkthroughs
πŸ”§ API Reference Complete API documentation
πŸ“Š Tutorials Step-by-step learning guides

πŸš€ Performance & Benchmarks

  • Functional Simulator: ~1M instructions/second
  • Timing Simulator: ~100K cycles/second with full visualization
  • Memory Efficiency: Configurable from 1KB to 1GB
  • Test Coverage: 39 unit tests + 6 integration tests
  • Example Success Rate: 8/8 examples working correctly

🀝 Contributing

We welcome contributions! Here's how to get started:

# Fork the repository and clone your fork
git clone https://github.com/YOUR_USERNAME/vmips-simulator.git

# Create a feature branch
git checkout -b feature/your-feature-name

# Make your changes and test
cargo test --all
cargo fmt
cargo clippy --all-targets -- -D warnings

# Submit a pull request

See CONTRIBUTING.md for detailed guidelines.

πŸ“Š Project Status

  • βœ… Latest Release: v0.2.1 with enhanced error handling and visualization
  • βœ… Production Ready: Comprehensive testing, CI/CD, and code quality improvements
  • βœ… Educational Focus: 8 working examples with comprehensive documentation
  • βœ… Code Quality: All Clippy warnings resolved, production-grade code standards
  • βœ… Enhanced Features: Improved pipeline visualization and algorithm support foundation

πŸ“„ License

This project is licensed under the MIT License - see the file for details.

πŸ™ Acknowledgments

  • MIPS Architecture: Based on the MIPS32 instruction set
  • Rust Community: For excellent tooling and libraries
  • Educational Use: Designed for computer architecture learning

⭐ Star this repository if you find it useful!

Report Bug β€’ Request Feature β€’ Discussions

About

A high-performance MIPS processor simulator written in Rust, featuring both functional and advanced timing simulations. Explore pipelined execution, Tomasulo's algorithm for out-of-order execution, multi-level cache hierarchies, and sophisticated branch prediction. Ideal for computer architecture education, research, and CPU design.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Languages