Tested version of ADC.
[fpga/rpi-motor-control.git] / pmsm-control / util.vhdl
1 library ieee;
2 use ieee.std_logic_1164.all;
3 use ieee.numeric_std.all;
4
5 package util is
6   -- ceil(log2(n))
7   function ceil_log2(n: natural) return natural;
8   -- ceil(a/b)
9   function ceil_div(a: integer; b: integer) return integer;
10   --
11   function max(left, right: integer) return integer;
12   function min(left, right: integer) return integer;
13 end;
14
15 ---
16
17 package body util is
18
19   function ceil_log2(n: natural) return natural is
20   begin
21     if n <= 1 then
22       return 0;
23     else
24       if n mod 2 = 0 then
25         return 1 + ceil_log2(n/2);
26       else
27         return 1 + ceil_log2((n+1)/2);
28       end if;
29     end if;
30   end function ceil_log2;
31
32   function ceil_div(a: integer; b: integer) return integer is
33   begin
34     return (a+b-1)/b;
35   end function ceil_div;
36
37   function max(left, right: integer) return integer is
38   begin
39     if left > right then return left;
40     else return right;
41     end if;
42   end;
43
44   function min(left, right: integer) return integer is
45   begin
46     if left < right then return left;
47     else return right;
48     end if;
49   end;
50
51 end util;