rtps-fpga/src/math_pkg.vhd
Greek c68caec626 * Package update
- New functions
	- Renames
	- New Definitions
* rtps_handler overhaul
	- Validity Check for Submessages
	- OVERREAD Guard
	- Info Timestamp parsed and sent to Endpoints
2020-11-13 11:44:17 +01:00

73 lines
2.2 KiB
VHDL

package math_pkg is
-- calculates the logarithm dualis of the operand and rounds up
-- the result to the next integer value.
function log2c(constant value : in integer) return integer;
-- returns the maximum of the two operands
function max(constant value1, value2 : in integer) return integer;
-- returns the maximum of the three operands
function max(constant value1, value2, value3 : in integer) return integer;
-- returns the minimum of the two operands
function min(constant value1, value2 : in integer) return integer;
function round_div(constant divident, divisor : in integer) return integer;
end package;
package body math_pkg is
--*****FUNCTION DEFINITION*****
function log2c(constant value : in integer) return integer is
variable ret_value : integer;
variable cur_value : integer;
begin
ret_value := 0;
cur_value := 1;
while cur_value < value loop
ret_value := ret_value + 1;
cur_value := cur_value * 2;
end loop;
return ret_value;
end function;
function max(constant value1, value2 : in integer) return integer is
variable ret_value : integer;
begin
if value1 > value2 then
ret_value := value1;
else
ret_value := value2;
end if;
return ret_value;
end function;
function max(constant value1, value2, value3 : in integer) return integer is
begin
return max(max(value1, value2), value3);
end function;
function min(constant value1, value2 : in integer) return integer is
variable ret_value : integer;
begin
if value1 < value2 then
ret_value := value1;
else
ret_value := value2;
end if;
return ret_value;
end function;
-- TODO: Rename to ceil_div, since we do not actually round
function round_div(constant divident, divisor : in integer) return integer is
variable ret : integer;
begin
ret := divident / divisor;
if (divident mod divisor /= 0) then
ret := ret + 1;
end if;
return ret;
end function;
end package body;