4 D_BEHSIM := $(MPWD)/../sim/beh
5 D_POSTSIM := $(MPWD)/../sim/post
6 POST_VHO := $(MPWD)/../quartus/calc/simulation/modelsim/calc.vho
7 POST_SDO := $(MPWD)/../quartus/calc/simulation/modelsim/calc_vhd.sdo
12 # o reihenfolge ist wichtig
13 # o keine testbechnes hier angeben
14 BEH_IFILES = gen_pkg alu
15 BEH_IFILES := $(strip $(BEH_IFILES))
17 # o keine testbenches hier angeben
18 # o beachte, dass sich viele files schon in dem VHO file befinden -- es muessen eigentlich nur
19 # abhaengigkeiten fuer die testbenches angegeben werden
21 POST_IFILES := $(strip $(POST_IFILES))
23 #virtuelle targets fuer behsim: weil wir sowas wie ein objectfile von vcom nicht bekommen. bessere ideen sind willkommen
24 BEH_VTARGETS := $(foreach n, $(BEH_IFILES), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat)
26 #virtuelle targets fuer postsim
27 POST_VTARGETS := $(foreach n, $(shell grep ENTITY $(POST_VHO) | awk '{ print $$2 }'), $(D_POSTSIM)/$(WORK)/$(n)/_primary.dbs)
28 POST_VTARGETS += $(foreach n, $(POST_IFILES), $(D_POSTSIM)/$(WORK)/$(n)/_primary.dat)
34 behsim: $(D_BEHSIM)/modelsim.ini $(BEH_VTARGETS)
36 $(D_BEHSIM)/modelsim.ini:
37 @echo " INIT for behavioural simulation"
39 @#make fuehrt jeden befehl in einer eigenen shell aus, deswegen ein "oneliner"
41 vlib work > /dev/null ; \
42 vmap work work > /dev/null ;
44 $(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_BEHSIM)/modelsim.ini
47 vcom -work $(WORK) $(MPWD)/$<
49 beh_%: $(D_BEHSIM)/$(WORK)/beh_%_tb/_primary.dat beh_%_tb.do behsim
51 vsim "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do
54 postsim: $(POST_VHO) $(D_POSTSIM)/modelsim.ini $(POST_VTARGETS)
56 $(D_POSTSIM)/modelsim.ini:
57 @echo " INIT for post-layout simulation"
58 @mkdir -p $(D_POSTSIM)
60 vlib work > /dev/null ; \
61 vmap work work > /dev/null ;
63 $(D_POSTSIM)/$(WORK)/%/_primary.dbs: $(POST_VHO) $(D_POSTSIM)/modelsim.ini
66 vcom -work $(WORK) $(POST_VHO)
68 $(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_POSTSIM)/modelsim.ini
71 vcom -work $(WORK) $(MPWD)/$<
73 post_%: $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat post_%_tb.do postsim $(POST_SDO)
75 vsim "work.$@_tb(sim)" -sdftyp /$(POST_SDO_INST)=$(POST_SDO) -f /dev/null -do $(MPWD)/$@_tb.do
77 $(POST_VHO) $(POST_SDO):
79 then echo "vho/sdo: passt"; true ; \
80 else echo "Fehler: $@ muss mit quartus erstellt werden"; false; \
84 @echo "Die angebotene (free) Quartus II Version funktioniert leider nicht. (Build endet mit einem Error, auch mit dem debouncing-bsp der LVA)."
85 @echo "Befehl um es trotzdem zu probieren:"
86 @echo "$$ unset LS_COLORS #falls gesetzt..."
87 @echo -n "$$ quartus # bin verzeichnis von quartus muss sich in "; echo -n "$$"; echo "PATH befinden"
88 @echo "in windows: TODO"
92 rm -Rf $(D_BEHSIM) $(D_POSTSIM)