summaryrefslogtreecommitdiff
path: root/Makefile
blob: dca5e7433b8b62d0714e97a493864f0726a58029 (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
IV        := iverilog
IVFLAGS   := -g2005-sv

SIM_SRCS  := $(wildcard *_tb.v)
SIMS      := $(addprefix sims/,$(SIM_SRCS:.v=.sim))
WAVES     := $(addprefix waves/,$(SIM_SRCS:.v=.vcd))
DIRS      := sims waves

DEPS                = $(sort $(1) $(foreach d,$(1),$(DEPS-$(d))))
DEPS-alu           := $(call DEPS,shifter)
DEPS-alu_stage     := $(call DEPS,alu ctrl_decode)
DEPS-decoder_stage := $(call DEPS,decoder ctrl_encode)
DEPS-nqcpu         := $(call DEPS,fetch_stage decoder_stage regFile alu_stage control_unit)
DEPS-soc           := $(call DEPS,nqcpu testROM ctrl_decode)

all: simulate

simulate: $(WAVES)

clean:
	rm -rf $(DIRS)

$(DIRS):
	mkdir -p $@

waves/%.vcd: sims/%.sim | waves
	vvp $<

.SECONDEXPANSION:
pc := %
sims/%_tb.sim: %_tb.v %.v testbench.vh $$(patsubst $$(pc),$$(pc).v,$$(DEPS-$$*)) | sims
	$(IV) $(IVFLAGS) -o $@ $(filter-out %.vh,$^)

.PHONY: all simulate clean
.SECONDARY: