SHELL := bash
+VPATH := .:ps2:textmode_vga:textmode_vga/mjl_stratix
MPWD := $(shell pwd)
D_BEHSIM := $(MPWD)/../sim/beh
+D_POSTSIM := $(MPWD)/../sim/post
+POST_VHO := $(MPWD)/../quartus/calc/simulation/modelsim/calc.vho
+POST_SDO := $(MPWD)/../quartus/calc/simulation/modelsim/calc_vhd.sdo
+POST_SDO_INST := inst
+QUARTUS := $(MPWD)/../quartus/calc
+QUOPT := --read_settings_files=on --write_settings_files=off calc -c calc
+
+HN := $(shell hostname)
+TILABHOSTS := $(shell echo ti{1..9}) apps1
+
+ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
+# die option 's' geht nicht... :(
+COVERVCOM := -cover bcet
+COVERVSIM := -coverage
+else
+COVERVCOM :=
+COVERVSIM :=
+endif
+
+ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
+QUMACRO := unset LS_COLORS; cd $(QUARTUS); export LD_LIBRARY_PATH=/opt/quartus/quartus/linux64; export LM_LICENSE_FILE=26888@quartus;
+else
+QUMACRO := unset LS_COLORS; cd $(QUARTUS);
+endif
WORK := work
-#reihenfolge ist hier wichtig!
-IFILES = gen_pkg alu alu_tb
-IFILES := $(strip $(IFILES))
-#virtuelle targets: weil wir sowas wie ein objectfile von vcom nicht bekommen. bessere ideen sind willkommen
-VTARGETS := $(foreach n, $(IFILES), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat)
+# o source files der module
+# o reihenfolge ist wichtig
+# o keine testbechnes hier angeben
+SRCFILES := alu parser scanner display sp_ram history uart_tx uart_rx
+
+# o files der packages
+# o keine testbechnes hier angeben
+PKGFILES = math_pkg gen_pkg
+PKGFILES += textmode_vga/textmode_vga_platform_dependent_pkg
+PKGFILES += textmode_vga/textmode_vga_pkg
+PKGFILES += textmode_vga/font_pkg
+PKGFILES += textmode_vga/textmode_vga_component_pkg
+
+BEH_IFILES = $(PKGFILES) $(SRCFILES)
+BEH_IFILES := $(strip $(BEH_IFILES))
+
+POST_IFILES = $(PKGFILES)
+POST_IFILES := $(strip $(POST_IFILES))
+
+POST_SRC = $(SRCFILES)
+
+
+#virtuelle targets fuer behsim: weil wir sowas wie ein objectfile von vcom nicht bekommen. bessere ideen sind willkommen
+BEH_VTARGETS := $(foreach n, $(notdir $(BEH_IFILES)), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat)
+
+#virtuelle targets fuer packagefiles der postsim
+POST_VTARGETS := $(foreach n, $(notdir $(POST_IFILES)), $(D_POSTSIM)/$(WORK)/$(n)/_primary.dat)
+
+#virtuelle targets fuer sourcefiles der postsim
+POST_SRC_VTARGETS := $(foreach n, $(POST_SRC), $(n).vhd)
+
all: behsim
-behsim: $(D_BEHSIM)/modelsim.ini $(VTARGETS)
+#behsim
+behsim: $(D_BEHSIM)/modelsim.ini $(BEH_VTARGETS)
$(D_BEHSIM)/modelsim.ini:
@echo " INIT for behavioural simulation"
vlib work > /dev/null ; \
vmap work work > /dev/null ;
-$(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd
+$(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_BEHSIM)/modelsim.ini
@echo " CC $<"
- @cd $(D_BEHSIM); \
+ cd $(D_BEHSIM); \
+ vcom $(COVERVCOM) -work $(WORK) $(MPWD)/$<
+
+beh_%: $(D_BEHSIM)/$(WORK)/beh_%_tb/_primary.dat beh_%_tb.do behsim
+ cd $(D_BEHSIM); \
+ vsim $(COVERVSIM) "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do
+
+#postsim
+postsim: post_alu
+
+$(D_POSTSIM)/modelsim.ini:
+ @echo " INIT for post-layout simulation"
+ @mkdir -p $(D_POSTSIM)
+ @cd $(D_POSTSIM); \
+ vlib work > /dev/null ; \
+ vmap work work > /dev/null ;
+
+$(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd
+ @echo " CC $<"
+ @cd $(D_POSTSIM); \
vcom -work $(WORK) $(MPWD)/$<
-modelsim: behsim
- @cd $(D_BEHSIM); \
- vsim "work.alu_tb(sim)" -f /dev/null -do $(MPWD)/alu.do
+post_%: quartus_gen_% post_%_tb.do $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat
+ cd $(D_POSTSIM); \
+ vsim "work.$@_tb(sim)" -sdftyp /$(POST_SDO_INST)=$(POST_SDO) -f /dev/null -do $(MPWD)/$@_tb.do
-quartus:
- @echo "Die angebotene (free) Quartus II Version funktioniert leider nicht. (Build endet mit einem Error, auch mit dem debouncing-bsp der LVA)."
- @echo "Befehl um es trotzdem zu probieren:"
- @echo "$$ unset LS_COLORS #falls gesetzt..."
- @echo -n "$$ quartus # bin verzeichnis von quartus muss sich in "; echo -n "$$"; echo "PATH befinden"
- @echo "in windows: TODO"
+quartus_gen_%: ../quartus/project_%.tcl $(D_POSTSIM)/modelsim.ini $(POST_VTARGETS) $(POST_SRC_VTARGETS)
+ @echo -n " Quartus generate project"
+ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
+ @echo "(@tilab): $<"
+ @cd ../quartus; rm -Rf calc; ./linux_tilab.sh $<
+else
+ @echo "(not @ tilab): $<"
+ @cd ../quartus; rm -Rf calc; ./linux_web.sh $<
+endif
+ @echo " Quartus analysis & synthesis"
+ @$(QUMACRO) quartus_map $(QUOPT)
+ @echo " Quartus fitter"
+ @$(QUMACRO) quartus_fit $(QUOPT)
+ @echo " Quartus assembler"
+ @$(QUMACRO) quartus_asm $(QUOPT)
+ @echo " Quartus timing analyzer"
+ @$(QUMACRO) quartus_tan $(QUOPT) --timing_analysis_only
+ @echo " Quartus EDA netlist writer"
+ @$(QUMACRO) quartus_eda $(QUOPT)
+ @echo " CC $(POST_VHO)"
+ @cd $(D_POSTSIM); \
+ vcom -work $(WORK) $(POST_VHO)
.PHONY: clean
clean:
- rm -Rf $(D_BEHSIM)
+ rm -Rf $(D_BEHSIM) $(D_POSTSIM)