A recursive template C++14 max function for High-Level Synthesis
Go to file
2021-07-21 19:53:37 +02:00
hls_files Initial Commit 2021-07-21 19:14:02 +02:00
sources Initial Commit 2021-07-21 19:14:02 +02:00
.gitignore Initial Commit 2021-07-21 19:14:02 +02:00
LICENSE Initial Commit 2021-07-21 19:14:02 +02:00
Makefile Initial Commit 2021-07-21 19:14:02 +02:00
README.md Update README.md 2021-07-21 19:53:37 +02:00

hls_max_template

A max function in C++14 using recursive templates for High-Level Synthesis.

Content

This repository provides a header which defines two recursive template classes with a process public method that find the maximum of an array of any size and any type. max_template can be used for all possible sizes while max_pow2 works only with sizes that are power of 2. max_struct is used to implement max_template and may not be used directly.

Usage

something like:

const T max_array = max_template<SIZE>::process(array);

where T is a correct type (e.g. int, float, ap_uint, ...), SIZE is an unsigned integer known at compile time (e.g. a literal, a constexpr or a preprocessor constant) and array is an C-style array of T of length SIZE. max_pow2 is used the same way but won't work (even if it compiles) if SIZE is not a power of 2.

It must be compiled with --std=c++14 (or gnu++14 or another equivalent).

Including

Including the max.hpp header is all that is needed to use it in another HLS project.

Testbench

The prototype of a testbench is provided and the files can be tested with make testbench.

Xilinx® Vitis HLS

A TCL script is provided in hls_files and can be used with Xilinx® Vitis HLS. Just do in a shell:

cd hls_files
vitis_hls -f script.tcl

By default, no IP are created. You may need to adjust the part and the clock targeted.

It as been successfully tested on Vitis HLS version 2020.2 and may or may not work with other versions.