Namespace math

This namespace is used to provide support functions for math operations.

Functions

template<pint Worig, Wnew> function sign_extend (int<Worig> x) : int<Wnew>;

This function takes an integer x of width Worig, and sign extends its most significant bit to return a result that has width Wnew. It assumes that Wnew is at least Worig.

template<pint Worig, Wnew> function zero_extend (int<Worig> x) : int<Wnew>;

This function takes an integer x of width Worig, and zero extends it to return a result that has width Wnew. It assumes that Wnew is at least Worig.

Namespace math::fxp

Functions

The math::fxp namespace contains simple definitions for fixed-point arithmetic functions. Functions take two parameters A and B, and integers use the standard Q-format where the representation Q(A,B) corresponds to A digits for the integer part and B digits for the fractional part. The representation uses 2's complement for negative numbers, so addition and subtraction are the same for signed and unsigned arithmetic.

template<pint A,B> function add (int<A+B> x, y) : int<A+B>;

This returns the sum of two Q(A,B) numbers x and y.

template<pint A,B> function sub (int<A+B> x, y) : int<A+B>;

This returns the difference of two Q(A,B) numbers x and y.

template<pint A,B> function multu (int<A+B> x, y) : int<A+B>;

This returns the unsigned product of two Q(A,B) numbers x and y.

template<pint A,B> function divu (int<A+B> x, y) : int<A+B>;

This returns the unsigned division result x/y of two Q(A,B) numbers x and y.

template<pint A,B> function mults (int<A+B> x, y) : int<A+B>;

This returns the signed product of two Q(A,B) numbers x and y.

template<pint A,B> function divs (int<A+B> x, y) : int<A+B>;

This returns the signed division result x/y of two Q(A,B) numbers x and y.

template<pint A,B> function uminus (int<A+B> x) : int<A+B>;

This returns the negated value of a signed Q(A,B) number x.