Selecting and Assigning to a Range of Bits
(Ask a Question)#include "hls/ap_int.hpp" #include <iostream> #include <stdio.h> using namespace hls;
//... ap_uint<8> Aa(0xBC); std::cout << "Aa = " << Aa << std::endl; ap_int<4> Bb = Aa(7, 4); // Bb initialized as 0xB; "Aa(7, 4)" is equivalent // to "Aa.range(7, 4)" std::cout << "Bb = " << Bb << std::endl; ap_int<4> Cc = Aa[2]; // Cc initialized as 0x1 // Aa[2] is zero extended to match widths std::cout << "Cc = " << Cc << std::endl; Aa(3, 0) = 0xA; // Aa becomes 0xBA; "Aa(3, 0) is equivalent to "Aa.range(3, 0)" std::cout << "Aa = " << Aa << std::endl; Aa.byte(1, 4) = 0xC; // Aa becomes 0xCA; std::cout << "Aa = " << Aa << std::endl; Aa.bytes(3, 2, 2) = 0xD; // AA becomes 0xDA std::cout << "Aa = " << Aa << std::endl;
On C++ arbitrary precision types num(a, b)
(or num.range(a,
b)
) will select and create a reference to the underlying arbitrary precision
value. The operator num[a]
selects and creates a reference to a single
bit. This reference can be assigned to, and used to access the underlying data. The
arbitrary precision num.byte(n, s = 8)
function selects and creates a
reference to the n-th
byte of the number which can be assigned to and used
to access the underlying data. Similarly, the num.bytes(m, n, s = 8)
function selects and creates a reference to a range of bytes from the m-th
to the n-th
byte (inclusive) of the number. In both functions, the last
argument is an optional argument which defines the number of bits per byte, and defaults to
8.