- Objective: Implement and evaluate two versions of an integer iterative multiplier: a baseline fixed-latency design and an alternative variable-latency design.
- Key Concepts: Verilog modeling, abstraction levels, design principles, and agile methodologies.
- Objective: Design two pipelined processor microarchitectures for the TinyRV2 ISA, focusing on stalling and bypassing data hazards.
- Key Concepts: Instruction set architecture, pipelined processor microarchitecture, data and control hazards.
- Objective: Enhance the pipelined processor with a data cache (D-cache) and an instruction cache (I-cache), implementing direct-mapped and set-associative caches.
- Key Concepts: Memory system design, cache associativity, cache controllers.
- Objective: Implement three branch prediction mechanisms (Bimodal, Global, GShare) to optimize processor throughput.
- Key Concepts: Dynamic branch prediction, predictor design and evaluation.
Each lab is contained in its own directory, structured as follows:
lab1_imul/- Iterative Integer Multiplierlab2_proc/- Pipelined Processorlab3_cache/- Cache Implementationlab4_branch/- Branch Predictors
Within each lab directory, you will find:
- Verilog source files (
*.v) - Testbenches (
tb_*.vfor system-level tests,utb_*.vfor unit tests) - A Makefile for running simulations and tests
- A configuration file (
default.config) for testbench reuse
To run any lab simulation:
- Clone this repository to your local machine.
- Install Verilator
- Navigate to the desired lab directory.
- Use the provided Makefile to run simulations and tests. For example:
cd lab1_imul/
make run-all