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

3G开发

开发平台:

Others

  1. //----------------------------------------------------------------------//
  2. // The MIT License 
  3. // 
  4. // Copyright (c) 2007 Alfred Man Cheuk Ng, mcn02@mit.edu 
  5. // 
  6. // Permission is hereby granted, free of charge, to any person 
  7. // obtaining a copy of this software and associated documentation 
  8. // files (the "Software"), to deal in the Software without 
  9. // restriction, including without limitation the rights to use,
  10. // copy, modify, merge, publish, distribute, sublicense, and/or sell
  11. // copies of the Software, and to permit persons to whom the
  12. // Software is furnished to do so, subject to the following conditions:
  13. // 
  14. // The above copyright notice and this permission notice shall be
  15. // included in all copies or substantial portions of the Software.
  16. // 
  17. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  18. // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  19. // OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  20. // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  21. // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  22. // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  23. // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  24. // OTHER DEALINGS IN THE SOFTWARE.
  25. //----------------------------------------------------------------------//
  26. import Controls::*;
  27. import DataTypes::*;
  28. import FIFO::*;
  29. import Interfaces::*;
  30. import LibraryFunctions::*;
  31. import GetPut::*;
  32. import Scrambler::*;
  33. module mkDescrambler#(function ScramblerCtrl#(n,shifter_sz) 
  34.  mapCtrl(ctrl_t ctrl),
  35.       Bit#(shifter_sz) genPoly)
  36.    (Descrambler#(ctrl_t,n,n))
  37.    provisos(Add#(1,xxA,shifter_sz),
  38.     Bits#(ctrl_t,ctrl_sz));
  39.    
  40.    // id function
  41.    function ctrl_t 
  42.       descramblerConvertCtrl(ctrl_t ctrl);
  43.       return ctrl;
  44.    endfunction
  45.  
  46.    let descrambler <- mkScrambler(mapCtrl,
  47.   descramblerConvertCtrl,
  48.   genPoly);
  49.    return descrambler;
  50. endmodule
  51. // // auxiliary function
  52. // function Tuple2#(Bit#(n), Bit#(sRegSz)) scramble(Bit#(n) inBit, Bit#(sRegSz) sReg, Bit#(sRegSz) mask)
  53. //   provisos (Add#(1,xxA,sRegSz));
  54. //       Integer sRegSzInt = valueOf(sRegSz);
  55. //       Nat sRegSzNat = fromInteger(sRegSzInt);
  56. //       Bit#(n) res = 0;
  57. //       Bit#(sRegSz) newSReg = sReg;
  58. //       for(Integer i = 0; i < valueOf(n); i = i + 1)
  59. //  begin
  60. //     Bit#(1) temp = 0;
  61. //     for(Integer j = 0; j < sRegSzInt; j = j + 1)
  62. //       if (mask[j] == 1)
  63. //         temp = temp ^ newSReg[j];
  64. //     res[i] = inBit[i] ^ temp;
  65. //     newSReg = {newSReg[sRegSzNat-1:1],temp};
  66. //  end
  67. //       return tuple2(res, newSReg);
  68. // endfunction
  69. // // main function
  70. // module mkDescrambler#(function DescramblerCtrl genCtrl(ctrl_t ctrl),
  71. //        Bit#(sRegSz) mask,
  72. //        Bit#(sRegSz) initSeq)
  73. //   (Descrambler#(ctrl_t, n))
  74. //   provisos (Add#(1, xxA, sRegSz),
  75. //      Add#(1, xxB, n), Add#(sRegSz, xxC, n),
  76. //      Bits#(DescramblerMesg#(ctrl_t,n), xxD));
  77. //    Reg#(Bit#(sRegSz)) sReg <- mkReg(initSeq);
  78. //    FIFO#(DescramblerMesg#(ctrl_t,n)) outQ <- mkSizedFIFO(2);
  79.    
  80. //     interface Put in;
  81. //         method Action put(DescramblerMesg#(ctrl_t, n) inMsg);
  82. //       let ctrl = genCtrl(inMsg.control); 
  83. //       case (ctrl)
  84. //  Bypass: outQ.enq(inMsg);
  85. //  FixRst: 
  86. //    begin
  87. //       let res = scramble(inMsg.data, initSeq, mask);
  88. //       outQ.enq(DescramblerMesg{ control: inMsg.control,
  89. //         data: tpl_1(res)});
  90. //       sReg <= tpl_2(res);
  91. //    end
  92. //  DynRst:
  93. //    begin
  94. //       Tuple2#(Bit#(xxC),Bit#(sRegSz)) splittedData = split(inMsg.data);
  95. //       let newInitSeq = reverseBits(tpl_2(splittedData));
  96. //       let newInData = tpl_1(splittedData);
  97. //       let res = scramble(newInData, newInitSeq, mask);
  98. //       Bit#(n) outData = {tpl_1(res), newInitSeq};
  99. //       outQ.enq(DescramblerMesg{ control: inMsg.control,
  100. //         data: outData});
  101. //       sReg <= tpl_2(res);
  102. //    end
  103. //  Norm:
  104. //    begin
  105. //       let res = scramble(inMsg.data, sReg, mask);
  106. //       outQ.enq(DescramblerMesg{ control: inMsg.control,
  107. //         data:tpl_1(res)});
  108. //       sReg <= tpl_2(res);
  109. //    end
  110. //       endcase // case(inMsg.ctrl)
  111. //         endmethod
  112. //     endinterface
  113. //     interface out = fifoToGet(outQ);
  114. // endmodule // mkDescrambler