Vectorization — HLS

The HLS side is how a DataArray lowers to synthesizable Vitis C++: the packing factor pf and lanes, the canonical lane loop (read_array_lane / read_array_slice), and the storage modes. These pages cover the three modes — raw (a flat C array, explicit per-cycle control), struct (a generated wrapper type), and complex (complex elements) — each over a local array.

Moving a whole array to and from words — over a memory buffer, a FIFO, or an AXI4-Stream — is enumerated in Array serialization (the array analog of single-value Serialization): the routine for each channel, where it is generated, and the framed_word gap. The pipelined loop patterns over a real port are in Interfaces.


Table of contents

  • Vitis: raw arrays - Vectorized arrays in raw storage — a flat C array; the packing factor and lanes, read_array_slice over a local buffer, and the canonical lane loop (with the pf=0 wide-element case).
  • Vitis: struct arrays - Vectorized arrays in struct storage — a generated per-array wrapper type carrying its own packing methods, the same lane layout behind an object interface.
  • Vitis: complex arrays - Vectorized complex arrays in Vitis — the std::complex / wf_cint element storage and the lane loop over complex values, building on the raw-array pattern.
  • Vitis: array serialization - Move a whole ARRAY of a schema element to and from words — the generated _array_utils helpers (elem_read / read_array_slice / read_stream_lane / read_axi4_stream_lane) and the DataArray struct methods (read_array / pack_to_uint). The array analog of single-value Serialization: enumerates every channel you can (de)serialize an array to, the routine for each, and where it is generated.