| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | 
							- //
 
- // Common useful functions
 
- //
 
- // ceil(ilog2(a))
 
- function int ilog2c(int a);
 
-    int b;
 
-    b = 0;
 
-    while ((1 << b) < a)
 
-      b++;
 
-    ilog2c = b;
 
- endfunction // ilog2c
 
- // floor(ilog2(a))
 
- function int ilog2f(int a);
 
-   ilog2f = ilog2c(a+1)-1;
 
- endfunction // ilog2f
 
- function int max(int a, int b);
 
-   max = a > b ? a : b;
 
- endfunction // max
 
- function int max3(int a, int b, int c);
 
-   max3 = max(max(a,b),c);
 
- endfunction // max3
 
- function int max4(int a, int b, int c, int d);
 
-   max4 = max(max(a,b),max(c,d));
 
- endfunction // max4
 
- function int min(int a, int b);
 
-   min = a < b ? a : b;
 
- endfunction // min
 
- function int min3(int a, int b, int c);
 
-   min3 = min(min(a,b),c);
 
- endfunction // min3
 
- function int min4(int a, int b, int c, int d);
 
-   min4 = min(min(a,b),min(c,d));
 
- endfunction // min4
 
- // Quartus doesn't support $sformatf() for synthesis, sigh...
 
- // This is highly useful to create synthetic attribute strings;
 
- // the rather clumsy design is specifically in order to be handled
 
- // correctly by synthesis.
 
- function string tostr(input integer i);
 
-    if (i < 0)
 
-      tostr = {"-",tostr(-i)};
 
-    else if (i >= 10)
 
-      tostr = {tostr(i/10), tostr(i%10)};
 
-    else if (i == 0)
 
-      tostr = "0";
 
-    else if (i == 1)
 
-      tostr = "1";
 
-    else if (i == 2)
 
-      tostr = "2";
 
-    else if (i == 3)
 
-      tostr = "3";
 
-    else if (i == 4)
 
-      tostr = "4";
 
-    else if (i == 5)
 
-      tostr = "5";
 
-    else if (i == 6)
 
-      tostr = "6";
 
-    else if (i == 7)
 
-      tostr = "7";
 
-    else if (i == 8)
 
-      tostr = "8";
 
-    else
 
-      tostr = "9";
 
- endfunction
 
- function longint unsigned
 
-   round_div(input longint unsigned num, input longint unsigned den);
 
-    round_div = (num + (den >> 1))/den;
 
- endfunction // round_div
 
 
  |