Hazard3/test/sim/soc_cxxrtl/Makefile

79 lines
2.3 KiB
Makefile

# To build single-core dual-port tb: make
# To build dual-core single-port tb: make DOTF=tb_multicore.f
include ../project_paths.mk
TOP := example_soc
DOTF := tb.f
CONFIG := default
TBEXEC := $(patsubst %.f,%,$(DOTF))
FILE_LIST := $(shell HDL=$(HDL) $(SCRIPTS)/listfiles $(DOTF))
BUILD_DIR := build-$(patsubst %.f,%,$(DOTF))
SRC = tb.cpp softuart.c
INC = -I ${BUILD_DIR} -I ./
# Note: clang++-18 has a >20x compile time regression, even at low
# optimisation levels. I have tried clang++-16 and clang++-17, both fine.
CLANGXX := clang++-16
.PHONY: clean all lint
all: $(TBEXEC)
SYNTH_CMD += read_verilog -I ../../../hdl -DCONFIG_HEADER="config_$(CONFIG).vh" $(FILE_LIST);
SYNTH_CMD += hierarchy -top $(TOP);
SYNTH_CMD += synth -run coarse; opt -fine memory_map; techmap; opt; abc -dff; clean;
SYNTH_CMD += select -assert-none t:\$[!_];
SYNTH_CMD += write_verilog -noattr $(BUILD_DIR)/synth.v;
SYNTH_CMD += synth_ecp5 -top $(TOP) -json $(BUILD_DIR)/soc.json;
synth: $(FILE_LIST) $(wildcard *.vh)
mkdir -p $(BUILD_DIR)
yosys -p '$(SYNTH_CMD)'
nextpnr:
nextpnr-ecp5 --25k --package CABGA381 --speed 6 --lpf-allow-unconstrained --textcfg $(BUILD_DIR)/soc.cfg --lpf soc.lpf --freq 25 --json $(BUILD_DIR)/soc.json
$(BUILD_DIR)/soc.bit: $(BUILD_DIR)/soc.cfg
ecppack --svf $(BUILD_DIR)/soc.svf ./$< ./$@
$(BUILD_DIR)/soc.svf : $(BUILD_DIR)/soc.bit
prog: $(BUILD_DIR)/soc.bit
ecpdap program $(BUILD_DIR)/soc.bit
flash: $(BUILD_DIR)/soc.bit
ecpdap flash write $(BUILD_DIR)/soc.bit
CXXRTL_CMD += read_verilog -I ../../../hdl -DCONFIG_HEADER="config_$(CONFIG).vh" $(FILE_LIST);
CXXRTL_CMD += hierarchy -top $(TOP);
CXXRTL_CMD += write_cxxrtl $(BUILD_DIR)/dut.cpp
$(BUILD_DIR)/dut.cpp: $(FILE_LIST) $(wildcard *.vh)
mkdir -p $(BUILD_DIR)
yosys -p '$(CXXRTL_CMD)' 2>&1 > $(BUILD_DIR)/cxxrtl.log
clean::
rm -rf $(BUILD_DIR) $(TBEXEC)
sim: $(TBEXEC)
./$(TBEXEC) --port 9824
openocd:
openocd -f openocd.cfg
jlink:
openocd -f openocd-jlink.cfg
gdb:
/opt/riscv/bin/riscv32-unknown-elf-gdb -x gdb_init
$(TBEXEC): $(BUILD_DIR)/dut.cpp tb.cpp
$(CLANGXX) -O3 -std=c++14 $(addprefix -D,$(CDEFINES) $(CDEFINES_$(DOTF))) -I $(shell yosys-config --datdir)/include/backends/cxxrtl/runtime $(INC) ${SRC} -o $(TBEXEC)
lint:
verilator --lint-only --top-module $(TOP) -I$(HDL) $(FILE_LIST)