HLS synthesis fails due to error: too many template arguments for class template 'stream'

I am currently learning how to use the HLS Design flow works. For that I’ve followed the provided example from this GitHub Page: https://github.com/Xilinx/PYNQ-HelloWorld/tree/master/boards/ip/hls

But during the synthesis I bump into this error.

in file included from ../vitis_lib/vision/L1/include/common/xf_common.hpp:20:
../vitis_lib/vision/L1/include/common/xf_structs.hpp:436:10: error: too many template arguments for class template 'stream'
    hls::stream<DATATYPE, XFCVDEPTH> data;

My best guess is that I probably miss some packages that I need during the synthesis.
I really want to understand it but I don’t have any experience with HLS or C++.
I’ve tried to rebuild the IP in an Ubuntu 16.04.6 VM and Vivado 2019.2 and tried to build it in Windows 10 Vivado 2019.2. Both failed with the same error.

I already posted the question on GitHub and on the Xilinx Forum but unfortunately didn’t get an answer. I hope this question is not too stupid… :confused:

Thank you very much in advance! :relaxed:

C_Synthesis.log (5.8 KB)
resize_accel_csim.log (13.3 KB)

I need to know what exactly you did. Did you just go to resize folder and run make? I think I have tested that and it worked fine.

Hey @rock thank you very much answering me! :relaxed:
I am sorry that I didn’t make msyself clearer. :pensive:

And yes I’ve just run the make command. I’ve also cloned the Vitis Libraries Repository and named it “vitis_lib”. In the Vitis Libraries Repository I’ve also checked if they had done changes on the code that might causes the error, but the last change was 9 months ago. So I think that couldn’t cause the error.

I saw in the make file that it calls the Vivado HLS. It is my first time using HLS, so I didn’t configure anything or installed additional packages.

Do you need to install some packages or need to run a certain setup before using Vivado HLS?
Or any other clue what I might doing wrong?

Thank you very much for helping me!!

I think you should just do:

git clone --recursive https://github.com/Xilinx/PYNQ-HelloWorld.git

Then the IP is ready to be built inside boards/ip/hls/resize. Run make there.

1 Like

It workd @rock :heart_eyes: :heart_eyes: :heart_eyes:
You are really awesome :scream:

I am soo thankful. I struggled soo much and searched for quite a long time to figure out a solution. :sob:

I would have never imagened that manually cloning the Vitis Libraries Repository and name it manually “vitis_lib” would through such a weird error.
And I also didn’t know that git clone --recursive would also clone the linked repositorys!

I hope this post is also relevant for other people who want to try to rebuild the resize ip :relaxed:

Just for my own curiosity:
Do you have any idea, why this strange error occured? Because even if I manually git clone the vitis libraries repository why should it throw such a weird error in the HLS synthesis?

Repeating the exact same procedure as of Nov 10 2020 on Ubuntu 18.04, Vivado 2020.1,

git clone --recursive https://github.com/Xilinx/PYNQ-HelloWorld.git
cd PYNQ-HelloWorld/boards/ip/hls/resize
make

fails with the following:

ERROR: [HLS 200-70] Compilation errors found: In file included from xf_resize_accel.cpp:1:
xf_resize_accel.cpp:34:4: error: use of undeclared identifier 'xf'
   xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPC_T> &_src,
   ^
xf_resize_accel.cpp:34:15: error: expected ')'
   xf::cv::Mat<TYPE, HEIGHT, WIDTH, NPC_T> &_src,
              ^
xf_resize_accel.cpp:33:17: note: to match this '('
void axis2xfMat (axis_t *src,
                ^
xf_resize_accel.cpp:38:18: error: use of undeclared identifier 'src_rows'
 for (int i=0; i<src_rows; i++) {
                 ^
xf_resize_accel.cpp:39:19: error: use of undeclared identifier 'src_cols'
  for (int j=0; j<src_cols; j++) {
                  ^
xf_resize_accel.cpp:42:2: error: use of undeclared identifier '_src'; did you mean 'src'?
 _src.data[i*src_cols+j] = src[i*src_cols+j].data;
 ^~~~
 src
xf_resize_accel.cpp:33:26: note: 'src' declared here
void axis2xfMat (axis_t *src,
                         ^
xf_resize_accel.cpp:42:6: error: member reference type 'axis_t *' is a pointer; maybe you meant to use '->'?
 _src.data[i*src_cols+j] = src[i*src_cols+j].data;
 ~~~~^
     ->
xf_resize_accel.cpp:42:14: error: use of undeclared identifier 'src_cols'
 _src.data[i*src_cols+j] = src[i*src_cols+j].data;
             ^
xf_resize_accel.cpp:42:34: error: use of undeclared identifier 'src_cols'
 _src.data[i*src_cols+j] = src[i*src_cols+j].data;
                                 ^
xf_resize_accel.cpp:48:18: error: use of undeclared identifier 'xf'
void xfMat2axis (xf::cv::Mat<TYPE, NEWHEIGHT, NEWWIDTH, NPC_T> &_dst,
                 ^
xf_resize_accel.cpp:48:6: error: variable has incomplete type 'void'
void xfMat2axis (xf::cv::Mat<TYPE, NEWHEIGHT, NEWWIDTH, NPC_T> &_dst,
     ^
xf_resize_accel.cpp:48:30: error: use of undeclared identifier 'TYPE'
void xfMat2axis (xf::cv::Mat<TYPE, NEWHEIGHT, NEWWIDTH, NPC_T> &_dst,
                             ^
xf_resize_accel.cpp:50:31: error: expected ';' after top level declarator
   int dst_rows, int dst_cols) {
                              ^
                              ;
12 errors generated.
Failed during preprocessing.
    while executing
"source script.tcl"
    ("uplevel" body line 1)
    invoked from within
"uplevel \#0 [list source $arg] "

INFO: [Common 17-206] Exiting vivado_hls at Tue Nov 10 12:57:25 2020...

That should be 2019.2. I have not adjusted the flow based on 2020.1 yet.