]> rtime.felk.cvut.cz Git - fpga/rpi-motor-control.git/blobdiff - pmsm-control/util.vhdl
pridan podadresar pmsm-control
[fpga/rpi-motor-control.git] / pmsm-control / util.vhdl
diff --git a/pmsm-control/util.vhdl b/pmsm-control/util.vhdl
new file mode 100644 (file)
index 0000000..a8bfa98
--- /dev/null
@@ -0,0 +1,51 @@
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+package util is
+  -- ceil(log2(n))
+  function ceil_log2(n: natural) return natural;
+  -- ceil(a/b)
+  function ceil_div(a: integer; b: integer) return integer;
+  --
+  function max(left, right: integer) return integer;
+  function min(left, right: integer) return integer;
+end;
+
+---
+
+package body util is
+
+  function ceil_log2(n: natural) return natural is
+  begin
+    if n <= 1 then
+      return 0;
+    else
+      if n mod 2 = 0 then
+        return 1 + ceil_log2(n/2);
+      else
+        return 1 + ceil_log2((n+1)/2);
+      end if;
+    end if;
+  end function ceil_log2;
+
+  function ceil_div(a: integer; b: integer) return integer is
+  begin
+    return (a+b-1)/b;
+  end function ceil_div;
+
+  function max(left, right: integer) return integer is
+  begin
+    if left > right then return left;
+    else return right;
+    end if;
+  end;
+
+  function min(left, right: integer) return integer is
+  begin
+    if left < right then return left;
+    else return right;
+    end if;
+  end;
+
+end util;