3.5.1.19.3 C++ Arbitrary Precision Integer Library
(Ask a Question)The C++ ap_[u]int
type allows specifying signed and unsigned data types
of any bitwidth. They can be used for arithmetic, concatenation, and bit level
operations. You can use the ap_[u]int
type by including the following
header file.
#include "hls/ap_int.hpp"
The desired width of the ap_[u]int
can be specified as a template
parameter, ap_[u]int<W>
, allowing for wider types than the
existing C arbitrary bit-width library.
An example using the C++ library is shown below.
#include "hls/ap_int.hpp"
#include <iostream>
using namespace hls;
int main() { ap_uint<128> data("0123456789ABCDEF0123456789ABCDEF"); ap_int<4> res(0); for (ap_uint<8> i = 0; i < data.length(); i += 4) { // If this four bit range of data is <= 7 if (data(i + 3, i) <= 7) { res -= 1; } else { res += 1; } } // iostream doesn't synthesize to hardware, so only include this // line in software compilation. Any block surrounded by this ifdef // will be ignored when compiling to hardware. #ifndef __SYNTHESIS__ std::cout << res << std::endl; #endif
}
In the above code we iterate through a 128 bit unsigned integer in four bit segments, and track the difference between how many segments are above and below 7. All variables have been reduced to their specified minimum widths.