Files
retroSoC/rtl/mini/mk/verilator.mk
T
maksyuki 1b69bffe4e refactor: remove HAVE_DEBUG feature and related code
- Eliminated the HAVE_DEBUG preprocessor directive and all associated code from the RTL and test files.
- Updated the Emulator class to remove JTAG-related debug signals and configurations.
- Adjusted the pin map and JSON configurations to exclude debug-related entries.
- Modified the management core wrapper to only support the HAZARD3 core, removing references to the PICORV32 core.
- Updated tests to reflect the removal of the HAVE_DEBUG feature, ensuring they no longer check for debug-related conditions.
- Cleaned up various scripts and makefiles to remove dependencies on the HAVE_DEBUG flag, streamlining the build process.
2026-08-06 08:52:54 +08:00

136 lines
6.0 KiB
Makefile

BUILD_DIR := $(SIM_BUILD_ROOT)
RTL_LINT_DIR := $(VARIANT_ROOT)/lint/verilator
SOC_CSRC_HOME += $(RTL_PATH)/dv/verilator/csrc
SOC_CSRC_LIB_HOME += $(RTL_PATH)/dv/verilator/csrc
SOC_CXXFILES += $(sort $(wildcard $(SOC_CSRC_HOME)/*.cpp))
SOC_CSRC_INCLPATH += -I$(SOC_CSRC_HOME)
SOC_CSRC_INCLPATH += $(foreach val, $(SOC_CSRC_LIB_HOME), -I$(val))
SOC_VSRC_TOP := retrosoc_top
SOC_VSRC_HOME += $(RTL_PATH)/dv/verilator/rtl
SOC_COMPILE_HOME := $(BUILD_DIR)/emu_compile
SOC_VXXFILES := $(RTL_FLIST)
SOC_VXXFILES += $(RTL_PATH)/dv/model/ESP_PSRAM64H.sv
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/flash_read_binder.sv
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/QSPIFlash.sv
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/retrosoc_top.sv
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/sdram_verilator_model.sv
SOC_VSRC_INCLPATH += -I$(SOC_VSRC_HOME)
VERILATOR ?= verilator
VERILATOR_JOBS ?= $(JOBS)
VERILATOR_CXXFLAGS += -std=c++17 -Wall $(SOC_CSRC_INCLPATH) -DDUMP_WAVE_FST
VERILATOR_FLAGS += --cc --exe --no-timing --top-module $(SOC_VSRC_TOP)
VERILATOR_FLAGS += --x-assign unique -O3 -CFLAGS "$(VERILATOR_CXXFLAGS)"
VERILATOR_FLAGS += --trace-fst --assert --stats-vars --output-split 30000 --output-split-cfuncs 30000
VERILATOR_FLAGS += --timescale "1ns/1ns" -Wno-fatal
VERILATOR_FLAGS += -o $(BUILD_DIR)/emu
VERILATOR_FLAGS += -Mdir $(SOC_COMPILE_HOME)
VERILATOR_FLAGS += $(SOC_VSRC_INCLPATH) $(SOC_CXXFILES) $(SOC_VXXFILES)
RTL_LINT_FLAGS := --lint-only --no-timing --top-module $(SOC_VSRC_TOP)
RTL_LINT_FLAGS += --assert --Wall --timescale "1ns/1ns" -Wno-fatal
RTL_LINT_FLAGS += $(SOC_VSRC_INCLPATH) $(SOC_VXXFILES)
SOC_SIM_TIME ?= 180
OPENOCD ?= openocd
RISCV_GDB ?= riscv32-unknown-elf-gdb
DEBUG_SIM_DIR := $(SIM_BUILD_ROOT)/debug
DEBUG_OPENOCD_CONFIG := $(RTL_PATH)/dv/verilator/openocd/retrosoc_hazard3.cfg
DEBUG_SIM_SESSION := $(ROOT_PATH)/scripts/run_debug_session.py
VERILATOR_STAMP := $(BUILD_DIR)/verilate.stamp
VERILATOR_DEPFILE := $(BUILD_DIR)/verilate.d
VERILATOR_EMU := $(BUILD_DIR)/emu
RTL_LINT_STAMP := $(RTL_LINT_DIR)/rtl-lint.stamp
RTL_LINT_DEPFILE := $(RTL_LINT_DIR)/rtl-lint.d
VERILATOR_EXTRA_SOURCES := $(RTL_PATH)/dv/model/ESP_PSRAM64H.sv \
$(RTL_PATH)/dv/verilator/rtl/flash_read_binder.sv \
$(RTL_PATH)/dv/verilator/rtl/QSPIFlash.sv \
$(RTL_PATH)/dv/verilator/rtl/retrosoc_top.sv \
$(RTL_PATH)/dv/verilator/rtl/sdram_verilator_model.sv \
$(SOC_CXXFILES) $(wildcard $(SOC_CSRC_HOME)/*.h) \
$(wildcard $(SOC_CSRC_HOME)/*.hpp)
-include $(VERILATOR_DEPFILE) $(RTL_LINT_DEPFILE)
CCACHE := $(shell command -v ccache 2>/dev/null)
ifneq ($(CCACHE),)
export OBJCACHE = ccache
export CCACHE_DIR = $(CACHE_ROOT)/ccache/verilator
export CCACHE_TEMPDIR = $(CACHE_ROOT)/ccache/verilator/tmp
endif
$(VERILATOR_STAMP): $(MPW_VARIANT_STAMP) $(FILELIST_STAMP) $(VERILATOR_EXTRA_SOURCES)
@mkdir -p $(BUILD_DIR)
@mkdir -p $(CCACHE_TEMPDIR)
python3 $(ROOT_PATH)/scripts/run_flow.py --tool verilator \
--log $(BUILD_DIR)/verilating.log --result $(BUILD_DIR)/result-verilate.json \
-- $(VERILATOR) $(VERILATOR_FLAGS)
python3 $(RTL_PATH)/script/filelist_deps.py $(RTL_FLIST) \
$(foreach source,$(VERILATOR_EXTRA_SOURCES),--extra $(source)) \
--target $@ --output $(VERILATOR_DEPFILE)
@touch $@
$(VERILATOR_EMU): $(VERILATOR_STAMP)
python3 $(ROOT_PATH)/scripts/run_flow.py --tool verilator-compile \
--log $(BUILD_DIR)/compile.log --result $(BUILD_DIR)/result-compile.json \
-- make -j$(VERILATOR_JOBS) VM_PARALLEL_BUILDS=1 OPT_FAST=-O3 -C $(SOC_COMPILE_HOME) \
-f V$(SOC_VSRC_TOP).mk
$(RTL_LINT_STAMP): $(MPW_VARIANT_STAMP) $(FILELIST_STAMP) $(VERILATOR_EXTRA_SOURCES)
@mkdir -p $(RTL_LINT_DIR)
python3 $(ROOT_PATH)/scripts/run_flow.py --tool rtl-lint \
--log $(RTL_LINT_DIR)/lint.log --result $(RTL_LINT_DIR)/result-rtl-lint.json \
-- $(VERILATOR) $(RTL_LINT_FLAGS)
python3 $(RTL_PATH)/script/filelist_deps.py $(RTL_FLIST) \
$(foreach source,$(VERILATOR_EXTRA_SOURCES),--extra $(source)) \
--target $@ --output $(RTL_LINT_DEPFILE)
@touch $@
rtl-lint: $(RTL_LINT_STAMP) | manifest
check-rtl-lint: rtl-lint
python3 $(ROOT_PATH)/scripts/analyze_warnings.py check --root $(ROOT_PATH) \
--profile $(PROFILE_NAME) --variant-root $(VARIANT_ROOT) --tool rtl-lint \
--output $(META_DIR)/rtl-lint-warnings.json
lint: rtl-lint
comp: $(VERILATOR_EMU)
sim: comp
@test -f $(SW_BUILD_DIR)/$(SIM_FIRMWARE_NAME).bin || { \
echo "firmware image missing; run 'make firmware' first" >&2; exit 1; }
python3 $(ROOT_PATH)/scripts/run_flow.py --tool verilator-sim --stream-bytes \
--log $(BUILD_DIR)/sim.log --result $(BUILD_DIR)/result-sim.json \
--cwd $(BUILD_DIR) -- $(BUILD_DIR)/emu -i $(SW_BUILD_DIR)/$(SIM_FIRMWARE_NAME).bin \
-t $(SOC_SIM_TIME)
python3 $(ROOT_PATH)/scripts/check_simulation.py --log $(BUILD_DIR)/sim.log \
--result $(BUILD_DIR)/result-sim-check.json --require '$(SIM_SUCCESS_MARKER)'
debug-sim: comp firmware
@test "$(SIMU)" = VERILATOR || { echo "debug-sim requires SIMU=VERILATOR" >&2; exit 2; }
$(FLOW_PYTHON) $(ROOT_PATH)/scripts/doctor.py --root $(ROOT_PATH) --simu $(SIMU) \
--synth $(SYNTH) --sta $(STA) --pdk $(PDK) --formal $(FORMAL) \
--require-debug-tools --lock $(LOCK_FILE)
python3 $(DEBUG_SIM_SESSION) \
--emulator $(VERILATOR_EMU) \
--image $(SW_BUILD_DIR)/$(FIRMWARE_NAME).bin \
--elf $(SW_BUILD_DIR)/firmware \
--openocd $(OPENOCD) \
--gdb $(RISCV_GDB) \
--openocd-config $(DEBUG_OPENOCD_CONFIG) \
--log-dir $(DEBUG_SIM_DIR) \
--result $(DEBUG_SIM_DIR)/result-debug-sim.json \
--timeout $(SOC_SIM_TIME) \
--sim-time $(SOC_SIM_TIME)
comp sim: | manifest
wave:
clean:
python3 $(ROOT_PATH)/scripts/clean.py --root $(ROOT_PATH) --path $(BUILD_DIR)
python3 $(ROOT_PATH)/scripts/clean.py --root $(ROOT_PATH) --path $(RTL_LINT_DIR)
.PHONY: lint rtl-lint check-rtl-lint comp sim debug-sim clean