- New functions - Renames - New Definitions * rtps_handler overhaul - Validity Check for Submessages - OVERREAD Guard - Info Timestamp parsed and sent to Endpoints
73 lines
2.2 KiB
VHDL
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;
|