example: refactor Makefile
This commit is contained in:
parent
d340dc726e
commit
bd740d9613
|
@ -7,4 +7,7 @@
|
||||||
!LICENSE
|
!LICENSE
|
||||||
!README.md
|
!README.md
|
||||||
!README.en.md
|
!README.en.md
|
||||||
!board/*
|
!board/*
|
||||||
|
!*.v
|
||||||
|
!*.cpp
|
||||||
|
build/
|
||||||
|
|
51
Makefile
51
Makefile
|
@ -1,51 +0,0 @@
|
||||||
VERILATOR = verilator
|
|
||||||
VERILATOR_CFLAGS += -MMD -Wall --build -cc -Wno-lint \
|
|
||||||
-O3 --x-assign fast --x-initial fast --noassert
|
|
||||||
|
|
||||||
# include path
|
|
||||||
INC_PATH ?=
|
|
||||||
|
|
||||||
# files of the RTL project
|
|
||||||
TOPNAME ?= top
|
|
||||||
DIR ?= $(NVBOARD_HOME)/example
|
|
||||||
OBJ_DIR = $(DIR)/obj_dir
|
|
||||||
|
|
||||||
# generated executable file
|
|
||||||
DST_EXE = NVBOARD_$(TOPNAME)
|
|
||||||
DST_BIN = $(OBJ_DIR)/$(DST_EXE)
|
|
||||||
|
|
||||||
# SRC of the project
|
|
||||||
|
|
||||||
SRC_DIR ?= $(DIR)/src
|
|
||||||
SRCS ?= $(shell find $(SRC_DIR) -name "*.v" -or -name "*.c" -or -name "*.cc" -or -name "*.cpp")
|
|
||||||
|
|
||||||
### Default rules...
|
|
||||||
|
|
||||||
# Build rules of nvboard
|
|
||||||
include $(NVBOARD_HOME)/scripts/nvboard.mk
|
|
||||||
|
|
||||||
INCFLAGS = $(addprefix -I, $(INC_PATH))
|
|
||||||
CFLAGS += $(INCFLAGS) -DTOP_NAME="\"V$(TOPNAME)\""
|
|
||||||
|
|
||||||
LDFLAGS += -lSDL2 -lSDL2_image
|
|
||||||
|
|
||||||
$(DST_BIN): $(SRCS) $(NBD_ARCHIVE)
|
|
||||||
@rm -rf $(OBJ_DIR)
|
|
||||||
@echo $(INC_PATH)
|
|
||||||
@$(VERILATOR) $(VERILATOR_CFLAGS) \
|
|
||||||
-top $(TOPNAME) $^ \
|
|
||||||
$(addprefix -CFLAGS , $(CFLAGS)) $(addprefix -LDFLAGS , $(LDFLAGS)) \
|
|
||||||
--Mdir $(OBJ_DIR) --exe -o $(DST_EXE)
|
|
||||||
|
|
||||||
NXDC_FILES ?= $(shell find $(SRC_DIR) -name "*.nxdc")
|
|
||||||
|
|
||||||
nxdc: $(NXDC_FILES)
|
|
||||||
python $(NVBOARD_HOME)/scripts/auto_pin_bind.py $(NXDC_FILES)
|
|
||||||
|
|
||||||
run: $(DST_BIN) nxdc
|
|
||||||
@$(DST_BIN)
|
|
||||||
|
|
||||||
clean:
|
|
||||||
rm -rf $(OBJ_DIR)
|
|
||||||
|
|
||||||
.PHONY: clean run nxdc
|
|
|
@ -1,4 +1,2 @@
|
||||||
!src/*
|
!resource/*.hex
|
||||||
!Makefile
|
!constr/*.nxdc
|
||||||
!makefile
|
|
||||||
auto_bind.cpp
|
|
||||||
|
|
|
@ -1,13 +1,50 @@
|
||||||
# 需要手动指定项目目录
|
|
||||||
DIR = .
|
|
||||||
## 默认项目源码在项目目录的src文件夹下,可手动指定
|
|
||||||
### SRC_DIR ?= $(DIR)/src
|
|
||||||
## 参与verilator编译的文件默认为$(SRC_DIR)下的所有*.v, *.c, *.cc, *.cpp文件,可手动指定
|
|
||||||
### SRCS ?= $(shell find $(SRC_DIR) -name "*.v" -or -name "*.c" -or -name "*.cc" -or -name "*.cpp")
|
|
||||||
|
|
||||||
|
|
||||||
# 需要指定顶层模块名称
|
|
||||||
TOPNAME = top
|
TOPNAME = top
|
||||||
|
NXDC_FILES = constr/top.nxdc
|
||||||
|
INC_PATH ?=
|
||||||
|
|
||||||
# 需要在最后将NVBOARD的makefile包含进来
|
VERILATOR = verilator
|
||||||
-include $(NVBOARD_HOME)/Makefile
|
VERILATOR_CFLAGS += -MMD -Wall --build -cc -Wno-lint \
|
||||||
|
-O3 --x-assign fast --x-initial fast --noassert
|
||||||
|
|
||||||
|
BUILD_DIR = ./build
|
||||||
|
OBJ_DIR = $(BUILD_DIR)/obj_dir
|
||||||
|
BIN = $(BUILD_DIR)/$(TOPNAME)
|
||||||
|
|
||||||
|
default: $(BIN)
|
||||||
|
|
||||||
|
$(shell mkdir -p $(BUILD_DIR))
|
||||||
|
|
||||||
|
# contraint file
|
||||||
|
SRC_AUTO_BIND = $(abspath $(BUILD_DIR)/auto_bind.cpp)
|
||||||
|
$(SRC_AUTO_BIND): $(NXDC_FILES)
|
||||||
|
python $(NVBOARD_HOME)/scripts/auto_pin_bind.py $^ $@
|
||||||
|
|
||||||
|
# project source
|
||||||
|
|
||||||
|
VSRCS = $(shell find $(abspath ./vsrc) -name "*.v")
|
||||||
|
CSRCS = $(shell find $(abspath ./csrc) -name "*.c" -or -name "*.cc" -or -name "*.cpp")
|
||||||
|
CSRCS += $(SRC_AUTO_BIND)
|
||||||
|
|
||||||
|
# rules for NVBoard
|
||||||
|
include $(NVBOARD_HOME)/scripts/nvboard.mk
|
||||||
|
|
||||||
|
# rules for verilator
|
||||||
|
|
||||||
|
INCFLAGS = $(addprefix -I, $(INC_PATH))
|
||||||
|
CFLAGS += $(INCFLAGS) -DTOP_NAME="\"V$(TOPNAME)\""
|
||||||
|
LDFLAGS += -lSDL2 -lSDL2_image
|
||||||
|
|
||||||
|
$(BIN): $(VSRCS) $(CSRCS) $(NBD_ARCHIVE)
|
||||||
|
@rm -rf $(OBJ_DIR)
|
||||||
|
$(VERILATOR) $(VERILATOR_CFLAGS) \
|
||||||
|
-top $(TOPNAME) $^ \
|
||||||
|
$(addprefix -CFLAGS , $(CFLAGS)) $(addprefix -LDFLAGS , $(LDFLAGS)) \
|
||||||
|
--Mdir $(OBJ_DIR) --exe -o $(abspath $(BIN))
|
||||||
|
|
||||||
|
run: $(BIN)
|
||||||
|
@$^
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILD_DIR)
|
||||||
|
|
||||||
|
.PHONY: clean run
|
||||||
|
|
|
@ -86,7 +86,7 @@ module vmem (
|
||||||
reg [23:0] vga_mem [524287:0];
|
reg [23:0] vga_mem [524287:0];
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
$readmemh("src/picture.hex", vga_mem);
|
$readmemh("resource/picture.hex", vga_mem);
|
||||||
end
|
end
|
||||||
|
|
||||||
assign vga_data = vga_mem[{h_addr, v_addr}];
|
assign vga_data = vga_mem[{h_addr, v_addr}];
|
|
@ -89,9 +89,14 @@ if len(sys.argv) <= 1:
|
||||||
exit(-1)
|
exit(-1)
|
||||||
cons_path = sys.argv[1]
|
cons_path = sys.argv[1]
|
||||||
|
|
||||||
|
if len(sys.argv) <= 2:
|
||||||
|
print("output file missing!")
|
||||||
|
exit(-1)
|
||||||
|
output_path = sys.argv[2]
|
||||||
|
|
||||||
|
|
||||||
cons_f = open(cons_path, "r")
|
cons_f = open(cons_path, "r")
|
||||||
bind_f = open('src/auto_bind.cpp', "w")
|
bind_f = open(output_path, "w")
|
||||||
|
|
||||||
line = cons_f.readline()
|
line = cons_f.readline()
|
||||||
line = line.split('=')
|
line = line.split('=')
|
||||||
|
|
Loading…
Reference in New Issue