This project is currently on pause because I have started graduate school
I am not sure if I will come back to it
The latest code are on branches ooo, ooo1, ooo2.
This repository implements a compiler, assembler and a processor.
OCaml.
Most of code taken from Northeastern compilers course.
Compiles to x86.
Ocaml.
Coverts x86 to a RISC ISA and assembles to binary.
Verilog.
Implements a RISC ISA capable of running all instructions generated by assembler.
C - Verilog Programming Interface.
Simulates instruction memory, data memory, and registers.
Runs through different types of tests:
- Binary tests - binary code. and checks to make sure main memory and registers are the same as expected
- Assembly Tests - x86 assembly code. tests only the final result in eax.
- Code Tests - abstract code. tests only the final result in eax.
There is a dependency script that may or may not work for getting the dependencies.
Once these are acquired, the makefile can be run which will compile all four modules and run the test bench.
- Super scalar 👍
- Performance metrics (branch misses, IPC, instruction histograms, stalls) 👍
- Branch predictor 👍
- Compiler - Tuples 👍
- Emulator 👍
- Instruction Logs 👍
- Out of order
- Memory simulator (cache / memory heirarchy with random latency)
- Combining instruction memory and data memory