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

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 Interfaces::*;
  29. import Parameters::*;
  30. import Synchronizer::*;
  31. import Unserializer::*;
  32. import FFTIFFT::*;
  33. import ChannelEstimator::*;
  34. import Demapper::*;
  35. import Interleaver::*;
  36. import Decoder::*;
  37. import Descrambler::*;
  38. import Connectable::*;
  39. import GetPut::*;
  40. import LibraryFunctions::*;
  41. (* synthesize *)
  42. module mkSynchronizerInstance
  43.    (Synchronizer#(SyncIntPrec,SyncFractPrec));
  44.    Synchronizer#(SyncIntPrec,SyncFractPrec) block <- mkSynchronizer;
  45.    return block;
  46. endmodule
  47. (* synthesize *)
  48. module mkUnserializerInstance
  49.    (Unserializer#(UnserialOutDataSz,RXFPIPrec,RXFPFPrec));
  50.    Unserializer#(UnserialOutDataSz,RXFPIPrec,RXFPFPrec) block <- mkUnserializer;
  51.    return block;
  52. endmodule
  53. (* synthesize *)
  54. module mkReceiverPreFFTInstance
  55.    (ReceiverPreFFT#(UnserialOutDataSz,RXFPIPrec,RXFPFPrec));
  56.    
  57.    // state elements
  58.    let synchronizer <- mkSynchronizerInstance;
  59.    let unserializer <- mkUnserializerInstance;
  60.    
  61.    // connections
  62.    mkConnectionPrint("Sync -> Unse",synchronizer.out,unserializer.in);
  63. //     mkConnection(synchroinzer.out,unserializer.in);
  64.    
  65.    // methods
  66.    interface in = synchronizer.in;
  67.    interface out = unserializer.out;
  68. endmodule      
  69. (* synthesize *)
  70. module [Module] mkFFTInstance
  71.    (FFT#(RXGlobalCtrl,FFTIFFTSz,RXFPIPrec,RXFPFPrec));
  72.    FFT#(RXGlobalCtrl,FFTIFFTSz,RXFPIPrec,RXFPFPrec) block <- mkFFT;
  73.    return block;
  74. endmodule
  75. (* synthesize *)
  76. module mkChannelEstimatorInstance
  77.    (ChannelEstimator#(RXGlobalCtrl,CEstInDataSz,
  78.       CEstOutDataSz,RXFPIPrec,RXFPFPrec));
  79.    ChannelEstimator#(RXGlobalCtrl,CEstInDataSz,
  80.      CEstOutDataSz,RXFPIPrec,RXFPFPrec) block;
  81.    block <- mkChannelEstimator(pilotRemover);
  82.    return block;
  83. endmodule
  84. (* synthesize *)
  85. module mkDemapperInstance
  86.    (Demapper#(RXGlobalCtrl,DemapperInDataSz,DemapperOutDataSz,
  87.       RXFPIPrec,RXFPFPrec,ViterbiMetric));
  88.    Demapper#(RXGlobalCtrl,DemapperInDataSz,DemapperOutDataSz,
  89.      RXFPIPrec,RXFPFPrec,ViterbiMetric) block;
  90.    block <- mkDemapper(modulationMapCtrl,demapperNegateOutput);
  91.    return block;
  92. endmodule
  93. (* synthesize *)
  94. module mkDeinterleaverInstance
  95.    (Deinterleaver#(RXGlobalCtrl,DeinterleaverDataSz,
  96.    DeinterleaverDataSz,ViterbiMetric,MinNcbps));
  97.    Deinterleaver#(RXGlobalCtrl,DeinterleaverDataSz,
  98.   DeinterleaverDataSz, ViterbiMetric,MinNcbps) block;
  99.    block <- mkDeinterleaver(modulationMapCtrl,deinterleaverGetIndex);
  100.    return block;
  101. endmodule
  102. (* synthesize *)
  103. module mkDecoderInstance
  104.    (Decoder#(RXGlobalCtrl,DecoderInDataSz,ViterbiMetric,
  105.      DecoderOutDataSz,Bit#(1)));
  106.    Decoder#(RXGlobalCtrl,DecoderInDataSz,ViterbiMetric,
  107.     DecoderOutDataSz,Bit#(1)) block;
  108.    block <- mkDecoder;
  109.    return block;
  110. endmodule
  111.     
  112. (* synthesize *)
  113. module mkReceiverPreDescramblerInstance
  114.    (ReceiverPreDescrambler#(RXGlobalCtrl,FFTIFFTSz,RXFPIPrec,
  115.     RXFPFPrec,DecoderOutDataSz,Bit#(1)));
  116.     // state elements
  117.     let fft <- mkFFTInstance;
  118.     let channelEstimator <- mkChannelEstimatorInstance;
  119.     let demapper <- mkDemapperInstance;
  120.     let deinterleaver <- mkDeinterleaverInstance;
  121.     let decoder <- mkDecoderInstance;
  122.     
  123.     // connections
  124.     mkConnectionPrint("FFT  -> CEst",fft.out,channelEstimator.in);
  125.     mkConnectionPrint("CEst -> Dmap",channelEstimator.out,demapper.in);
  126.     mkConnectionPrint("Dmap -> Dint",demapper.out,deinterleaver.in);
  127.     mkConnectionPrint("Dint -> Deco",deinterleaver.out,decoder.in);
  128.     //     mkConnection(synchroinzer.out,unserializer.in);
  129.     
  130.     // methods
  131.     interface in = fft.in;
  132.     interface out = decoder.out;
  133. endmodule
  134. (* synthesize *)
  135. module mkDescramblerInstance
  136.    (Descrambler#(RXDescramblerAndGlobalCtrl,
  137.  DescramblerDataSz,DescramblerDataSz));
  138.    Descrambler#(RXDescramblerAndGlobalCtrl,
  139. DescramblerDataSz,DescramblerDataSz) block;
  140.    block <- mkDescrambler(descramblerMapCtrl,
  141.   descramblerGenPoly);
  142.    return block;
  143. endmodule
  144. // (* synthesize *)
  145. // module mkDescramblerInstance
  146. //    (Descrambler#(RXDescramblerAndGlobalCtrl,
  147. //   DescramblerDataSz,DescramblerDataSz));
  148. //    Descrambler#(RXDescramblerAndGlobalCtrl,
  149. //  DescramblerDataSz,DescramblerDataSz) block;
  150. //    block <- mkScrambler(descramblerMapCtrl,
  151. //  descramblerConvertCtrl,
  152. //  descramblerGenPoly);
  153. //    return block;
  154. // endmodule