1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- //
- // 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
- function logic [15:0] bswap16(input logic [15:0] d);
- bswap16 = { d[7:0], d[15:8] };
- endfunction // bswap16
- function logic [31:0] bswap32(input logic [31:0] d);
- bswap32 = { bswap16(d[15:0]), bswap16(d[31:16]) };
- endfunction // bswap32
- function logic [63:0] bswap64(input logic [63:0] d);
- bswap64 = { bswap32(d[31:0]), bswap32(d[63:32]) };
- endfunction // bswap64
|