aboutsummaryrefslogtreecommitdiff
path: root/sim/makefile.ghdl
blob: 8bcf1344d1907fa00fbe4336461d4d4403606b97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
## ----------------------------------------------------------------------------
## Script     : makefile
## ----------------------------------------------------------------------------
## Author(s)  : Johann Faerber, Friedrich Beckmann
## Company    : University of Applied Sciences Augsburg
## ----------------------------------------------------------------------------
## Description: This makefile allows automating design flow with ModelSim,
##              it is based on a design directory structure shown at 
##              the end of this file.
## ----------------------------------------------------------------------------

GHDL_CMD = ghdl
GHDL_OPTIONS  = --std=08 --workdir=work
LOG_FILE = ghdl.log

ECHO_TARGET := echo "$$@"  >> $(LOG_FILE) 2>&1
TIME_STAMP := echo "$$@ $$(date --iso=seconds)" >> $(LOG_FILE) 2>&1

###################################################################
# Main Targets
#
###################################################################

help:
	@echo '"make" does intentionally nothing. Type:'
	@echo '  "make gproject" to create a new ghdl project only'
	@echo '  "make compile" to compile all VHDL sources in batch mode'
	@echo '  "make sim" to run ghdl with the top testbench of the project'
	@echo '  "make wave" to display the simulation results in the time domain'
	@echo '  "make clean" to remove all generated files'

gproject : gproject_created

gproject_created : $(SOURCE_FILES) makefile.sources
	@echo "---- $@"  >> $(LOG_FILE) 2>&1
	@$(TIME_STAMP)
	@rm -rf ./ghdl_sources.tcl
	@# Create a directory work if it does not exist. Otherwise do nothing.
	@[ -d work ] || mkdir -p work
	@$(GHDL_CMD) -i $(GHDL_OPTIONS) $(SOURCE_FILES) 2>&1 | tee -a $(LOG_FILE)
	@touch gproject_created

compile: ./work/work-obj08.cf


./work/work-obj08.cf: gproject_created
	@echo "---- $@"  >> $(LOG_FILE) 2>&1
	@$(TIME_STAMP)
	@$(GHDL_CMD) -m $(GHDL_OPTIONS) t_$(PROJECT) >> $(LOG_FILE) 2>&1


sim: ./work/work-obj08.cf
	@echo "---- $@"  >> $(LOG_FILE) 2>&1
	@$(TIME_STAMP)
	@$(GHDL_CMD) -r $(GHDL_OPTIONS)  t_$(PROJECT) --wave=t_${PROJECT}.ghw >> $(LOG_FILE) 2>&1

t_${PROJECT}.ghw: ./work/work-obj08.cf
	@echo "---- $@"  >> $(LOG_FILE) 2>&1
	@$(TIME_STAMP)
	@$(GHDL_CMD) -r $(GHDL_OPTIONS)  t_$(PROJECT) --wave=t_${PROJECT}.ghw >> $(LOG_FILE) 2>&1

wave: t_${PROJECT}.ghw
	@echo "---- $@"  >> $(LOG_FILE) 2>&1
	@$(TIME_STAMP)
	@gtkwave t_${PROJECT}.ghw view_signals.gtkw  >> $(LOG_FILE) 2>&1 &

check-errors:
	less ghdl.log

clean:
	@$(GHDL_CMD) --remove; rm -rf work*.cf work *.vcd *.ghw *.log ghdl_sources.tcl gproject_created

## ----------------------------------------------------------------------------
## Description: 
## ------------
## assumes the following design directory structure as prerequisite
## 
## DigitaltechnikPraktikum
## |   
## +---src
## |       and2gate_equation.vhd
## |       invgate_equation.vhd
## |       mux2to1_structure.vhd
## |       or2gate_equation.vhd
## |       t_mux2to1.vhd
## |       de1_mux2to1_structure.vhd
## |
## +---sim
## |   |   makefile
## |   |
## |   \---mux2to1
## |           makefile
## |           makefile.sources
## |
## +---pnr
## |   |   makefile
## |   |
## |   \---de1_mux2to1
## |           de1_mux2to1_pins.tcl
## |           makefile
## |
## \---scripts
##         de1_pin_assignments_minimumio.csv
##         de1_pin_assignments_minimumio.tcl
##         modelsim.ini
##         quartus_project_settings.tcl
## ----------------------------------------------------------------------------