# Project setup TOP ?= top SIM = iverilog WAVE = vvp PCF = constraints/iceFUN.pcf TIMING = constraints/timing.py YOSYS = yosys PNR = nextpnr-ice40 IPACK = icepack BURN = iceFUNprog SBY = sby BUILD_DIR = ./build VCD = $(BUILD_DIR)/waveform.vcd BIN_TARGET = build/top.bin # Files MODULES += $(wildcard rtl/*.v) TEST = tb.v define colorecho @tput setaf 6 @echo $1 @tput sgr0 endef .PHONY: all clean burn all: sim sim: $(TEST) $(MODULES) @mkdir -p $(BUILD_DIR) @$(SIM) -o $(BUILD_DIR)/tb_out $< $(MODULES) && $(WAVE) $(BUILD_DIR)/tb_out && open $(VCD) $(BUILD_DIR)/top.json: $(MODULES) $(call colorecho, "Synthesizing ...") mkdir -p $(BUILD_DIR) $(YOSYS) -p "synth_ice40 -top uart_echo -json build/top.json" -q $^ $(BIN_TARGET): $(BUILD_DIR)/top.json $(PCF) $(TIMING) $(call colorecho, "Routing and building binary stream ...") $(PNR) -r --hx8k --json $< --package cb132 \ --asc $(BUILD_DIR)/top.asc --opt-timing --pcf $(PCF) \ --pre-pack $(TIMING) -l $(BUILD_DIR)/pnr_report.txt -q $(IPACK) $(BUILD_DIR)/top.asc $@ $(call colorecho, "Done!") burn: $(BIN_TARGET) $(BURN) $< fv: $(SBY) -f $(FV_SRC) -d $(BUILD_DIR)/fv clean: rm -rf $(BUILD_DIR)