Makefile 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. # Configuration
  2. PROCESSOR ?= NONE # Supported RISC8, OISC8
  3. PROCESSOR_LOW = $(strip $(shell echo $(PROCESSOR) | tr A-Z a-z))
  4. QUARTUS_DIR = /opt/altera/18.1/quartus
  5. MODELSIM_DIR = /opt/altera/18.1/modelsim_ase
  6. PROJECT_NAME = UCL_project_y3
  7. MODELSIM_GUI = ${QUARTUS_DIR}/bin/quartus_sh -t "${QUARTUS_DIR}/common/tcl/internal/nativelink/qnativesim.tcl" --rtl_sim "${PROJECT_NAME}" "${PROJECT_NAME}"
  8. MODELSIM_BIN = ${MODELSIM_DIR}/bin/vsim
  9. QUARTUS_MACROS = --set VERILOG_MACRO="SYNTHESIS=1"
  10. # OUTPUT FILES
  11. OUTPUTP = output_files/$(PROJECT_NAME)
  12. OUT_ASM = $(OUTPUTP).sof
  13. # assembly compiled and memory sliced files
  14. BUILD_DIR = memory/build
  15. # Program & Monitor
  16. JTAG ?= 1
  17. TTY ?= /dev/ttyUSB0
  18. BAUD ?= 9600
  19. GENTABLE_BIN = python3 tools/gen_sv.py
  20. ASMC = python3 tools/$(PROCESSOR_LOW)asm.py
  21. FUTILS = python3 tools/format_utils.py
  22. RAM_SIZE ?= 4096
  23. RAM_WIDTH ?= 16
  24. ASMDEP := $(shell find memory -name '*${PROCESSOR_LOW}.asm')
  25. ifeq "${PROCESSOR_LOW}" "risc8"
  26. MEMSLICES = 0 1 2 3
  27. MEMTYPE = mem
  28. TEXT_WIDTH = 8
  29. else ifeq "${PROCESSOR_LOW}" "oisc8"
  30. MEMSLICES = 0 1 2
  31. MEMTYPE = binary
  32. TEXT_WIDTH = 9
  33. else
  34. $(error "Processor not supported: ${PROCESSOR_LOW}")
  35. endif
  36. BUILD_OUT = $(addprefix ${BUILD_DIR}/,$(notdir $(ASMDEP:.asm=.text.o) $(ASMDEP:.asm=.data.o)))
  37. MEM_BUILD = $(addprefix ${BUILD_DIR}/,$(notdir $(ASMDEP:.asm=.data.mem) $(ASMDEP:.asm=.data.mif) $(foreach i,$(MEMSLICES),$(ASMDEP:.asm=.text.$(i).mem)) $(foreach i,$(MEMSLICES),$(ASMDEP:.asm=.text.$(i).mif)) ) )
  38. #$(error MEM_BUILD: ${MEM_BUILD})
  39. VERILOG ?= $(wildcard src/*/*.sv)
  40. # Genreate sv case table from csv
  41. CSVS = src/risc/controller.csv
  42. define execute-gentable
  43. $(GENTABLE_BIN) $(1) $(1:.csv=.sv)
  44. endef
  45. analysis: $(MEM_BUILD)
  46. ${QUARTUS_DIR}/bin/quartus_map --read_settings_files=on --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME} --analysis_and_elaboration
  47. $(OUT_ASM): $(ASMDEP)
  48. ${QUARTUS_DIR}/bin/quartus_map --read_settings_files=on --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  49. ${QUARTUS_DIR}/bin/quartus_fit --read_settings_files=off --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  50. ${QUARTUS_DIR}/bin/quartus_asm --read_settings_files=off --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  51. $(OUT_STA): $(OUT_ASM)
  52. ${QUARTUS_DIR}/bin/quartus_sta ${PROJECT_NAME} -c ${PROJECT_NAME}
  53. eda: $(OUT_STA)
  54. ${QUARTUS_DIR}/bin/quartus_eda --read_settings_files=off --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  55. program: $(OUT_ASM)
  56. ${QUARTUS_DIR}/bin/quartus_pgm -z -c $(JTAG) -m jtag -o "p;$(OUT_ASM)@1"
  57. listdev:
  58. ${QUARTUS_DIR}/bin/quartus_pgm -l
  59. monitor:
  60. hash cu && echo "Escape with ~." && cu -l $(TTY) -s $(BAUD)
  61. #hash minicom && minicom -D $(TTY) -b $(BAUD)
  62. modelsim_cli:
  63. ${MODELSIM_BIN} -c
  64. modelsim_gui:
  65. ${MODELSIM_GUI}
  66. compile_all:
  67. ${MODELSIM_BIN} -c -do simulation/modelsim/${PROJECT_NAME}_run_msim_rtl_verilog.do -do exit
  68. %.sv: %.csv $(CSVS)
  69. $(GENTABLE_BIN) $< $(@:.csv=.sv)
  70. gentable:
  71. $(foreach x,$(CSVS),$(call execute-gentable,./$(x)))
  72. simulate: $(VERILOG)
  73. @echo ${MODELSIM_BIN} -c -do "vlog -sv -work work +incdir+$(abspath $(dir $<)) $(abspath $<)" -do exit
  74. .PHONY: compile
  75. testbench: compile
  76. ${MODELSIM_BIN} -c -do "vsim work.$(basename $(notdir $(VERILOG)))_tb" -do "run -all" -do exit
  77. $(BUILD_DIR)/%.text.o $(BUILD_DIR)/%.data.o: $(ASMDEP)
  78. $(ASMC) $< -o $(BUILD_DIR) -f
  79. build: $(BUILD_OUT)
  80. %.text.0.mem %.text.1.mem %.text.2.mem %.text.3.mem: %.text.o $(BUILD_OUT)
  81. $(FUTILS) -w $(TEXT_WIDTH) -t memb -f -S $(words $(MEMSLICES)) $<
  82. %.text.0.mif %.text.1.mif %.text.2.mif %.text.3.mif: %.text.o $(BUILD_OUT)
  83. $(FUTILS) -w $(TEXT_WIDTH) -t mif -f -S $(words $(MEMSLICES)) $<
  84. %.data.mem: %.data.o $(BUILD_OUT)
  85. $(FUTILS) -w $(RAM_WIDTH) -t memh -f $<
  86. %.data.mif: %.data.o $(BUILD_OUT)
  87. $(FUTILS) -w $(RAM_WIDTH) -t mif -f $<
  88. %.text.mem: %.text.o $(BUILD_OUT)
  89. $(ASMC) -t mem -f $< .text
  90. %.text.mif: %.text.o $(BUILD_OUT)
  91. $(ASMC) -t mif -f $< .text
  92. memory: $(MEM_BUILD)
  93. flash: $(BUILD_OUT)
  94. $(QUARTUS_DIR)/bin/quartus_stp -t ./scripts/update_$(PROCESSOR_LOW).tcl
  95. clean:
  96. rm -f $(MEMRES)
  97. rm -f $(OUT_ASM)
  98. #.PHONY: clean