Repository Structure
Zeppelin’s repository is organized in the following structure:
CMakeLists.txt: The top-level build system for the repository
README.md: Quickstart instructions
app/: Application code to be run on the processor. Each subdirectory is a different program, plus shared runtime inapp/utils/and microbenchmarks inapp/ubmark/
asm/: A C++ RISC-V assembler/disassembler shared by the FL processor, test harnesses, and tools
cmake/: Helper code for the CMake build system, including the Verilog-as-a-language support files
defs/: Common SystemVerilog definitions used across the processor (ISA.vfor opcodes,UArch.vfor default parameters and types)
docs/: Zeppelin’s documentation (this site)
fl/: Functional-level (FL) utilities, including the C++ FL processor implementation, a wrapper (fl-sim) to run code on it, the FL peripherals, and the Verilog DPI shim used to drive RTL testbenches from C++
hw/: All hardware designs for the processor. The directory is split into several subdirectories, each with an associatedtest/subdirectory for unit tests:
common/: Common hardware modules (FIFOs, priority encoders, the iSLIP matching core)
ctrl_flow/: Control Flow Unit (CFU) and its helpers
decode_issue/: DIU and supporting designs (rename table, issue queues, instruction mapper/router, decoder, instruction checks, register file)
execute/: Execute unit implementations (ALU, control-flow execute, load-store, multiple multiply/divide/remainder variants)
fetch/: Fetch unit and supporting designs (address generator, squash tracker, branch predictor, sequence-number generator)
top/: The top-level processor (Zeppelin.v) and integration tests:
sim/:Zeppelin_sim.vsimulator wrapper and supportingSimUtils.v/FLPeripherals.vshims for running ELFs
test/:ZeppelinTestHarness.v, the ELF-basedZeppelin_elf_test.v, and the directed and golden test suites undertest_cases/
util/: Utility modules (SSSeqAgeage tracker, the simulation-only stage delay modules, trace-header helpers)
writeback_commit/: WCU and supporting designs (multi-ROBSSROB, age-based arbiterSSWCUArb, decoupling FIFOWCUFifo)
intf/: The hardware interfaces used to connect Zeppelin’s units (F__DIntf,D__XIntf,X__WIntf,MemIntf,CompleteNotif,CommitNotif,ControlFlowNotif,InstTraceNotif,InstCheckIntf)
lint/: Linting configuration and waivers for the Verilog sources
test/: Shared testing infrastructure (TestUtils.v,FLTestUtils.v, theMemIntfTestServermodel, and the C++sim.cpptestbench entry point)
tools/: Tools used to support Zeppelin’s development:
rvelfdump.cpp: A program to turn a compiled RISC-V program into a text-basedaddress: datamapping
spi_flash/: A Python program to communicate a text-basedaddress: datamapping to an FPGA emulation of Zeppelin over SPI
verif_gen_elf_tests.py,verif_riscv_dv_*.py,verif_elf_*.yml: Helpers for generating ELF-based test suites and driving the riscv-dv random-instruction framework
types/: Common SystemVerilog types (MemMsg)
verilator_waivers.vlt: Project-wide Verilator lint waivers