LibraryFunctions.bsv
上传用户:aoptech
上传日期:2014-09-22
资源大小:784k
文件大小:3k
源码类别:

3G开发

开发平台:

Others

  1. // The MIT License
  2. //
  3. // Copyright (c) 2006 Nirav Dave (ndave@csail.mit.edu)
  4. //
  5. // Permission is hereby granted, free of charge, to any person obtaining a copy
  6. // of this software and associated documentation files (the "Software"), to deal
  7. // in the Software without restriction, including without limitation the rights
  8. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  9. // copies of the Software, and to permit persons to whom the Software is
  10. // furnished to do so, subject to the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be included in
  13. // all copies or substantial portions of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  18. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  20. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  21. // THE SOFTWARE.
  22. import Vector::*;
  23. function Bit#(1) getParity(Bit#(n) v) provisos(Add#(1, k, n));
  24.   function Bit#(1) _xor(Bit#(1) x, Bit#(1) y);
  25.     return (x ^ y);
  26.   endfunction
  27.   Vector#(n,Bit#(1)) vv = unpack(v);
  28.   Bit#(1) parity = Vector::fold(_xor, vv);
  29.   return(parity);
  30. endfunction
  31. function Bit#(n) reverseBits(Bit#(n) x);
  32.   Vector#(n, Bit#(1)) vx  = unpack(x);
  33.   Vector#(n, Bit#(1)) rvx = Vector::reverse(vx);
  34.   Bit#(n)            prvx = pack(rvx);
  35.   return(prvx);
  36. endfunction
  37. function Bit#(1) signBit(Bit#(n) x) provisos(Add#(1,k,n));
  38.   match {.signbit,.rest} = split(x);
  39.   return(signbit); 
  40. endfunction
  41. function Vector#(sz, any_e) zipWith4(function any_e f(any_a a, any_b b, any_c c, any_d d),
  42.                     Vector#(sz, any_a) va, Vector#(sz, any_b) vb,
  43. Vector#(sz, any_c) vc, Vector#(sz, any_d) vd);
  44.   Vector#(sz, any_e) ve = replicate(?);
  45.   for(Integer i = 0; i < valueOf(sz); i = i + 1)
  46.   ve[i] = f(va[i],vb[i],vc[i],vd[i]);
  47.   return(ve);
  48. endfunction
  49. function Vector#(n, Bit#(m)) bitBreak(Bit#(nm) x) provisos(Mul#(n,m,nm));
  50.   return unpack(x);
  51. endfunction
  52. function Bit#(nm) bitMerge(Vector#(n, Bit#(m)) x) provisos(Mul#(n,m,nm));
  53.   return pack(x);
  54. endfunction
  55.    
  56. function Vector#(n, alpha) v_truncate(Vector#(m, alpha) in) provisos(Add#(n,k,m));
  57.    Vector#(n, alpha) retval = newVector();
  58.    for(Integer i = valueOf(n) - 1, Integer j = valueOf(m) - 1;  i >= 0; i = i - 1, j = j - 1)
  59.       begin
  60.  retval[i] = in[j];
  61.       end
  62.        
  63.    return (retval);
  64. endfunction
  65. function Vector#(n, alpha) v_rtruncate(Vector#(m, alpha) in) provisos(Add#(n,k,m));
  66.    Vector#(n, alpha) retval = newVector();
  67.    for(Integer i = 0; i < valueOf(n); i = i + 1)
  68.       begin
  69.  retval[i] = in[i];
  70.       end
  71.    return (retval);
  72. endfunction