mirror of
https://github.com/retroSoC/retroSoC.git
synced 2026-11-04 22:32:36 +00:00
Add optional Tiny NSS1 PSRAM initialization, identity and geometry checks, mapped CPU/DMA workload coverage, and retained pin-level device verification. Harden shared XPI byte lanes, burst boundaries, response completion and timeout behavior while preserving NOR/SRAM-only boot and Mini compatibility.\n\nValidation: focused P8/XPI tests, ICS55 and IHP130 Verilator P8 replays, Tiny netlist boot, synthesis and observational STA completed. Full long-running Icarus firmware remains deferred to final Tiny qualification.
148 lines
6.7 KiB
Makefile
148 lines
6.7 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 += $(ROOT_PATH)/rtl/model/ESP_PSRAM64H.sv
|
|
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/flash_read_binder.sv
|
|
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/flash_read_byte_binder.sv
|
|
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/QSPIFlash.sv
|
|
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/xpi_fast_flash_model.sv
|
|
SOC_VXXFILES += $(RTL_PATH)/dv/verilator/rtl/xpi_core_verilator.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)
|
|
ifeq ($(WS2812_P3_ACCEPTANCE),YES)
|
|
VERILATOR_FLAGS += -DRETROSOC_WS2812_P3_OBSERVE
|
|
endif
|
|
|
|
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
|
|
VERILATOR_SIM_ARGS ?=
|
|
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 := $(ROOT_PATH)/rtl/model/ESP_PSRAM64H.sv \
|
|
$(RTL_PATH)/dv/verilator/rtl/flash_read_binder.sv \
|
|
$(RTL_PATH)/dv/verilator/rtl/flash_read_byte_binder.sv \
|
|
$(RTL_PATH)/dv/verilator/rtl/QSPIFlash.sv \
|
|
$(RTL_PATH)/dv/verilator/rtl/xpi_fast_flash_model.sv \
|
|
$(RTL_PATH)/dv/verilator/rtl/xpi_core_verilator.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_DEP) $(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 $(ROOT_PATH)/scripts/rtl/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_DEP) $(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 $(ROOT_PATH)/scripts/rtl/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 \
|
|
$(VERILATOR_SIM_ARGS) -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) --have-sram-macro $(HAVE_SRAM_MACRO) \
|
|
--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
|