summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-10-16 16:01:47 -0600
committerAlejandro Soto <alejandro@34project.org>2022-10-16 16:01:47 -0600
commit3aca2967a35d05dac3d9121a882d608b10a588bb (patch)
tree25a8d37d6213f518b9ff95ef8b4de30a337a1b2d /Makefile
parent2e6ce7931b690ccec1e41fa6847dfc1351c59d75 (diff)
Implement simulation testbenches
Diffstat (limited to '')
-rw-r--r--Makefile40
1 files changed, 33 insertions, 7 deletions
diff --git a/Makefile b/Makefile
index d30e6cb..0a55b3d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,15 +1,21 @@
-TOP := conspiracion
-VCD_DIR := vcd
-OBJ_DIR := obj
-RTL_DIR := rtl
-TB_DIR := tb
-VERILATOR := verilator
+TOP := conspiracion
+VCD_DIR := vcd
+OBJ_DIR := obj
+RTL_DIR := rtl
+TB_DIR := tb
+SIM_DIR := $(TB_DIR)/sim
+SIM_OBJ_DIR := $(OBJ_DIR)/$(TOP)/sim
+VERILATOR := verilator
+CROSS_CC := arm-none-eabi-gcc
+CROSS_OBJCOPY := arm-none-eabi-objcopy
+CROSS_CFLAGS := -O3 -Wall -Wextra -Werror
+CROSS_LDFLAGS :=
RTL_FILES = $(shell find $(RTL_DIR)/ ! -path '$(RTL_DIR)/top/*' -type f -name '*.sv')
RTL_FILES += $(shell find $(TB_DIR)/ ! -path '$(TB_DIR)/top/*' -type f -name '*.sv')
TB_FILES = $(shell find $(TB_DIR)/ ! -path '$(TB_DIR)/top/*' -type f -name '*.cpp')
-all: trace
+all: sim
clean:
rm -rf $(OBJ_DIR) $(VCD_DIR)
@@ -22,11 +28,31 @@ trace/%: exe/% $(VCD_DIR)/%
$(VCD_DIR)/%:
mkdir -p $@
+sim: $(patsubst $(SIM_DIR)/%.py,sim/%,$(filter-out $(SIM_DIR)/sim.py,$(wildcard $(SIM_DIR)/*.py)))
+
+sim/%: $(SIM_DIR)/sim.py $(SIM_DIR)/%.py $(OBJ_DIR)/$(TOP)/V$(TOP) $(SIM_OBJ_DIR)/%.bin
+ $^
+
+$(SIM_OBJ_DIR)/%.bin: $(SIM_OBJ_DIR)/%
+ $(CROSS_OBJCOPY) -O binary --only-section=._img $< $@
+
+$(SIM_OBJ_DIR)/%: $(SIM_OBJ_DIR)/%.o $(SIM_OBJ_DIR)/start.o
+ $(CROSS_CC) $(CROSS_LDFLAGS) -o $@ -T $(SIM_DIR)/link.ld -nostartfiles -nostdlib $^
+
+$(SIM_OBJ_DIR)/%.o: $(SIM_DIR)/%.c
+ @mkdir -p $(SIM_OBJ_DIR)
+ $(CROSS_CC) $(CROSS_CFLAGS) -o $@ -c $< -mcpu=arm810
+
+$(SIM_OBJ_DIR)/%.o: $(SIM_DIR)/%.S
+ @mkdir -p $(SIM_OBJ_DIR)
+ $(CROSS_CC) $(CROSS_CFLAGS) -o $@ -c $<
+
exe: exe/$(TOP)
exe/%: $(OBJ_DIR)/%/V%.mk
$(MAKE) -C $(OBJ_DIR)/$* -f V$*.mk
+.PRECIOUS: $(SIM_OBJ_DIR)/%
.SECONDEXPANSION:
$(OBJ_DIR)/%.mk: \