folien: verifikation und kleine anpassung am Makefile fuer "hwmodskel" release
[hwmod.git] / src / Makefile
1 SHELL := bash
2
3 MPWD := $(shell pwd)
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
8 POST_SDO_INST := inst
9
10 WORK := work
11
12 # o reihenfolge ist wichtig
13 # o keine testbechnes hier angeben
14 BEH_IFILES = gen_pkg alu
15 BEH_IFILES := $(strip $(BEH_IFILES))
16
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
20 POST_IFILES = gen_pkg
21 POST_IFILES := $(strip $(POST_IFILES))
22
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)
25
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)
29
30
31 all: behsim
32
33 #behsim
34 behsim: $(D_BEHSIM)/modelsim.ini $(BEH_VTARGETS)
35
36 $(D_BEHSIM)/modelsim.ini:
37         @echo " INIT for behavioural simulation"
38         @mkdir -p $(D_BEHSIM)
39         @#make fuehrt jeden befehl in einer eigenen shell aus, deswegen ein "oneliner"
40         @cd $(D_BEHSIM); \
41         vlib work > /dev/null ; \
42         vmap work work > /dev/null ;
43
44 $(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_BEHSIM)/modelsim.ini
45         @echo " CC    $<"
46         @cd $(D_BEHSIM); \
47         vcom -work $(WORK) $(MPWD)/$<
48
49 beh_%: $(D_BEHSIM)/$(WORK)/beh_%_tb/_primary.dat beh_%_tb.do behsim
50         cd $(D_BEHSIM); \
51         vsim "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do
52
53 #postsim
54 postsim: $(POST_VHO) $(D_POSTSIM)/modelsim.ini $(POST_VTARGETS)
55
56 $(D_POSTSIM)/modelsim.ini:
57         @echo " INIT for post-layout simulation"
58         @mkdir -p $(D_POSTSIM)
59         @cd $(D_POSTSIM); \
60         vlib work > /dev/null ; \
61         vmap work work > /dev/null ;
62
63 $(D_POSTSIM)/$(WORK)/%/_primary.dbs: $(POST_VHO) $(D_POSTSIM)/modelsim.ini
64         @echo " CC    $<"
65         @cd $(D_POSTSIM); \
66         vcom -work $(WORK) $(POST_VHO)
67
68 $(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_POSTSIM)/modelsim.ini
69         @echo " CC    $<"
70         @cd $(D_POSTSIM); \
71         vcom -work $(WORK) $(MPWD)/$<
72
73 post_%: $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat post_%_tb.do postsim $(POST_SDO)
74         cd $(D_POSTSIM); \
75         vsim "work.$@_tb(sim)" -sdftyp /$(POST_SDO_INST)=$(POST_SDO) -f /dev/null -do $(MPWD)/$@_tb.do
76
77 $(POST_VHO) $(POST_SDO):
78         @if [ -f $@ ]; \
79         then echo "vho/sdo: passt"; true ; \
80         else echo "Fehler: $@ muss mit quartus erstellt werden"; false; \
81         fi
82
83 quartus:
84         @echo "Die angebotene (free) Quartus II Version aka Web Edition funktioniert "
85         @echo "unter Linux leider nicht. (Build endet mit einem Error, auch mit dem debouncing-bsp der LVA)."
86         @echo "Befehl um es trotzdem zu probieren (falls installiert):"
87         @echo "$$ unset LS_COLORS #falls gesetzt..."
88         @echo -n "$$ quartus # bin verzeichnis von quartus muss sich in "; echo -n "$$"; echo "PATH befinden"
89         @echo "in windows (per cygwin?): TODO"
90
91 .PHONY: clean
92 clean:
93         rm -Rf $(D_BEHSIM) $(D_POSTSIM)
94