|
|
@@ -0,0 +1,95 @@ |
|
|
|
LIBRARY ieee;
|
|
|
|
USE ieee.std_logic_1164.ALL;
|
|
|
|
USE ieee.std_logic_signed.ALL;
|
|
|
|
USE ieee.numeric_std.ALL;
|
|
|
|
|
|
|
|
PACKAGE used_functions_pkg IS
|
|
|
|
|
|
|
|
FUNCTION log2_sup_integer (number : natural) RETURN natural;
|
|
|
|
FUNCTION log2_inf_integer (number : natural) RETURN natural;
|
|
|
|
|
|
|
|
|
|
|
|
END PACKAGE;
|
|
|
|
|
|
|
|
PACKAGE BODY used_functions_pkg IS
|
|
|
|
|
|
|
|
--functions
|
|
|
|
FUNCTION log2_sup_integer (number : natural) RETURN natural IS
|
|
|
|
VARIABLE result : natural;
|
|
|
|
BEGIN
|
|
|
|
|
|
|
|
IF(number <= 1) THEN
|
|
|
|
result := 0;
|
|
|
|
ELSIF(number = 2) THEN
|
|
|
|
result := 1;
|
|
|
|
ELSIF(number > 2 AND number <= 4) THEN
|
|
|
|
result := 2;
|
|
|
|
ELSIF(number > 4 AND number <= 8) THEN
|
|
|
|
result := 3;
|
|
|
|
ELSIF(number > 8 AND number <= 16) THEN
|
|
|
|
result := 4;
|
|
|
|
ELSIF(number > 16 AND number <= 32) THEN
|
|
|
|
result := 5;
|
|
|
|
ELSIF(number > 32 AND number <= 64) THEN
|
|
|
|
result := 6;
|
|
|
|
ELSIF(number > 64 AND number <= 128) THEN
|
|
|
|
result := 7;
|
|
|
|
ELSIF(number > 128 AND number <= 256) THEN
|
|
|
|
result := 8;
|
|
|
|
ELSIF(number > 256 AND number <= 512) THEN
|
|
|
|
result := 9;
|
|
|
|
ELSIF(number > 512 AND number <= 1024) THEN
|
|
|
|
result := 10;
|
|
|
|
ELSIF(number > 1024 AND number <= 2048) THEN
|
|
|
|
result := 11;
|
|
|
|
ELSIF(number > 2048 AND number <= 4096) THEN
|
|
|
|
result := 12;
|
|
|
|
ELSIF(number > 4096 AND number <= 8192) THEN
|
|
|
|
result := 13;
|
|
|
|
ELSIF(number > 8192 AND number <= 16384) THEN
|
|
|
|
result := 14;
|
|
|
|
ELSIF(number > 16384 AND number <= 32768) THEN
|
|
|
|
result := 15;
|
|
|
|
END IF;
|
|
|
|
RETURN result;
|
|
|
|
END FUNCTION;
|
|
|
|
|
|
|
|
FUNCTION log2_inf_integer (number : natural) RETURN natural IS
|
|
|
|
VARIABLE result : natural;
|
|
|
|
BEGIN
|
|
|
|
|
|
|
|
IF(number < 2) THEN
|
|
|
|
result := 0;
|
|
|
|
ELSIF(number >= 2 AND number < 4) THEN
|
|
|
|
result := 1;
|
|
|
|
ELSIF(number >= 4 AND number < 8) THEN
|
|
|
|
result := 2;
|
|
|
|
ELSIF(number >= 8 AND number < 16) THEN
|
|
|
|
result := 3;
|
|
|
|
ELSIF(number >= 16 AND number < 32) THEN
|
|
|
|
result := 4;
|
|
|
|
ELSIF(number >= 32 AND number < 64) THEN
|
|
|
|
result := 5;
|
|
|
|
ELSIF(number >= 64 AND number < 128) THEN
|
|
|
|
result := 6;
|
|
|
|
ELSIF(number >= 128 AND number < 256) THEN
|
|
|
|
result := 7;
|
|
|
|
ELSIF(number >= 256 AND number < 512) THEN
|
|
|
|
result := 8;
|
|
|
|
ELSIF(number >= 512 AND number < 1024) THEN
|
|
|
|
result := 9;
|
|
|
|
ELSIF(number >= 1024 AND number < 2048) THEN
|
|
|
|
result := 10;
|
|
|
|
ELSIF(number >= 2048 AND number < 4096) THEN
|
|
|
|
Result := 11;
|
|
|
|
ELSIF(Number >= 4096 AND number < 8192) THEN
|
|
|
|
result := 12;
|
|
|
|
ELSIF(number >= 8192 AND number < 16384) THEN
|
|
|
|
result := 13;
|
|
|
|
ELSIF(number >= 16384 AND number < 32768) THEN
|
|
|
|
result := 14;
|
|
|
|
END IF;
|
|
|
|
RETURN result;
|
|
|
|
END FUNCTION;
|
|
|
|
|
|
|
|
END PACKAGE BODY used_functions_pkg;
|