Skip to content

Commit a9c7e1d

Browse files
committed
src: release of the hls kernel code.
1 parent 68c4b49 commit a9c7e1d

15 files changed

+1687
-1
lines changed

.gitignore

+6-1
Original file line numberDiff line numberDiff line change
@@ -277,4 +277,9 @@ tags
277277
# Built files
278278
testbed/minimap2
279279
kernel/cuda/kernel
280-
kernel/simd/kernel
280+
kernel/simd/kernel
281+
kernel/hls/rpt
282+
kernel/hls/bin
283+
kernel/hls/bit
284+
kernel/hls/obj
285+
kernel/hls/tmp

kernel/hls/Makefile

+160
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
.PHONY: csim cosim hw hls clean exe bitstream check-afi-status check-aws-bucket
2+
3+
APP ?= kernel
4+
SDA_VER ?= 2018.3
5+
XILINX_SDX ?= /opt/tools/xilinx/SDx/$(SDA_VER)
6+
XILINX_XRT ?= /opt/xilinx/xrt
7+
XDEVICE ?= xilinx:vcu1525:xdma:201830.1
8+
9+
CSIM_XCLBIN ?= $(APP)-csim.xclbin
10+
COSIM_XCLBIN ?= $(APP)-cosim.xclbin
11+
HW_XCLBIN ?= $(APP)-hw.xclbin
12+
13+
KERNEL_SRCS ?= device_kernel.cpp
14+
KERNEL_NAME ?= device_chain_kernel
15+
HOST_SRCS ?= common.cpp device_kernel_wrapper.cpp \
16+
host_data_io.cpp host_kernel.cpp \
17+
main.cpp memory_scheduler.cpp
18+
HOST_ARGS ?=
19+
HOST_BIN ?= $(APP)
20+
21+
SRC ?= src
22+
OBJ ?= obj/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE)))
23+
BIN ?= bin/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE)))
24+
BIT ?= bit/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE)))
25+
RPT ?= rpt/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE)))
26+
TMP ?= tmp/$(SDA_VER)/$(word 2,$(subst :, ,$(XDEVICE)))
27+
28+
AWS_AFI_DIR ?= afis
29+
AWS_AFI_LOG ?= logs
30+
CXX ?= g++
31+
CLCXX ?= xocc
32+
33+
HOST_CFLAGS += -std=c++0x -g -O2 -Wall -DFPGA_DEVICE -DC_KERNEL
34+
HOST_CFLAGS += -I$(XILINX_XRT)/include
35+
HOST_CFLAGS += -I$(XILINX_SDX)/runtime/include/1_2
36+
HOST_CFLAGS += -I$(subst SDx,Vivado,$(XILINX_SDX))/include
37+
HOST_CFLAGS += -I$(subst SDx,Vivado_HLS,$(XILINX_SDX))/include
38+
HOST_LFLAGS += -L$(XILINX_XRT)/lib -lxilinxopencl -lrt
39+
HOST_LFLAGS += -L$(XILINX_SDX)/runtime/lib/x86_64 -lxilinxopencl -lrt
40+
41+
ifeq ($(XDEVICE),"xilinx:aws-vu9p-f1:4ddr-xpr-2pr:4.0")
42+
SDA_VER = 2017.1
43+
endif
44+
45+
ifeq ($(SDA_VER),2017.1)
46+
# 2017.1
47+
PLATFORM := $(XDEVICE)
48+
HOST_CFLAGS += -DTARGET_DEVICE=\"$(PLATFORM)\"
49+
else
50+
ifeq ($(SDA_VER),2017.2)
51+
# 2017.2
52+
PLATFORM := $(XDEVICE)
53+
HOST_CFLAGS += -DTARGET_DEVICE=\"$(subst :,_,$(subst .,_,$(PLATFORM)))\"
54+
else
55+
# 2017.4 or 2018.2
56+
PLATFORM := $(subst :,_,$(subst .,_,$(XDEVICE)))
57+
HOST_CFLAGS += -DTARGET_DEVICE=\"$(PLATFORM)\"
58+
endif
59+
endif
60+
61+
CLCXX_OPT += $(CLCXX_OPT_LEVEL) $(DEVICE_REPO_OPT) --platform $(PLATFORM) $(KERNEL_DEFS) $(KERNEL_INCS)
62+
CLCXX_OPT += --kernel $(KERNEL_NAME)
63+
CLCXX_OPT += --xp prop:kernel.$(KERNEL_NAME).kernel_flags="-std=c++0x"
64+
CLCXX_OPT += --sp device_chain_kernel_1.m_axi_gmem_0:bank0 --sp device_chain_kernel_1.m_axi_gmem_1:bank1
65+
CLCXX_OPT += -s -g
66+
CLCXX_CSIM_OPT = -t sw_emu --temp_dir $(abspath $(TMP)/$(CSIM_XCLBIN:.xclbin=))
67+
CLCXX_COSIM_OPT = -t hw_emu --temp_dir $(abspath $(TMP)/$(COSIM_XCLBIN:.xclbin=))
68+
CLCXX_HW_OPT = -t hw --temp_dir $(abspath $(TMP)/$(HW_XCLBIN:.xclbin=))
69+
70+
############################## phony targets ##############################
71+
72+
csim: $(BIN)/$(HOST_BIN) $(BIT)/$(CSIM_XCLBIN) $(BIN)/emconfig.json
73+
ulimit -s unlimited;. $(XILINX_SDX)/settings64.sh;XCL_EMULATION_MODE=sw_emu $(BIN)/$(HOST_BIN) $(BIT)/$(CSIM_XCLBIN) $(HOST_ARGS)
74+
@rm -f sdaccel_profile_summary.{csv,html}
75+
76+
cosim: $(BIN)/$(HOST_BIN) $(BIT)/$(COSIM_XCLBIN) $(BIN)/emconfig.json
77+
. $(XILINX_SDX)/settings64.sh;XCL_EMULATION_MODE=hw_emu $(BIN)/$(HOST_BIN) $(BIT)/$(COSIM_XCLBIN) $(HOST_ARGS)
78+
@rm -f sdaccel_profile_summary.{csv,html} ${PLATFORM}-*-$(APP)-cosim_simulate.log
79+
80+
ifneq (,$(findstring aws-vu9p-f1,$(XDEVICE)))
81+
bitstream: $(BIT)/$(HW_XCLBIN:.xclbin=.awsxclbin)
82+
83+
hw: $(BIN)/$(HOST_BIN) $(BIT)/$(HW_XCLBIN:.xclbin=.awsxclbin)
84+
. $(XILINX_SDX)/settings64.sh;$^ $(HOST_ARGS)
85+
@rm -f sdaccel_profile_summary.{csv,html}
86+
87+
else
88+
bitstream: $(BIT)/$(HW_XCLBIN)
89+
90+
hw: $(BIN)/$(HOST_BIN) $(BIT)/$(HW_XCLBIN)
91+
. $(XILINX_SDX)/settings64.sh;$^ $(HOST_ARGS)
92+
@rm -f sdaccel_profile_summary.{csv,html}
93+
endif
94+
95+
hls: $(OBJ)/$(HW_XCLBIN:.xclbin=.xo)
96+
97+
exe: $(BIN)/$(HOST_BIN)
98+
99+
check-afi-status:
100+
@echo -n 'AFI state: ';aws ec2 describe-fpga-images --fpga-image-ids $$(jq -r '.FpgaImageId' $(BIT)/$(HW_XCLBIN:.xclbin=.afi))|jq '.FpgaImages[0].State.Code' -r
101+
102+
check-aws-bucket:
103+
ifndef AWS_BUCKET
104+
$(error AWS_BUCKET must be set to an available AWS S3 bucket)
105+
endif
106+
107+
clean:
108+
rm -rf $(BIN) $(BIT) $(RPT) $(OBJ) $(TMP) .Xil sdaccel_profile_summary.{csv,html}
109+
rmdir -p $(BIN) $(BIT) $(RPT) $(OBJ) $(TMP) --ignore-fail-on-non-empty 2>/dev/null || true
110+
111+
############################## helpers ##############################
112+
113+
WITH_SDACCEL = echo "$(1)";TMP=$$(mktemp -d /tmp/sdaccel-XXXXXXXXXX);cd $${TMP};. $(XILINX_SDX)/settings64.sh;$(1);RC=$$?;rm -rf $${TMP};exit $${RC}
114+
115+
############################## bin ##############################
116+
117+
$(BIN)/$(HOST_BIN): $(HOST_SRCS:%.cpp=$(OBJ)/%.o)
118+
@mkdir -p $(BIN)
119+
@$(call WITH_SDACCEL,$(CXX) $(abspath $^) $(HOST_LFLAGS) -o $(abspath $@))
120+
121+
$(BIN)/emconfig.json:
122+
@mkdir -p $(BIN)
123+
@echo "emconfigutil --platform $(PLATFORM) $(DEVICE_REPO_OPT) --od $(BIN)"
124+
@cd $(BIN);ln -sf /tmp/ .Xil;. $(XILINX_SDX)/settings64.sh;emconfigutil --platform $(PLATFORM) $(DEVICE_REPO_OPT);rm -f .Xil
125+
126+
#@$(call WITH_SDACCEL,emconfigutil --platform $(PLATFORM) $(DEVICE_REPO_OPT) --od $(abspath $(BIN)))
127+
128+
############################## obj ##############################
129+
130+
$(OBJ)/%.o: $(SRC)/%.cpp
131+
@mkdir -p $(OBJ)
132+
@$(call WITH_SDACCEL,$(CXX) $(HOST_CFLAGS) -MM -MP -MT $@ -MF $(abspath $(@:.o=.d)) $(abspath $<))
133+
@$(call WITH_SDACCEL,$(CXX) $(HOST_CFLAGS) -c $(abspath $<) -o $(abspath $@))
134+
135+
$(OBJ)/$(CSIM_XCLBIN:.xclbin=.xo): $(SRC)/$(KERNEL_SRCS)
136+
@mkdir -p $(OBJ)
137+
@$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_CSIM_OPT) $(CLCXX_OPT) -c -o $(abspath $@) $(abspath $<))
138+
139+
$(OBJ)/$(HW_XCLBIN:.xclbin=.xo): $(SRC)/$(KERNEL_SRCS)
140+
@mkdir -p $(OBJ)
141+
@$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_HW_OPT) $(CLCXX_OPT) --log --log_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) --report system --report_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) -c -o $(abspath $@) $(abspath $<))
142+
143+
-include $(OBJ)/$(HOST_SRCS:%.cpp=%.d)
144+
145+
############################## bit ##############################
146+
147+
$(BIT)/$(CSIM_XCLBIN): $(OBJ)/$(CSIM_XCLBIN:.xclbin=.xo)
148+
@mkdir -p $(BIT)
149+
@$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_CSIM_OPT) $(CLCXX_OPT) -l -o $(abspath $@) $(abspath $<))
150+
151+
$(BIT)/$(COSIM_XCLBIN): $(OBJ)/$(HW_XCLBIN:.xclbin=.xo)
152+
@mkdir -p $(BIT)
153+
@$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_COSIM_OPT) $(CLCXX_OPT) -l -o $(abspath $@) $(abspath $<))
154+
155+
$(BIT)/$(HW_XCLBIN): $(OBJ)/$(HW_XCLBIN:.xclbin=.xo)
156+
@mkdir -p $(BIT)
157+
@$(call WITH_SDACCEL,$(CLCXX) $(CLCXX_HW_OPT) $(CLCXX_OPT) --log --log_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) --report system --report_dir $(abspath $(RPT)/$(HW_XCLBIN:.xclbin=)) -l -o $(abspath $@) $(abspath $<))
158+
159+
$(BIT)/$(HW_XCLBIN:.xclbin=.awsxclbin): check-aws-bucket $(BIT)/$(HW_XCLBIN)
160+
@TMP=$$(mktemp -d);ln -rs ${BIT}/$(HW_XCLBIN) $${TMP};pushd $${TMP} >/dev/null;create-sdaccel-afi -xclbin=$(HW_XCLBIN) -o=$(HW_XCLBIN:.xclbin=) -s3_bucket=$(AWS_BUCKET) -s3_dcp_key=$(AWS_AFI_DIR) -s3_logs_key=$(AWS_AFI_LOG);popd >/dev/null;mv $${TMP}/$(HW_XCLBIN:.xclbin=.awsxclbin) $(BIT);mv $${TMP}/*afi_id.txt $(BIT)/$(HW_XCLBIN:.xclbin=.afi);rm -rf $${TMP}

0 commit comments

Comments
 (0)