Experience and Projects

MIPS Simulator A simulator for the MIPS-1 architecture

A simulator and testbench written as a university project. Simulates almost all mips-1 instructions, and runs real MIPS-1 binaries. Written in C++.

 
Verishot
Verishot An easy to use, simplified, verilog emulator

A Verilog emulator and visualiser for first-year EEE students. This project was part of my year 3 High Level Programming module.

Hardware design tooling is notoriously hard to use, especially for beginners. We tried to make things easier for beginners by giving a way to quickly run and visualize verilog designs without having to deal with tools like Quartus or Vivado.

The simulator is written in F# and covers the structural subset of Verilog (modules, continuous assignment, wires, logic and arithmetic operators). We also created an extension for Visual Studio Code to simplify interaction with the simulator and provide useful features such as intellisense or syntax highlighting.

 
The Kima Programming language A programming language with support for algebraic effects

Kima is a programming language I am currently working on. Its main goal is to explore the practicality and design space of algebraic effects, in a statically typed, mostly-imperative language. In its current form it supports product types (structs) and higher-order functions, while I am currently working on algebraic effects.

Written in Haskell and tested using Hspec and Gitlab CI.

 
Google Summer of Code 2020 Adding tracing to ghcide

I participated in Google Summer of Code 2020, under the haskell.org organisation. My project was centered around ghcide, a project which gives editors IDE-like capabilities for Haskell code, using the Language Server Protocol. I introduced tracing into this software to facilitate profiling its performance.

The project was completed and the functionality was included in the project. This required me to dive deep into the internals of the Haskell compiler (GHC) to be able to measure the size of Haskell objects in memory, and resulted in merging a patch to GHC. As I used OpenTelemetry to implement the tracing feature, I also contributed to the haskell OpenTelemetry library