Skip to content

Commit 9a68ddb

Browse files
debugging
1 parent d519e3a commit 9a68ddb

File tree

2 files changed

+38
-19
lines changed

2 files changed

+38
-19
lines changed

hls4ml/templates/vitis_accelerator/Makefile

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
# Absolute path to top directory of Git repository
1+
# Absolute path to top directory of accelerator project
22
PWD = $(shell readlink -f .)
33

4-
#Checks for XILINX_VITIS
4+
# Checks for XILINX_VITIS
55
ifndef XILINX_VITIS
66
$(error XILINX_VITIS variable is not set, please set correctly and rerun)
77
endif
88

9-
#Checks for XILINX_XRT
9+
# Checks for XILINX_XRT
1010
ifndef XILINX_XRT
1111
$(error XILINX_XRT variable is not set, please set correctly and rerun)
1212
endif
1313

14-
#Checks for XILINX_VIVADO
14+
# Checks for XILINX_VIVADO
1515
ifndef XILINX_VIVADO
1616
$(error XILINX_VIVADO variable is not set, please set correctly and rerun)
1717
endif
1818

19-
#Checks for g++
19+
# Checks for g++
2020
ifneq ($(shell expr $(shell g++ -dumpversion) \>= 5), 1)
2121
CXX := $(XILINX_VIVADO)/tps/lnx64/gcc-6.2.0/bin/g++
2222
$(warning [WARNING]: g++ version older. Using g++ provided by the tool : $(CXX))
@@ -50,7 +50,7 @@ kernel: myproject_kernel.xclbin
5050
# Cleaning stuff
5151
.PHONY: clean
5252
clean:
53-
-rm -rf host libs/*.o
53+
-rm -rf host
5454
-rm -rf *.xclbin*
5555
-rm -rf build*
5656
-rm -rf *.log *.jou *.rpt *.csv *.mdb *.ltx

hls4ml/writer/vitis_accelerator_writer.py

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
from shutil import copy, copytree
44

55
from hls4ml.writer.vitis_writer import VitisWriter
6-
from hls4ml.backends import VitisAcceleratorConfig
6+
77

88
class VitisAcceleratorWriter(VitisWriter):
99
def __init__(self):
10+
1011
super().__init__()
1112

1213
def create_accelerator_config(self, model):
14+
from hls4ml.backends import VitisAcceleratorConfig
15+
1316
self.vitis_accelerator_config = VitisAcceleratorConfig(model.config)
1417

1518
def write_parameters_overrides(self, model):
@@ -91,32 +94,35 @@ def write_kernel(self, model):
9194
Args:
9295
model (ModelGraph): the hls4ml model.
9396
"""
97+
from hls4ml.backends import VitisAcceleratorConfig
9498

9599
filedir = os.path.dirname(os.path.abspath(__file__))
96100
io_type = model.config.get_config_value("IOType")
97101

98102
# Writing header file
99-
f_header = open(os.path.join(filedir, '../templates/vitis_accelerator/kernel_wrapper_parallel_template.h'))
103+
f_header = open(os.path.join(filedir, '../templates/vitis_accelerator/kernel_wrapper.h'))
100104
fout_header = open(f'{model.config.get_output_dir()}/kernel_wrapper.h', 'w')
101105
model_inputs = model.get_input_variables()
102106
model_outputs = model.get_output_variables()
103107
for line in f_header.readlines():
104108
if '// hls-fpga-machine-learning accelerator parameters' in line:
105-
newline += '#define NUM_CU ' + format(self.vitis_accelerator_config.get_kernelcount()) + '\n'
106-
newline += '#define NUM_THREAD ' + format(self.vitis_accelerator_config.get_threadcount()) + '\n'
109+
newline = ''
110+
newline += '#define NUM_CU ' + format(self.vitis_accelerator_config.get_num_kernel()) + '\n'
111+
newline += '#define NUM_THREAD ' + format(self.vitis_accelerator_config.get_num_thread()) + '\n'
107112
newline += '#define NUM_CHANNEL '
108113
if self.vitis_accelerator_config.get_memory_type() == 'hbm':
109-
newline += format(self.vitis_accelerator_config.get_memory_channel_count // (2 * self.vitis_accelerator_config.get_num_kernel())) + '\n'
114+
newline += format(self.vitis_accelerator_config.get_memory_channel_count() // (2 * self.vitis_accelerator_config.get_num_kernel())) + '\n'
110115
elif self.vitis_accelerator_config.get_memory_type() == 'ddr':
111116
newline += '1\n'
112-
newline += '#define BATCHSIZE ' + format(self.vitis_accelerator_config.get_threadcount()) + '\n'
117+
newline += '#define BATCHSIZE ' + format(self.vitis_accelerator_config.get_batchsize()) + '\n'
113118
elif '// hls-fpga-machine-learning accelerator io' in line:
119+
newline = ''
114120
if io_type == 'io_parallel':
115121
for inp in model_inputs:
116122
for out in model_outputs:
117123
newline += '#define DATA_SIZE_IN ' + format(inp.size_cpp()) + '\n'
118124
newline += '#define INSTREAMSIZE (BATCHSIZE * DATA_SIZE_IN)' + '\n\n'
119-
newline += '#define DATA_SIZE_OUT' + format(out.size_cpp()) + '\n'
125+
newline += '#define DATA_SIZE_OUT ' + format(out.size_cpp()) + '\n'
120126
newline += '#define OUTSTREAMSIZE (BATCHSIZE * DATA_SIZE_OUT)' + '\n\n'
121127
newline += 'typedef ' + format(inp.type.name) + ' in_buffer_t\n'
122128
newline += 'typedef ' + format(out.type.name) + ' out_buffer_t\n'
@@ -128,7 +134,7 @@ def write_kernel(self, model):
128134
newline += '#define DATA_SIZE_IN ' + ' * '.join(dims) + '\n'
129135
newline += '#define NNET_ARRAY_DEPTH ' + format(nnet_array_depth) + '\n'
130136
newline += '#define INSTREAMSIZE (BATCHSIZE * DATA_SIZE_IN * NNET_ARRAY_DEPTH)' + '\n\n'
131-
newline += '#define DATA_SIZE_OUT' + format(out.size_cpp()) + '\n'
137+
newline += '#define DATA_SIZE_OUT ' + format(out.size_cpp()) + '\n'
132138
newline += '#define OUTSTREAMSIZE (BATCHSIZE * DATA_SIZE_OUT)' + '\n\n'
133139
precision_str = model.config.backend.convert_precision_string(model.config.model_precision.get('default'))
134140
newline += 'typedef ' + precision_str + ' in_buffer_t\n'
@@ -137,11 +143,12 @@ def write_kernel(self, model):
137143
newline = line
138144
fout_header.write(newline)
139145
f_header.close()
146+
fout_header.close()
140147

141148
# Writing source file
142-
f_source = os.path.join(filedir, '../templates/vitis_accelerator/kernel_wrapper_' + io_type +'.cpp')
149+
f_source = open(os.path.join(filedir, '../templates/vitis_accelerator/kernel_wrapper_' + io_type +'.cpp'))
143150
fout_source = open(f'{model.config.get_output_dir()}/kernel_wrapper.cpp', 'w')
144-
for line in f_header.readlines():
151+
for line in f_source.readlines():
145152
if 'myproject' in line:
146153
newline = line.replace('myproject', format(model.config.get_project_name()))
147154
else:
@@ -157,6 +164,8 @@ def write_host(self, model):
157164
Args:
158165
model (ModelGraph): the hls4ml model.
159166
"""
167+
from hls4ml.backends import VitisAcceleratorConfig
168+
160169
# Write host code
161170
filedir = os.path.dirname(os.path.abspath(__file__))
162171
f = open(os.path.join(filedir, '../templates/vitis_accelerator/myproject_host_cl.cpp'))
@@ -175,7 +184,7 @@ def write_host(self, model):
175184

176185
# Write libraries
177186
src = os.path.join(filedir, '../templates/vitis_accelerator/libs')
178-
dst = format(model.config.get_output_dir())
187+
dst = f'{model.config.get_output_dir()}/libs'
179188
copytree(src, dst, copy_function=copy)
180189

181190
def write_makefile(self, model):
@@ -204,7 +213,9 @@ def write_accelerator_card_cfg(self, model):
204213
Args:
205214
model (ModelGraph): the hls4ml model.
206215
"""
216+
from hls4ml.backends import VitisAcceleratorConfig
207217

218+
# Write accelerator_card.cfg
208219
filedir = os.path.dirname(os.path.abspath(__file__))
209220
f = open(os.path.join(filedir, '../templates/vitis_accelerator/accelerator_card.cfg'))
210221
fout = open(f'{model.config.get_output_dir()}/accelerator_card.cfg', 'w')
@@ -229,7 +240,7 @@ def write_accelerator_card_cfg(self, model):
229240
newline = line.replace('MYPLATFORM', format(self.vitis_accelerator_config.get_platform()))
230241
elif '# hls-fpga-machine-learning kernel control' in line:
231242
newline = '[connectivity]\n'
232-
newline += 'nk=kernel_wrapper:{}\n\n'.format(num_channels)
243+
newline += 'nk=kernel_wrapper:' + format(num_kernels) + '\n\n'
233244
if memory_type == 'hbm':
234245
for i in range(0, num_kernels):
235246
newline += 'sp=kernel_wrapper_{}.in:HBM[{}:{}]\n'.format(i + 1, (i*2)*num_channels_per_cu, ((i*2 + 1)*num_channels_per_cu) - 1)
@@ -247,6 +258,13 @@ def write_accelerator_card_cfg(self, model):
247258
f.close()
248259
fout.close()
249260

261+
# Copy hls_config.tcl
262+
filedir = os.path.dirname(os.path.abspath(__file__))
263+
srcpath = os.path.join(filedir, '../templates/vitis_accelerator/hls_config.tcl')
264+
dstpath = f'{model.config.get_output_dir()}/hls_config.tcl'
265+
copy(srcpath, dstpath)
266+
267+
250268
def write_nnet_utils_overrides(self, model):
251269
"""Override nnet_types.h pointer comparison
252270
@@ -263,8 +281,8 @@ def write_hls(self, model):
263281
"""
264282
Write the HLS project. Calls the steps from VivadoWriter, adapted for Vitis
265283
"""
266-
print("[K] Vitis_accelerator_writer -> write_hls called\n\n\n\n")
267284
super().write_hls(model)
285+
print("\n\nWriting Accelerator code")
268286
self.create_accelerator_config(model)
269287
self.write_nnet_utils_overrides(model)
270288
self.write_build_script_backend_override(model)
@@ -273,3 +291,4 @@ def write_hls(self, model):
273291
self.write_host(model)
274292
self.write_makefile(model)
275293
self.write_accelerator_card_cfg(model)
294+
print("Done")

0 commit comments

Comments
 (0)