debouncing sys_res_n
[hwmod.git] / src / Makefile
1 SHELL := bash
2 VPATH := .:ps2:textmode_vga:textmode_vga/mjl_stratix
3
4 MPWD := $(shell pwd)
5 D_BEHSIM := $(MPWD)/../sim/beh
6 D_POSTSIM := $(MPWD)/../sim/post
7 POST_VHO := $(MPWD)/../quartus/calc/simulation/modelsim/calc.vho
8 POST_SDO := $(MPWD)/../quartus/calc/simulation/modelsim/calc_vhd.sdo
9 POST_SDO_INST := inst
10 QUARTUS := $(MPWD)/../quartus/calc
11 QUOPT := --read_settings_files=on --write_settings_files=off calc -c calc
12
13 HN := $(shell hostname)
14 TILABHOSTS := $(shell echo ti{1..9}) apps1
15
16 ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
17 QUMACRO := unset LS_COLORS; cd $(QUARTUS); export LD_LIBRARY_PATH=/opt/quartus/quartus/linux64; export LM_LICENSE_FILE=26888@quartus; 
18 else
19 QUMACRO := unset LS_COLORS; cd $(QUARTUS);
20 endif
21
22 WORK := work
23
24 # o source files der module
25 # o reihenfolge ist wichtig
26 # o keine testbechnes hier angeben
27 SRCFILES := alu parser scanner display sp_ram history uart_tx uart_rx
28
29 # o files der packages
30 # o keine testbechnes hier angeben
31 PKGFILES = math_pkg gen_pkg
32 PKGFILES += textmode_vga/textmode_vga_platform_dependent_pkg
33 PKGFILES += textmode_vga/textmode_vga_pkg
34 PKGFILES += textmode_vga/font_pkg
35 PKGFILES += textmode_vga/textmode_vga_component_pkg
36
37 BEH_IFILES = $(PKGFILES) $(SRCFILES)
38 BEH_IFILES := $(strip $(BEH_IFILES))
39
40 POST_IFILES = $(PKGFILES)
41 POST_IFILES := $(strip $(POST_IFILES))
42
43 POST_SRC = $(SRCFILES)
44
45
46 #virtuelle targets fuer behsim: weil wir sowas wie ein objectfile von vcom nicht bekommen. bessere ideen sind willkommen
47 BEH_VTARGETS := $(foreach n, $(notdir $(BEH_IFILES)), $(D_BEHSIM)/$(WORK)/$(n)/_primary.dat)
48
49 #virtuelle targets fuer packagefiles der postsim
50 POST_VTARGETS := $(foreach n, $(notdir $(POST_IFILES)), $(D_POSTSIM)/$(WORK)/$(n)/_primary.dat)
51
52 #virtuelle targets fuer sourcefiles der postsim
53 POST_SRC_VTARGETS := $(foreach n, $(POST_SRC), $(n).vhd)
54
55
56 all: behsim
57
58 #behsim
59 behsim: $(D_BEHSIM)/modelsim.ini $(BEH_VTARGETS)
60
61 $(D_BEHSIM)/modelsim.ini:
62         @echo " INIT for behavioural simulation"
63         @mkdir -p $(D_BEHSIM)
64         @#make fuehrt jeden befehl in einer eigenen shell aus, deswegen ein "oneliner"
65         @cd $(D_BEHSIM); \
66         vlib work > /dev/null ; \
67         vmap work work > /dev/null ;
68
69 $(D_BEHSIM)/$(WORK)/%/_primary.dat: %.vhd $(D_BEHSIM)/modelsim.ini
70         @echo " CC    $<"
71         cd $(D_BEHSIM); \
72         vcom -cover bcest -work $(WORK) $(MPWD)/$<
73
74 beh_%: $(D_BEHSIM)/$(WORK)/beh_%_tb/_primary.dat beh_%_tb.do behsim
75         cd $(D_BEHSIM); \
76         vsim -coverage "work.$@_tb(sim)" -f /dev/null -do $(MPWD)/$@_tb.do
77
78 #postsim
79 postsim: $(POST_VHO) $(POST_SDO)
80
81 $(D_POSTSIM)/modelsim.ini:
82         @echo " INIT for post-layout simulation"
83         @mkdir -p $(D_POSTSIM)
84         @cd $(D_POSTSIM); \
85         vlib work > /dev/null ; \
86         vmap work work > /dev/null ;
87
88 $(D_POSTSIM)/$(WORK)/%/_primary.dat: %.vhd
89         @echo " CC    $<"
90         @cd $(D_POSTSIM); \
91         vcom -work $(WORK) $(MPWD)/$<
92
93 post_%: postsim $(D_POSTSIM)/$(WORK)/post_%_tb/_primary.dat post_%_tb.do
94         cd $(D_POSTSIM); \
95         vsim "work.$@_tb(sim)" -sdftyp /$(POST_SDO_INST)=$(POST_SDO) -f /dev/null -do $(MPWD)/$@_tb.do
96
97 $(QUARTUS): $(D_POSTSIM)/modelsim.ini
98         @echo -n " Quartus  generate project"
99 ifeq ($(findstring $(HN), $(TILABHOSTS)),$(HN))
100         @echo "(@tilab)"
101         @cd ../quartus; ./linux_tilab.sh
102 else
103         @echo "(not @ tilab)"
104         @cd ../quartus; ./linux_web.sh
105 endif
106
107 #TODO: more targets plz...
108 $(POST_VHO) $(POST_SDO): $(QUARTUS) $(POST_VTARGETS) $(POST_SRC_VTARGETS)
109         @echo " Quartus  analysis & synthesis"
110         @$(QUMACRO) quartus_map $(QUOPT) | tee $(MPWD)/quartusmap.tmp
111         @echo " Quartus  fitter"
112         @$(QUMACRO) quartus_fit $(QUOPT)
113         @echo " Quartus  assembler"
114         @$(QUMACRO) quartus_asm $(QUOPT)
115         @echo " Quartus  timing analyzer"
116         @$(QUMACRO) quartus_tan $(QUOPT) --timing_analysis_only | tee $(MPWD)/quartustan.tmp
117         @echo " Quartus  EDA netlist writer"
118         @$(QUMACRO) quartus_eda $(QUOPT)
119         #not nice atm :/
120         @echo " CC    $(POST_VHO)"
121         @cd $(D_POSTSIM); \
122         vcom -work $(WORK) $(POST_VHO)
123         @echo -n "  INFO  logic cells: "
124         @grep 'logic cells' quartusmap.tmp | awk ' { print $$3 } '
125         @grep 'Fmax ' quartustan.tmp | sed -e 's/  / /g' -e 's/Info/INFO/g' -e 's/:/ /g'
126         @rm quartus*.tmp
127
128 .PHONY: clean
129 clean:
130         rm -Rf $(D_BEHSIM) $(D_POSTSIM) $(QUARTUS)
131