Library of reusable VHDL components
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.

103 lines
2.3 KiB

  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4. package UtilsP is
  5. function and_reduce (data : in std_logic_vector) return std_logic;
  6. function and_reduce (data : in boolean_vector) return boolean;
  7. function or_reduce (data : in std_logic_vector) return std_logic;
  8. function or_reduce (data : in boolean_vector) return boolean;
  9. function xor_reduce (data : in std_logic_vector) return std_logic;
  10. function even_parity (data : in std_logic_vector) return std_logic;
  11. function odd_parity (data : in std_logic_vector) return std_logic;
  12. function count_ones (data : in std_logic_vector) return natural;
  13. end package UtilsP;
  14. package body UtilsP is
  15. function and_reduce (data : in std_logic_vector) return std_logic is
  16. begin
  17. for i in data'range loop
  18. if data(i) = '0' then
  19. return '0';
  20. end if;
  21. end loop;
  22. return '1';
  23. end function and_reduce;
  24. function and_reduce (data : in boolean_vector) return boolean is
  25. begin
  26. for i in data'range loop
  27. if (not(data(i))) then
  28. return false;
  29. end if;
  30. end loop;
  31. return true;
  32. end function and_reduce;
  33. function or_reduce (data : in std_logic_vector) return std_logic is
  34. begin
  35. for i in data'range loop
  36. if data(i) = '1' then
  37. return '1';
  38. end if;
  39. end loop;
  40. return '0';
  41. end function or_reduce;
  42. function or_reduce (data : in boolean_vector) return boolean is
  43. begin
  44. for i in data'range loop
  45. if data(i) then
  46. return true;
  47. end if;
  48. end loop;
  49. return false;
  50. end function or_reduce;
  51. function xor_reduce (data : in std_logic_vector) return std_logic is
  52. variable v_return : std_logic := '0';
  53. begin
  54. for i in data'range loop
  55. v_return := v_return xor data(i);
  56. end loop;
  57. return v_return;
  58. end function xor_reduce;
  59. function even_parity (data : in std_logic_vector) return std_logic is
  60. begin
  61. return xor_reduce(data);
  62. end function even_parity;
  63. function odd_parity (data : in std_logic_vector) return std_logic is
  64. begin
  65. return not(xor_reduce(data));
  66. end function odd_parity;
  67. function count_ones (data : in std_logic_vector) return natural is
  68. variable v_return : natural := 0;
  69. begin
  70. for i in data'range loop
  71. v_return := v_return + 1;
  72. end loop;
  73. end function count_ones;
  74. end package body UtilsP;