-
David Lanzendörfer authored9040a27e
Makefile 2.58 KiB
# Parameters of network:
NETWORK_PARAMS = \
NUM_INPUT_SYNAPSES:16 \
NUM_INPUT_NEURONS:5 \
NUM_OUTPUT_NEURONS:16 \
NUM_HIDDEN_NEURONS_W:5 \
NUM_HIDDEN_NEURONS_H:6
TARGET_BOARD?=ecp5_minifpga
CICD_VERILATOR_CFLAGS?=
BENCHES=
VERILATOR_DIR?=/usr/share/verilator/include
VERILATOR_CFLAGS=-I$(VERILATOR_DIR) -Iobj_dir -std=c++17 -fcoroutines $(DFLAGS)
VERILATOR=verilator --trace --timing -Wno-lint --vpi \
--timescale 1ns/1ps \
-Isrc/sim \
-Isubmodules/picorv32 \
-Isubmodules/picorv32/picosoc
ifeq ($(TARGET_BOARD), ecp5_minifpga)
NEXTPNR=nextpnr-ecp5
TARGET=ecp5
BENCHES+=testbench_ecp5_minifpga.bin
LPFILE=configs/ecp5/minifpga.lpf
endif
VERILATOR_FILES= \
$(VERILATOR_DIR)/verilated.cpp \
$(VERILATOR_DIR)/verilated_vpi.cpp \
$(VERILATOR_DIR)/verilated_vcd_c.cpp \
$(VERILATOR_DIR)/verilated_threads.cpp \
$(VERILATOR_DIR)/verilated_timing.cpp \
src/cpptb/telnet_server.cpp \
src/cpptb/telnet_session.cpp
all: result/firmware.hex $(BENCHES)
src/rtl/params.vh:
@ $(foreach PARAMS,$(NETWORK_PARAMS), \
$(eval PARAM = $(word 1,$(subst :, ,$(PARAMS)))) \
$(eval VALUE = $(word 2,$(subst :, ,$(PARAMS)))) \
\
echo "\`define $(PARAM) $(VALUE)" >> $@ ; \
)
src/cpptb/params.h:
@ $(foreach PARAMS,$(NETWORK_PARAMS), \
$(eval PARAM = $(word 1,$(subst :, ,$(PARAMS)))) \
$(eval VALUE = $(word 2,$(subst :, ,$(PARAMS)))) \
\
echo "#define $(PARAM) $(VALUE)" >> $@ ; \
)
firmware/include/defines.h:
@ $(foreach PARAMS,$(NETWORK_PARAMS), \
$(eval PARAM = $(word 1,$(subst :, ,$(PARAMS)))) \
$(eval VALUE = $(word 2,$(subst :, ,$(PARAMS)))) \
\
echo "#define $(PARAM) $(VALUE)" >> $@ ; \
)
testbench_%.bin: obj_dir/V%__ALL.a src/cpptb/%.cpp src/cpptb/params.h
$(CXX) $(VERILATOR_CFLAGS) $(VERILATOR_FILES) src/cpptb/$*.cpp obj_dir/V$*__ALL.a -o $@
rm -rf obj_dir
obj_dir/V%__ALL.a: src/rtl/%.v src/rtl/params.vh
$(VERILATOR) $(CICD_VERILATOR_CFLAGS) --top-module $* -cc src/rtl/$*.v -Isrc/rtl
make -C obj_dir -f V$*.mk
result/soc.json: result/firmware.hex src/rtl/params.vh result
yosys -s configs/synth.ys -p "synth_ecp5 -top soc -json $@" src/rtl/soc.v
result/soc_out.config: $(LPFILE) # result/soc.json
nextpnr-ecp5 --json result/soc.json --lpf $(LPFILE) --textcfg $@ --freq 50 --package CABGA256 --lpf-allow-unconstrained
result/firmware.hex: result firmware/include/defines.h
make -C firmware firmware.hex
cp firmware/firmware.hex firmware.hex
cp firmware/firmware.hex result/firmware.hex
result:
mkdir -p result
clean:
rm -rf *.bin *.vcd obj_dir src/cpptb/*.o soc.json src/rtl/params.vh \
src/cpptb/params.h firmware/include/defines.h result/firmware.hex
make -C firmware clean