HLS Avalon interface data width implementable only with 2^N numbers
Hi, this is about a second issue we have while migrating an IP core from HLS workflow to new sycl HLS tools (first is here, might be related but this one stand s for its own as well) .
The HLS defined core has an Avalon streaming interface definition of
using InputStream = ihc::stream_in<ac_int<96, false>;, ihc::bitsPerSymbol<16>, ihc::usesPackets<true>>; InputStream g_in_stream; // global
After HLS implementation the component tcl script defines a 96 width bus as expected:
#### Streaming interface for g_in_stream add_interface g_in_stream avalon_streaming sink ... set_interface_property g_in_stream dataBitsPerSymbol 16 set_interface_property g_in_stream symbolsPerBeat 6 set_interface_property g_in_stream firstSymbolInHighOrderBits 0 set_interface_assignment g_in_stream hls.cosim.name {@g_in_stream} add_interface_port g_in_stream g_in_stream_data data input 96 ...
The migrated sycl HLS core has this aquivalent interface definition
// StreamingBeat struct enables sideband signals in Avalon streaming interface using StreamingBeatT = sycl::ext::intel::experimental::StreamingBeat< ac_int<96, false>, // type carried over this Avalon streaming interface's data signal true, // enable startofpacket and endofpacket signals false>; // disable the empty signal // Pipe properties using PipePropertiesT = decltype(sycl::ext::oneapi::experimental::properties( sycl::ext::intel::experimental::ready_latency<0>, sycl::ext::intel::experimental::bits_per_symbol<16>, sycl::ext::intel::experimental::uses_valid<true>, sycl::ext::intel::experimental::first_symbol_in_high_order_bits<true>, sycl::ext::intel::experimental::protocol_avalon_streaming_uses_ready)); // Image streams using InPixelPipe = sycl::ext::intel::experimental::pipe< InStream, // An identifier for the pipe StreamingBeatT, // The type of data in the pipe 0, // The capacity of the pipe PipePropertiesT // Customizable pipe properties >;
The implementation results in this error:
Compiler Error: The data type carried by _InStream exceeds the bits per symbol. You can either enable the sideband signal 'use empty' or increase the bits per symbol.
Only power of 2 numbers for equal number couples of streamingBeatT data width and PipePropertiesT:bits_per_symbol are implementable.
For e.g. 32bit the component tcl scripts is
#### Channel (Avalon_ST) interface avm_channel_id_acl_c_InStream_pipe_channel_read add_interface avm_channel_id_acl_c_InStream_pipe_channel_read avalon_streaming sink ... set_interface_property avm_channel_id_acl_c_InStream_pipe_channel_read symbolsPerBeat 1 set_interface_property avm_channel_id_acl_c_InStream_pipe_channel_read dataBitsPerSymbol 32 ...
Attached is a reproducer based on streaming data interface example.
Is there any new restriction for Avalon interfaces in the sycl HLS style? How to get the initial interface definition implemented?
Thanks for any suggestion!
oneAPI DPC++/C++ Compiler 2024.1.0 (2024.1.0.20240308), Ubuntu 22.04.4 LTS