-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
128 lines (99 loc) · 3.81 KB
/
Makefile
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# --- Project configuration -------------------------------------------------
PROJECT = mera400f
TOPLEVEL = platform
SOURCES_DIR = src
SOURCES = platform.v \
mera400f.v \
decoder16.v decoder8.v \
alu181.v carry182.v \
dly.v \
uart.v \
pr.v regs.v r0.v rb.v bar.v ki.v l.v \
pd.v ir.v idec1.v \
px.v strobgen.v ifctl.v alarm.v \
pm.v lk.v mc.v lg.v kcpc.v \
pp.v rm.v rzrp.v dok.v \
pa.v alu.v at.v ac.v ar.v ic.v w.v a.v \
pk.v sevenseg.v display.v timer.v rot_dec.v \
puks.v \
isk.v \
cpu.v \
iobus.v msg_cmd_dec.v msg_cmd_enc.v msg_rx.v msg_tx.v drv_cp_in.v drv_bus_req.v drv_bus_resp.v recv_cl.v recv_cp.v recv_bus.v \
mem_elwro_sram.v memcfg.v \
awp.v fps.v fpm.v fpa.v fic.v lp.v fpalu.v m.v t.v c.v k.v zp.v ld.v b.v expadd.v \
fp_strobgen.v
PLATFORM_QSF = $(SOURCES_DIR)/platform.qsf
# See: https://github.com/jakubfi/altlogfilter (or comment out the line below)
ALTLOGFILTER = alf -c --
FAMILY = CycloneII
DEVICE = EP2C8Q208C8
PGM_CABLE = 1
FPGA_ROOT = ~/fpga
LIBS32_DIR = $(FPGA_ROOT)/lib32
# --- Quartus paths ------------------------------------------------------
QUARTUS_ROOT = $(FPGA_ROOT)/altera/13.0sp1
QUARTUS_BIN = $(QUARTUS_ROOT)/quartus/bin
LIB_PATHS = $(LIBS32_DIR):$(QUARTUS_ROOT)/quartus/linux64:$(QUARTUS_ROOT)/quartus/linux
Q_LIB_PREFIX = LD_LIBRARY_PATH=$(LIB_PATHS)
# --- Quartus tools ------------------------------------------------------
COMMON_ARGS = --no_banner
SETTINGS_ARGS = --write_settings_files=off --read_settings_files=on
Q_PFX = $(Q_LIB_PREFIX) $(QUARTUS_BIN)
Q_SH = $(Q_PFX)/quartus_sh
Q_MAP = $(Q_PFX)/quartus_map $(COMMON_ARGS) $(SETTINGS_ARGS) --family=$(FAMILY)
Q_FIT = $(Q_PFX)/quartus_fit $(COMMON_ARGS) $(SETTINGS_ARGS) --part=$(DEVICE)
Q_ASM = $(Q_PFX)/quartus_asm $(COMMON_ARGS) $(SETTINGS_ARGS)
Q_STA = $(Q_PFX)/quartus_sta $(COMMON_ARGS)
Q_PGM = $(Q_PFX)/quartus_pgm $(COMMON_ARGS) -c $(PGM_CABLE)
# --- Project files ------------------------------------------------------
SRCS = $(addprefix $(SOURCES_DIR)/,$(SOURCES))
OUT_DIR = output_files
PROJECT_QPF = $(PROJECT).qpf
PROJECT_QSF = $(PROJECT).qsf
SOURCES_QSF = $(PROJECT)_sources.qsf
MAP_OUTPUT = db/$(PROJECT).map.cdb
FIT_OUTPUT = db/$(PROJECT).cmp.cdb
SOF_OUTPUT = $(OUT_DIR)/$(PROJECT).sof
POF_OUTPUT = $(OUT_DIR)/$(PROJECT).pof
# --- Targets ------------------------------------------------------------
.phony: all test sum map mapsum fit fitsum asm install sta fmax jtag as clean distclean
all: map
map: $(MAP_OUTPUT)
sum: mapsum
mapsum: $(MAP_OUTPUT)
cat $(OUT_DIR)/$(PROJECT).map.summary
fit: $(FIT_OUTPUT)
fitsum: $(FIT_OUTPUT)
cat $(OUT_DIR)/$(PROJECT).fit.summary
asm: $(SOF_OUTPUT)
install: jtag
$(PROJECT_QSF): Makefile
$(ALTLOGFILTER) $(Q_SH) --prepare -f $(FAMILY) -d $(DEVICE) -t $(TOPLEVEL) $(PROJECT)
$(ALTLOGFILTER) $(Q_SH) --set PROJECT_OUTPUT_DIRECTORY=$(OUT_DIR) $(PROJECT)
@echo "" >> $(PROJECT_QSF)
@echo -e "source $(PLATFORM_QSF)" >> $(PROJECT_QSF)
@echo -e "source $(SOURCES_QSF)" >> $(PROJECT_QSF)
$(SOURCES_QSF): $(PROJECT_QSF)
@echo -e "\n# ! WARNING ! this file is automaticaly generated by make, do not edit!\n" > $(SOURCES_QSF)
@$(foreach var,$(SRCS),echo "set_global_assignment -name VERILOG_FILE $(var)" >> $(SOURCES_QSF);)
$(MAP_OUTPUT): $(SRCS) $(SOURCES_QSF)
$(ALTLOGFILTER) $(Q_MAP) $(PROJECT)
$(FIT_OUTPUT): $(MAP_OUTPUT) $(PLATFORM_QSF)
$(ALTLOGFILTER) $(Q_FIT) $(PROJECT)
$(SOF_OUTPUT): $(FIT_OUTPUT)
$(ALTLOGFILTER) $(Q_ASM) $(PROJECT)
$(POF_OUTPUT): $(FIT_OUTPUT)
$(ALTLOGFILTER) $(Q_ASM) $(PROJECT)
sta: $(FIT_OUTPUT)
$(Q_STA) $(PROJECT)
fmax: $(FIT_OUTPUT)
$(Q_STA) -t src/fmax.tcl
jtag: $(SOF_OUTPUT)
$(Q_PGM) -m JTAG -o "p;$(SOF_OUTPUT)"
as: $(POF_OUTPUT)
$(Q_PGM) -m AS -o "pv;$(POF_OUTPUT)"
# --- Cleanups -----------------------------------------------------------
clean:
rm -rf db incremental_db $(OUT_DIR)
distclean: clean
rm -rf $(PROJECT_QPF) $(PROJECT_QSF) $(SOURCES_QSF)