Makefile 2.1 KB
Newer Older
Z
Zihao Yu 已提交
1 2 3 4
TOP = TopMain
BUILD_DIR = ./build
TOP_V = $(BUILD_DIR)/$(TOP).v
SCALA_FILE = $(shell find ./src/main/scala -name '*.scala')
Z
Zihao Yu 已提交
5
MEM_GEN = ./scripts/vlsi_mem_gen
Z
Zihao Yu 已提交
6

Z
Zihao Yu 已提交
7
SIMTOP = top.TestMain
Z
Zihao Yu 已提交
8 9
EMU_IMAGE = $(BUILD_DIR)/bin-readmemh
IMAGE ?= temp
Z
Zihao Yu 已提交
10
NEMU_IMAGE ?= $(IMAGE)
Z
Zihao Yu 已提交
11

Z
Zihao Yu 已提交
12 13
.DEFAULT_GOAL = verilog

Z
Zihao Yu 已提交
14
help:
Z
Zihao Yu 已提交
15
	sbt 'test:runMain top.TopMain --help'
Z
Zihao Yu 已提交
16

Z
Zihao Yu 已提交
17 18
$(TOP_V): $(SCALA_FILE)
	mkdir -p $(@D)
Z
Zihao Yu 已提交
19 20
	sbt 'runMain top.$(TOP) -td $(@D) --output-file $(@F) --repl-seq-mem -c:NOOPFPGA:-o:$(@D)/$(@F).conf'
	$(MEM_GEN) $(@D)/$(@F).conf >> $@
Z
Zihao Yu 已提交
21
	sed -i -e 's/_\(aw\|ar\|w\|r\|b\)_\(\|bits_\)/_\1/g' $@
Z
Zihao Yu 已提交
22

Z
Zihao Yu 已提交
23 24
verilog: $(TOP_V)

Z
Zihao Yu 已提交
25 26 27 28
SIM_TOP = NOOPSimTop
SIM_TOP_V = $(BUILD_DIR)/$(SIM_TOP).v
$(SIM_TOP_V): $(SCALA_FILE)
	mkdir -p $(@D)
Z
Zihao Yu 已提交
29
	sbt 'test:runMain $(SIMTOP) -td $(@D) --image $(EMU_IMAGE) --output-file $(@F)'
Z
Zihao Yu 已提交
30 31 32 33 34 35 36 37 38


EMU_CSRC_DIR = $(abspath ./src/test/csrc)
EMU_VSRC_DIR = $(abspath ./src/test/vsrc)
EMU_CXXFILES = $(shell find $(EMU_CSRC_DIR) -name "*.cpp")
EMU_VFILES = $(shell find $(EMU_VSRC_DIR) -name "*.v" -or -name "*.sv")

EMU_CXXFLAGS  = -O3 -std=c++11 -static -g -Wall -I$(EMU_CSRC_DIR)
EMU_CXXFLAGS += -DVERILATOR -Wno-maybe-uninitialized
Z
Zihao Yu 已提交
39
EMU_LDFLAGS   = -lpthread -lreadline -lSDL2 -ldl
Z
Zihao Yu 已提交
40 41

VERILATOR_FLAGS = --top-module $(SIM_TOP) \
Z
Zihao Yu 已提交
42
  +define+VERILATOR=1 \
Z
Zihao Yu 已提交
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
  +define+PRINTF_COND=1 \
	+define+RANDOMIZE_REG_INIT \
  --assert --output-split 20000 \
  --x-assign unique -O3 -CFLAGS "$(EMU_CXXFLAGS)" \
   -LDFLAGS "$(EMU_LDFLAGS)"

EMU_MK := $(BUILD_DIR)/emu-compile/V$(SIM_TOP).mk
EMU_DEPS := $(EMU_VFILES) $(EMU_CXXFILES)
EMU_HEADERS := $(shell find $(EMU_CSRC_DIR) -name "*.h")
EMU := $(BUILD_DIR)/emu

$(EMU_MK): $(SIM_TOP_V) | $(EMU_DEPS)
	@mkdir -p $(@D)
	verilator --cc --exe $(VERILATOR_FLAGS) \
		-o $(abspath $(EMU)) -Mdir $(@D) \
Z
Zihao Yu 已提交
58
		-f $(BUILD_DIR)/firrtl_black_box_resource_files.f $^ $(EMU_DEPS)
Z
Zihao Yu 已提交
59 60 61 62 63

$(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS)
	$(MAKE) -C $(dir $(EMU_MK)) -f $(abspath $(EMU_MK))

emu: $(EMU)
64 65 66 67
	@ln -sf $(IMAGE)_0 $(EMU_IMAGE)_0
	@ln -sf $(IMAGE)_1 $(EMU_IMAGE)_1
	@ln -sf $(IMAGE)_2 $(EMU_IMAGE)_2
	@ln -sf $(IMAGE)_3 $(EMU_IMAGE)_3
Z
Zihao Yu 已提交
68
	@$(EMU) -u $(NEMU_IMAGE)
Z
Zihao Yu 已提交
69

Z
Zihao Yu 已提交
70
clean:
71
	rm -rf $(BUILD_DIR)
Z
Zihao Yu 已提交
72

Z
Zihao Yu 已提交
73
.PHONY: verilog emu clean help