diff options
Diffstat (limited to 'rv64cpu/CMakeLists.txt')
| -rw-r--r-- | rv64cpu/CMakeLists.txt | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/rv64cpu/CMakeLists.txt b/rv64cpu/CMakeLists.txt new file mode 100644 index 0000000..1242a58 --- /dev/null +++ b/rv64cpu/CMakeLists.txt @@ -0,0 +1,72 @@ +cmake_minimum_required(VERSION 3.20) +project(richard_cpu + VERSION 0.1.0 + DESCRIPTION "RV64IMAZicsr_Zifencei Five-Stage Pipelined CPU SoC" + LANGUAGES CXX C +) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# ─── Options ──────────────────────────────────────────────────────────────────── +option(ENABLE_TRACE "Enable VCD waveform tracing" ON) +option(ENABLE_COVERAGE "Enable code coverage for RTL" OFF) +option(BUILD_SW "Build software targets (requires riscv64 toolchain)" OFF) + +# ─── Locate Verilator ──────────────────────────────────────────────────────────── +find_package(verilator REQUIRED HINTS $ENV{VERILATOR_ROOT}) +message(STATUS "Found Verilator: ${verilator_DIR}") + +# ─── RTL Source Directories ────────────────────────────────────────────────────── +set(RTL_DIR ${CMAKE_SOURCE_DIR}/rtl) +set(RTL_CORE_DIR ${RTL_DIR}/core) +set(RTL_CACHE_DIR ${RTL_DIR}/cache) +set(RTL_BUS_DIR ${RTL_DIR}/bus) +set(RTL_PERIPS_DIR ${RTL_DIR}/perips) +set(RTL_SOC_DIR ${RTL_DIR}/soc) +set(RTL_INCLUDE_DIR ${RTL_CORE_DIR}/include) + +# ─── Common Verilator Flags ────────────────────────────────────────────────────── +set(VERILATOR_COMMON_FLAGS + --sv + -Wall + -Wno-DECLFILENAME + -Wno-UNUSED + --x-initial unique + --x-assign unique +) + +if(ENABLE_TRACE) + list(APPEND VERILATOR_COMMON_FLAGS --trace) + add_compile_definitions(VM_TRACE=1) +endif() + +if(ENABLE_COVERAGE) + list(APPEND VERILATOR_COMMON_FLAGS --coverage) +endif() + +# ─── Include Verilator CMake Helper ────────────────────────────────────────────── +include(${CMAKE_SOURCE_DIR}/tools/verilator.cmake) + +# ─── Waveform Output Directory ────────────────────────────────────────────────── +file(MAKE_DIRECTORY ${CMAKE_SOURCE_DIR}/waves) + +# ─── Testbench Subdirectory ───────────────────────────────────────────────────── +add_subdirectory(tb) + +# ─── Software Subdirectory (optional) ─────────────────────────────────────────── +if(BUILD_SW) + add_subdirectory(sw) +endif() + +# ─── Summary ──────────────────────────────────────────────────────────────────── +message(STATUS "") +message(STATUS "╔══════════════════════════════════════════════╗") +message(STATUS "║ richard-cpu build configuration ║") +message(STATUS "╠══════════════════════════════════════════════╣") +message(STATUS "║ Trace: ${ENABLE_TRACE}") +message(STATUS "║ Coverage: ${ENABLE_COVERAGE}") +message(STATUS "║ Software: ${BUILD_SW}") +message(STATUS "╚══════════════════════════════════════════════╝") +message(STATUS "") |
