135 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			135 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
TEMPLATES := ../../rtl/processor_templates
 | 
						|
MV := mv
 | 
						|
 | 
						|
.DEFAULT_GOAL := help
 | 
						|
 | 
						|
TASK := clean $(BITSTREAM)
 | 
						|
 | 
						|
FOMU_REV ?= pvt
 | 
						|
OrangeCrab_REV ?= r02-25F
 | 
						|
UPduino_REV ?= v3
 | 
						|
 | 
						|
#ifndef BOARD
 | 
						|
#$(error BOARD needs to be set to 'Fomu', 'iCESugar', 'UPDuino', 'iCEBreaker' or 'OrangeCrab' !)
 | 
						|
#endif
 | 
						|
 | 
						|
run:
 | 
						|
	$(eval TASK ?= clean $(BITSTREAM))
 | 
						|
	$(MAKE) -f common.mk \
 | 
						|
	  BOARD_SRC=./board_tops/neorv32_$(BOARD)_BoardTop_$(DESIGN).vhd \
 | 
						|
	  TOP=neorv32_$(BOARD)_BoardTop_$(DESIGN) \
 | 
						|
	  ID=$(DESIGN) \
 | 
						|
	  $(TASK)
 | 
						|
	IMPL="$${BITSTREAM%%.*}"; for item in ".bit" ".svf"; do \
 | 
						|
	  if [ -f "./$$IMPL$$item" ]; then \
 | 
						|
	    $(MV) "./$$IMPL$$item" ./; \
 | 
						|
	  fi \
 | 
						|
	done
 | 
						|
 | 
						|
# Boards
 | 
						|
 | 
						|
Fomu:
 | 
						|
	$(eval BITSTREAM ?= neorv32_$(BOARD)_$(FOMU_REV)_$(DESIGN).bit)
 | 
						|
ifeq ($(DESIGN),Minimal)
 | 
						|
	$(eval IMEM_SRC := ../../rtl/core/mem/neorv32_imem.default.vhd)
 | 
						|
else
 | 
						|
	$(eval IMEM_SRC := devices/ice40/neorv32_imem.ice40up_spram.vhd)
 | 
						|
endif
 | 
						|
	$(eval NEORV32_MEM_SRC ?= ${IMEM_SRC} devices/ice40/neorv32_dmem.ice40up_spram.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  BITSTREAM="$(BITSTREAM)" \
 | 
						|
	  NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
 | 
						|
	  run
 | 
						|
 | 
						|
iCESugar:
 | 
						|
	$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
 | 
						|
	$(eval NEORV32_MEM_SRC ?= devices/ice40/neorv32_imem.ice40up_spram.vhd devices/ice40/neorv32_dmem.ice40up_spram.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  BITSTREAM="$(BITSTREAM)" \
 | 
						|
	  NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
 | 
						|
	  run
 | 
						|
 | 
						|
UPduino:
 | 
						|
	$(eval BITSTREAM ?= neorv32_$(BOARD)_$(UPduino_REV)_$(DESIGN).bit)
 | 
						|
	$(eval NEORV32_MEM_SRC ?= devices/ice40/neorv32_imem.ice40up_spram.vhd devices/ice40/neorv32_dmem.ice40up_spram.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  BITSTREAM="$(BITSTREAM)" \
 | 
						|
	  NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
 | 
						|
	  run
 | 
						|
 | 
						|
OrangeCrab:
 | 
						|
	$(eval BITSTREAM ?= neorv32_$(BOARD)_$(OrangeCrab_REV)_$(DESIGN).bit)
 | 
						|
	$(eval NEORV32_MEM_SRC ?= ../../rtl/core/mem/neorv32_imem.default.vhd ../../rtl/core/mem/neorv32_dmem.default.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  BITSTREAM="$(BITSTREAM)" \
 | 
						|
	  NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
 | 
						|
	  run
 | 
						|
 | 
						|
AlhambraII:
 | 
						|
	$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
 | 
						|
	$(eval NEORV32_MEM_SRC ?= ../../rtl/core/mem/neorv32_imem.default.vhd ../../rtl/core/mem/neorv32_dmem.default.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  BITSTREAM="$(BITSTREAM)" \
 | 
						|
	  NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
 | 
						|
	  run
 | 
						|
 | 
						|
ULX3S:
 | 
						|
	$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
 | 
						|
	$(eval NEORV32_MEM_SRC ?= ../../rtl/core/mem/neorv32_imem.default.vhd ../../rtl/core/mem/neorv32_dmem.default.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  BITSTREAM="$(BITSTREAM)" \
 | 
						|
	  NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
 | 
						|
	  run
 | 
						|
	  
 | 
						|
iCEBreaker:
 | 
						|
	$(eval BITSTREAM ?= neorv32_$(BOARD)_$(DESIGN).bit)
 | 
						|
	$(eval NEORV32_MEM_SRC ?= devices/ice40/neorv32_imem.ice40up_spram.vhd devices/ice40/neorv32_dmem.ice40up_spram.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  BITSTREAM="$(BITSTREAM)" \
 | 
						|
	  NEORV32_MEM_SRC="$(NEORV32_MEM_SRC)" \
 | 
						|
	  run
 | 
						|
 | 
						|
# Designs
 | 
						|
 | 
						|
Minimal:
 | 
						|
	$(eval DESIGN ?= $@)
 | 
						|
	$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_Minimal*.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  DESIGN="$(DESIGN)" \
 | 
						|
	  DESIGN_SRC="$(DESIGN_SRC)" \
 | 
						|
	  $(BOARD)
 | 
						|
 | 
						|
MinimalBoot:
 | 
						|
	$(eval DESIGN ?= $@)
 | 
						|
	$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_MinimalBoot.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  DESIGN="$(DESIGN)" \
 | 
						|
	  DESIGN_SRC="$(DESIGN_SRC)" \
 | 
						|
	  $(BOARD)
 | 
						|
 | 
						|
UP5KDemo:
 | 
						|
	$(eval DESIGN ?= $@)
 | 
						|
	$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_UP5KDemo.vhd)
 | 
						|
	$(MAKE) \
 | 
						|
	  DESIGN="$(DESIGN)" \
 | 
						|
	  DESIGN_SRC="$(DESIGN_SRC)" \
 | 
						|
	  $(BOARD)
 | 
						|
 | 
						|
MixedLanguage:
 | 
						|
	$(eval DESIGN ?= $@)
 | 
						|
	$(eval DESIGN_SRC ?= $(TEMPLATES)/neorv32_ProcessorTop_Minimal*.vhd)
 | 
						|
	$(eval NEORV32_VERILOG_SRC ?= devices/ice40/sb_ice40_components.v board_tops/neorv32_Fomu_MixedLanguage_ClkGen.v)
 | 
						|
	$(MAKE) \
 | 
						|
	  DESIGN="$(DESIGN)" \
 | 
						|
	  DESIGN_SRC="$(DESIGN_SRC)" \
 | 
						|
	  NEORV32_VERILOG_SRC="$(NEORV32_VERILOG_SRC)" \
 | 
						|
	  $(BOARD)
 | 
						|
 | 
						|
# Help
 | 
						|
 | 
						|
help:
 | 
						|
	@echo "Open-Source Synthesis, P&R, Routing and Bitstream Generation"
 | 
						|
	@echo "Usage:   make BOARD=<fpga board> <board top>"
 | 
						|
	@echo "Example: make BOARD=Fomu Minimal"
 | 
						|
 |