Repository Structure
Blimp’s repository is organized in the following structure:
CMakeLists.txt: The top-level build system for the repository
lint.sh: A script to lint all of Blimp’s hardware designs
app/: Application code to be run on the processor. Each subdirectory is a different program
asm/: Utilities for working with assembly, including a RISCV assembler and disassembler
cmake/: Helper code for the CMake build system
defs/: Common definitions used across the processor
docs/: Blimp’s documentation
fl/: Functional-level utilities, including the Functional-level processor implementation, as well as a wrapper (fl-sim) to run code on it
fpga/: Hardware designs to work with the processor on an FPGA, so that it can be run as a standalone project
hw/: All hardware designs for the processor. The directory is split into several subdirectories, each with an associatedtest/subdirectory for tests for those designs:
common/: Common hardware modules
decode_issue/: DIU implementations and supporting designs
execute/: XU implementations and supporting designs
fetch/: FU implementations and supporting designs
squash/: SU implementations and supporting designs
top/: The top-level processor modules, as well as system-level integration tests. Additionally, thesim/subdirectory includes wrappers to run code on processor implementations
util/: Utility modules used to support Blimp’s microarchitecture, particularly the use of sequence numbers
writeback_commit/: WCU implementations and supporting designs
intf/: The hardware interfaces used to connect Blimp’s units
test/: Utilities used for testing hardware units, including functional-level wrappers around interfaces for concise syntax to send and receive messages
tools/: Tools used to support Blimp’s development:
rvelfdump.cpp: A program to turn a compiled RISCV program into a text-basedaddress: datamapping
spi_flash: A Python program to communicate a text-basedaddress: datamapping to an FPGA emulation of Blimp over SPI
types/: Common types used throughout the processor