Makefile 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. QUARTUS_DIR = /opt/altera/18.1/quartus
  2. MODELSIM_DIR = /opt/altera/18.1/modelsim_ase
  3. PROJECT_NAME = UCL_project_y3
  4. MODELSIM_GUI = ${QUARTUS_DIR}/bin/quartus_sh -t "${QUARTUS_DIR}/common/tcl/internal/nativelink/qnativesim.tcl" --rtl_sim "${PROJECT_NAME}" "${PROJECT_NAME}"
  5. MODELSIM_BIN = ${MODELSIM_DIR}/bin/vsim
  6. QUARTUS_MACROS = --set VERILOG_MACRO="SYNTHESIS=1"
  7. # OUTPUT FILES
  8. OUTPUTP = output_files/$(PROJECT_NAME)
  9. OUT_ASM = $(OUTPUTP).sof
  10. # Program & Monitor
  11. JTAG ?= 1
  12. TTY ?= /dev/ttyUSB0
  13. BAUD ?= 9600
  14. GENTABLE_BIN = python3 tools/gen_sv.py
  15. ASMC = python3 tools/risc8asm.py
  16. MEMSIZE ?= 4096
  17. RAMSIZE ?= -1
  18. MEMDEP := $(shell find memory -name '*.asm')
  19. MEMSLICES = 0 1 2 3
  20. MEMRES = $(foreach i,$(MEMSLICES),$(MEMDEP:.asm=.text_$(i).mem)) \
  21. $(foreach i,$(MEMSLICES),$(MEMDEP:.asm=.text_$(i).mif)) \
  22. $(foreach i,$(MEMSLICES),$(MEMDEP:.asm=.text_$(i).uhex)) \
  23. $(MEMDEP:.asm=.data.mem) \
  24. $(MEMDEP:.asm=.data.uhex) \
  25. $(MEMDEP:.asm=.data.mif)
  26. VERILOG ?= $(wildcard src/*/*.sv)
  27. # Genreate sv case table from csv
  28. CSVS = src/risc/controller.csv
  29. define execute-gentable
  30. $(GENTABLE_BIN) $(1) $(1:.csv=.sv)
  31. endef
  32. analysis: compile_mem
  33. ${QUARTUS_DIR}/bin/quartus_map --read_settings_files=on --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME} --analysis_and_elaboration
  34. $(OUT_ASM): $(MEMDEP)
  35. ${QUARTUS_DIR}/bin/quartus_map --read_settings_files=on --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  36. ${QUARTUS_DIR}/bin/quartus_fit --read_settings_files=off --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  37. ${QUARTUS_DIR}/bin/quartus_asm --read_settings_files=off --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  38. $(OUT_STA): $(OUT_ASM)
  39. ${QUARTUS_DIR}/bin/quartus_sta ${PROJECT_NAME} -c ${PROJECT_NAME}
  40. eda: $(OUT_STA)
  41. ${QUARTUS_DIR}/bin/quartus_eda --read_settings_files=off --write_settings_files=off ${QUARTUS_MACROS} ${PROJECT_NAME} -c ${PROJECT_NAME}
  42. program: $(OUT_ASM)
  43. ${QUARTUS_DIR}/bin/quartus_pgm -z -c $(JTAG) -m jtag -o "p;$(OUT_ASM)@1"
  44. listdev:
  45. ${QUARTUS_DIR}/bin/quartus_pgm -l
  46. monitor:
  47. hash cu && echo "Escape with ~." && cu -l $(TTY) -s $(BAUD)
  48. #hash minicom && minicom -D $(TTY) -b $(BAUD)
  49. modelsim_cli:
  50. ${MODELSIM_BIN} -c
  51. modelsim_gui:
  52. ${MODELSIM_GUI}
  53. compile_all:
  54. ${MODELSIM_BIN} -c -do simulation/modelsim/${PROJECT_NAME}_run_msim_rtl_verilog.do -do exit
  55. %.sv: %.csv $(CSVS)
  56. $(GENTABLE_BIN) $< $(@:.csv=.sv)
  57. gentable:
  58. $(foreach x,$(CSVS),$(call execute-gentable,./$(x)))
  59. compile: $(VERILOG)
  60. @echo ${MODELSIM_BIN} -c -do "vlog -sv -work work +incdir+$(abspath $(dir $<)) $(abspath $<)" -do exit
  61. .PHONY: compile
  62. testbench: compile
  63. ${MODELSIM_BIN} -c -do "vsim work.$(basename $(notdir $(VERILOG)))_tb" -do "run -all" -do exit
  64. compile_mem: $(MEMRES)
  65. %.text_0.mem %.text_1.mem %.text_2.mem %.text_3.mem: %.asm
  66. $(ASMC) -t mem -f $< -S $(words $(MEMSLICES)) .text
  67. %.text_0.mif %.text_1.mif %.text_2.mif %.text_3.mif: %.asm
  68. $(ASMC) -t mif -f $< -S $(words $(MEMSLICES)) .text
  69. %.text_0.uhex %.text_1.uhex %.text_2.uhex %.text_3.uhex: %.asm
  70. $(ASMC) -t uhex -f $< -S $(words $(MEMSLICES)) .text
  71. %.data.mem: %.asm
  72. $(ASMC) -t mem -f $< .data
  73. %.data.mif: %.asm
  74. $(ASMC) -t mif -f $< .data
  75. %.data.uhex: %.asm
  76. $(ASMC) -t uhex -f $< .data
  77. flash: $(MEMRES)
  78. $(QUARTUS_DIR)/bin/quartus_stp -t ./scripts/update_risc8.tcl
  79. clean:
  80. rm -f $(MEMRES)
  81. rm -f $(OUT_ASM)
  82. #.PHONY: clean