To move forward after HLS with logic synthesis, vivado HLS needs to export the design as a Xilinx IP. I was trying to synthesize an atax kernel from Polybench, and the export_design command fails with the following error:
missing operand at _@_
in expression " _@_* / 8"
(parsing expression " * / 8")
invoked from within
"expr $mem_width * $mem_depth / 8"
("native_bram" arm line 8)
invoked from within
"switch -nocase -- $type {
axi4lite {
# {{{
## direction
if {$mode == "master"} {
set dir0 ..."
("foreach" body line 5)
invoked from within
"foreach interface_name [dict keys $Interfaces] {
set interface_detail [dict get $Interfaces $interface_name]
set ctype ""
dict with interf..."
(file "run_ippack.tcl" line 1163)
INFO: [Common 17-206] Exiting Vivado at Mon Apr 11 14:12:06 2022...
ERROR: [IMPL 213-28] Failed to generate IP.
Since the error talks about axilite, I tried changing the pragmas in the _dse.cpp file generated by scaleHLS, and discovered that the synthesis works fine if I remove #pragma HLS resource variable=v3 core=ram_s2p_bram from one of the input arguments. So, I am not entirely sure whether this is a Vivado problem or a scaleHLS problem, but I thought it makes sense to report it, as it may be caused by the pragma settings.
This is the smallest example if someone wants to reproduce the issue. Input code:
# define M 2
# define N 2
void test_atax(float A[2][2], float x[2], float y[2], float tmp[2])
{
int i, j;
for (i = 0; i < N; i++)
y[i] = 0;
for (i = 0; i < M; i++)
{
tmp[i] = 0.0;
for (j = 0; j < N; j++)
tmp[i] = tmp[i] + A[i][j] * x[j];
for (j = 0; j < N; j++)
y[j] = y[j] + A[i][j] * tmp[i];
}
}
Code optimized by scaleHLS (to see which input pragma I am talking about):
To move forward after HLS with logic synthesis, vivado HLS needs to export the design as a Xilinx IP. I was trying to synthesize an atax kernel from Polybench, and the export_design command fails with the following error:
Since the error talks about axilite, I tried changing the pragmas in the _dse.cpp file generated by scaleHLS, and discovered that the synthesis works fine if I remove
#pragma HLS resource variable=v3 core=ram_s2p_bram
from one of the input arguments. So, I am not entirely sure whether this is a Vivado problem or a scaleHLS problem, but I thought it makes sense to report it, as it may be caused by the pragma settings.This is the smallest example if someone wants to reproduce the issue. Input code:
Code optimized by scaleHLS (to see which input pragma I am talking about):