X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2FMakefile;h=a09058aa05fbec67e574d6605d4534fe441cac06;hb=5c172eaa03a4140731713050b95a53c5cc52db6b;hp=4d3dc4e9a05d4277b057e097b02e03c04dd564bd;hpb=9d219935f2877488b4e8acd7b6dc5a1d436baf87;p=hwmod.git diff --git a/src/Makefile b/src/Makefile index 4d3dc4e..a09058a 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1,4 +1,5 @@ SHELL := bash +VPATH := .:ps2:textmode_vga:textmode_vga/mjl_stratix MPWD := $(shell pwd) D_BEHSIM := $(MPWD)/../sim/beh @@ -6,26 +7,50 @@ 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)) +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 +# o source files der module # o reihenfolge ist wichtig # o keine testbechnes hier angeben -BEH_IFILES = gen_pkg alu +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)) -# o keine testbenches hier angeben -# o beachte, dass sich viele files schon in dem VHO file befinden -- es muessen eigentlich nur -# abhaengigkeiten fuer die testbenches angegeben werden -POST_IFILES = gen_pkg +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, $(BEH_IFILES), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat) +BEH_VTARGETS := $(foreach n, $(notdir $(BEH_IFILES)), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat) -#virtuelle targets fuer postsim -POST_VTARGETS := $(foreach n, $(shell grep ENTITY $(POST_VHO) | awk '{ print $$2 }'), $(D_POSTSIM)/$(WORK)/$(n)/_primary.dbs) -POST_VTARGETS += $(foreach n, $(POST_IFILES), $(D_POSTSIM)/$(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 @@ -43,15 +68,15 @@ $(D_BEHSIM)/modelsim.ini: $(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_BEHSIM)/modelsim.ini @echo " CC $<" - @cd $(D_BEHSIM); \ - vcom -work $(WORK) $(MPWD)/$< + cd $(D_BEHSIM); \ + vcom -cover bcest -work $(WORK) $(MPWD)/$< beh_%: $(D_BEHSIM)/$(WORK)/beh_%_tb/_primary.dat beh_%_tb.do behsim cd $(D_BEHSIM); \ - vsim "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do + vsim -coverage "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do #postsim -postsim: $(POST_VHO) $(D_POSTSIM)/modelsim.ini $(POST_VTARGETS) +postsim: $(POST_VHO) $(POST_SDO) $(D_POSTSIM)/modelsim.ini: @echo " INIT for post-layout simulation" @@ -60,34 +85,47 @@ $(D_POSTSIM)/modelsim.ini: vlib work > /dev/null ; \ vmap work work > /dev/null ; -$(D_POSTSIM)/$(WORK)/%/_primary.dbs: $(POST_VHO) $(D_POSTSIM)/modelsim.ini - @echo " CC $<" - @cd $(D_POSTSIM); \ - vcom -work $(WORK) $(POST_VHO) - -$(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_POSTSIM)/modelsim.ini +$(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd @echo " CC $<" @cd $(D_POSTSIM); \ vcom -work $(WORK) $(MPWD)/$< -post_%: $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat post_%_tb.do postsim $(POST_SDO) +post_%: postsim $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat post_%_tb.do cd $(D_POSTSIM); \ vsim "work.$@_tb(sim)" -sdftyp /$(POST_SDO_INST)=$(POST_SDO) -f /dev/null -do $(MPWD)/$@_tb.do -$(POST_VHO) $(POST_SDO): - @if [ -f $@ ]; \ - then echo "vho/sdo: passt"; true ; \ - else echo "Fehler: $@ muss mit quartus erstellt werden"; false; \ - fi - -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): $(D_POSTSIM)/modelsim.ini + @echo -n " Quartus generate project" +ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN)) + @echo "(@tilab)" + @cd ../quartus; ./linux_tilab.sh +else + @echo "(not @ tilab)" + @cd ../quartus; ./linux_web.sh +endif + +#TODO: more targets plz... +$(POST_VHO) $(POST_SDO): $(QUARTUS) $(POST_VTARGETS) $(POST_SRC_VTARGETS) + @echo " Quartus analysis & synthesis" + @$(QUMACRO) quartus_map $(QUOPT) | tee $(MPWD)/quartusmap.tmp + @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 | tee $(MPWD)/quartustan.tmp + @echo " Quartus EDA netlist writer" + @$(QUMACRO) quartus_eda $(QUOPT) + #not nice atm :/ + @echo " CC $(POST_VHO)" + @cd $(D_POSTSIM); \ + vcom -work $(WORK) $(POST_VHO) + @echo -n " INFO logic cells: " + @grep 'logic cells' quartusmap.tmp | awk ' { print $$3 } ' + @grep 'Fmax ' quartustan.tmp | sed -e 's/ / /g' -e 's/Info/INFO/g' -e 's/:/ /g' + @rm quartus*.tmp .PHONY: clean clean: - rm -Rf $(D_BEHSIM) $(D_POSTSIM) + rm -Rf $(D_BEHSIM) $(D_POSTSIM) $(QUARTUS)