VParams.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 Parameters::*;
  27. import Vector::*;
  28. //  ////////////////////////////////////////
  29. //  // Viterbi parameters
  30. //  ////////////////////////////////////////
  31. //  typedef 7  KSz;       // no of input bits 
  32. //  //typedef 35 ViterbiTracebackLength;
  33. //  typedef 35 TBLength;  // the minimum TB length for each output
  34. //  typedef 5  NoOfDecodes;    // no of traceback per stage, TBLength dividible by this value
  35. //  typedef 3  MetricSz;  // input metric
  36. //  typedef 1  FwdSteps;  // forward step per cycle
  37. //  typedef 4  FwdRadii;  // 2^(FwdRadii+FwdSteps*ConvInSz) <= 2^(KSz-1)
  38. //  typedef 1  ConvInSz;  // conv input size
  39. //  typedef 2  ConvOutSz; // conv output size
  40. //  Bit#(KSz) convEncoderG1 = 'b1111001;
  41. //  Bit#(KSz) convEncoderG2 = 'b1011011;
  42. ////////////////////////////////////////
  43. // Begin of type definitions
  44. ////////////////////////////////////////
  45. typedef TSub#(KSz,ConvInSz) VStateSz;
  46. typedef Bit#(VStateSz) VState;
  47. typedef TMul#(FwdSteps, ConvInSz) VStateSuffixSz;
  48. typedef Bit#(VStateSuffixSz) VTBEntry;
  49. typedef TSub#(VStateSz, VStateSuffixSz) VStatePrefixSz;
  50. typedef TExp#(VStateSz) VTotalStates;
  51. typedef TLog#(VStateSz) VStateIdxSz;
  52. // VMaxMetric = ConvOutSz * FwdSteps* (2^Metricsz - 1)
  53. // VMaxMetricSum = VMaxMetric * (KSz) // too large, but OK
  54. // VMetricSum = Bit#(log2 (VMaxMetricSum+1))
  55. // VMetric = Bit#(MetricSz)
  56. typedef TMul#(ConvOutSz,TMul#(FwdSteps,TSub#(TExp#(MetricSz), 1))) VMaxMetric;
  57. typedef TMul#(VMaxMetric, KSz) VMaxMetricSum; // max diff between two states
  58. typedef Bit#(TAdd#(TLog#(TAdd#(VMaxMetricSum,1)),1)) VMetricSum; //add one more bit using murali method 
  59. typedef Bit#(MetricSz) VMetric;
  60. typedef TExp#(VStateSuffixSz)          FwdEntrySz;      // butterfly size
  61. typedef TAdd#(FwdRadii,VStateSuffixSz) VRegsOutIdxSz;   
  62. typedef TExp#(VRegsOutIdxSz)           VRegsOutSz;      // elements processed per cycle
  63. typedef TSub#(VStateSz,VRegsOutIdxSz)  VRegsSubIdxSz;  
  64. typedef Bit#(VRegsOutIdxSz)            VRegsOut;
  65. typedef Bit#(VRegsSubIdxSz)            VRegsSubIdx;
  66. // TBStages = Ceiling((TBLength + VStateSuffixSz - 1)/VStateSuffixSz) = floor((TBLength + 2 * VStateSuffixSz - 2)/VStateSuffixSz)
  67. // VTrellisSz = TBStages * VStateSuffixSz
  68. typedef TDiv#(TAdd#(TBLength, TMul#(2, TSub#(VStateSuffixSz, 1))), VStateSuffixSz) NoOfTBStage; // no of tbstages
  69. typedef TLog#(NoOfTBStage) TBStageIdxSz;
  70. typedef Bit#(TBStageIdxSz) TBStageIdx;  
  71. typedef TMul#(NoOfTBStage, VStateSuffixSz) VTrellisSz;
  72. typedef Bit#(VTrellisSz) VTrellisEntry;
  73. typedef TLog#(VTrellisSz) VTrellisIdxSz;
  74. typedef Bit#(VTrellisIdxSz) VTrellisIdx;
  75. typedef Vector#(FwdSteps, Vector#(ConvOutSz, VMetric)) VInType;
  76. typedef Vector#(FwdSteps, Bit#(ConvInSz)) VOutType;
  77. // for the butterfly
  78. typedef TExp#(ConvInSz) RadixSz;
  79. typedef Tuple3#(VState, VMetricSum, tEntry_T) PrimEntry#(type tEntry_T); 
  80. typedef Vector#(RadixSz, PrimEntry#(tEntry_T)) RadixEntry#(type tEntry_T);
  81. typedef Vector#(FwdEntrySz, PrimEntry#(tEntry_T)) FwdEntry#(type tEntry_T);
  82. typedef Vector#(VRegsOutSz, PrimEntry#(tEntry_T)) VRegsOutEntry#(type tEntry_T);
  83. typedef Vector#(TMul#(VTotalStates,RadixSz), Vector#(ConvOutSz, VMetric)) MetricLUT; // also equal to TExp#(KSz)