VHDL implementation of a polyphase filter bank with polyphase filter and 5ndft
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.7KB

  1. LIBRARY ieee;
  2. USE ieee.std_logic_1164.ALL;
  3. USE ieee.std_logic_signed.ALL;
  4. USE ieee.numeric_std.ALL;
  5. PACKAGE used_functions_pkg IS
  6. FUNCTION log2_sup_integer (number : natural) RETURN natural;
  7. FUNCTION log2_inf_integer (number : natural) RETURN natural;
  8. END PACKAGE;
  9. PACKAGE BODY used_functions_pkg IS
  10. --functions
  11. FUNCTION log2_sup_integer (number : natural) RETURN natural IS
  12. VARIABLE result : natural;
  13. BEGIN
  14. IF(number <= 1) THEN
  15. result := 0;
  16. ELSIF(number = 2) THEN
  17. result := 1;
  18. ELSIF(number > 2 AND number <= 4) THEN
  19. result := 2;
  20. ELSIF(number > 4 AND number <= 8) THEN
  21. result := 3;
  22. ELSIF(number > 8 AND number <= 16) THEN
  23. result := 4;
  24. ELSIF(number > 16 AND number <= 32) THEN
  25. result := 5;
  26. ELSIF(number > 32 AND number <= 64) THEN
  27. result := 6;
  28. ELSIF(number > 64 AND number <= 128) THEN
  29. result := 7;
  30. ELSIF(number > 128 AND number <= 256) THEN
  31. result := 8;
  32. ELSIF(number > 256 AND number <= 512) THEN
  33. result := 9;
  34. ELSIF(number > 512 AND number <= 1024) THEN
  35. result := 10;
  36. ELSIF(number > 1024 AND number <= 2048) THEN
  37. result := 11;
  38. ELSIF(number > 2048 AND number <= 4096) THEN
  39. result := 12;
  40. ELSIF(number > 4096 AND number <= 8192) THEN
  41. result := 13;
  42. ELSIF(number > 8192 AND number <= 16384) THEN
  43. result := 14;
  44. ELSIF(number > 16384 AND number <= 32768) THEN
  45. result := 15;
  46. END IF;
  47. RETURN result;
  48. END FUNCTION;
  49. FUNCTION log2_inf_integer (number : natural) RETURN natural IS
  50. VARIABLE result : natural;
  51. BEGIN
  52. IF(number < 2) THEN
  53. result := 0;
  54. ELSIF(number >= 2 AND number < 4) THEN
  55. result := 1;
  56. ELSIF(number >= 4 AND number < 8) THEN
  57. result := 2;
  58. ELSIF(number >= 8 AND number < 16) THEN
  59. result := 3;
  60. ELSIF(number >= 16 AND number < 32) THEN
  61. result := 4;
  62. ELSIF(number >= 32 AND number < 64) THEN
  63. result := 5;
  64. ELSIF(number >= 64 AND number < 128) THEN
  65. result := 6;
  66. ELSIF(number >= 128 AND number < 256) THEN
  67. result := 7;
  68. ELSIF(number >= 256 AND number < 512) THEN
  69. result := 8;
  70. ELSIF(number >= 512 AND number < 1024) THEN
  71. result := 9;
  72. ELSIF(number >= 1024 AND number < 2048) THEN
  73. result := 10;
  74. ELSIF(number >= 2048 AND number < 4096) THEN
  75. Result := 11;
  76. ELSIF(Number >= 4096 AND number < 8192) THEN
  77. result := 12;
  78. ELSIF(number >= 8192 AND number < 16384) THEN
  79. result := 13;
  80. ELSIF(number >= 16384 AND number < 32768) THEN
  81. result := 14;
  82. END IF;
  83. RETURN result;
  84. END FUNCTION;
  85. END PACKAGE BODY used_functions_pkg;