Transmitter.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 Scrambler::*;
  31. import Encoder::*;
  32. import Interleaver::*;
  33. import Mapper::*;
  34. import PilotInsert::*;
  35. import FFTIFFT::*;
  36. import CPInsert::*;
  37. import Preambles::*;
  38. import Connectable::*;
  39. import GetPut::*;
  40. import LibraryFunctions::*;
  41. (* synthesize *)
  42. module mkScramblerInstance
  43.    (Scrambler#(TXScramblerAndGlobalCtrl,TXGlobalCtrl,
  44.        ScramblerDataSz,ScramblerDataSz));
  45.    Scrambler#(TXScramblerAndGlobalCtrl,TXGlobalCtrl,
  46.       ScramblerDataSz,ScramblerDataSz) block;
  47.    block <- mkScrambler(scramblerMapCtrl,
  48. scramblerConvertCtrl,
  49. scramblerGenPoly);
  50.    return block;
  51. endmodule
  52. (* synthesize *)
  53. module mkEncoderInstance
  54.    (Encoder#(TXGlobalCtrl,EncoderInDataSz,EncoderOutDataSz));
  55.    Encoder#(TXGlobalCtrl,EncoderInDataSz,EncoderOutDataSz) block;
  56.    block <- mkEncoder;
  57.    return block;
  58. endmodule
  59. (* synthesize *)
  60. module mkInterleaverInstance
  61.    (Interleaver#(TXGlobalCtrl,InterleaverDataSz,
  62.  InterleaverDataSz,MinNcbps));
  63.    Interleaver#(TXGlobalCtrl,InterleaverDataSz,
  64. InterleaverDataSz,MinNcbps) block;
  65.    block <- mkInterleaver(modulationMapCtrl, interleaverGetIdx);
  66.    return block;
  67. endmodule
  68. (* synthesize *)
  69. module mkMapperInstance
  70.    (Mapper#(TXGlobalCtrl,MapperInDataSz,MapperOutDataSz,
  71.     TXFPIPrec,TXFPFPrec)); 
  72.    Mapper#(TXGlobalCtrl,MapperInDataSz,MapperOutDataSz,
  73.    TXFPIPrec,TXFPFPrec) block;
  74.    block <- mkMapper(modulationMapCtrl, mapperNegateInput);
  75.    return block;
  76. endmodule
  77. (* synthesize *)
  78. module mkPilotInsertInstance
  79.    (PilotInsert#(TXGlobalCtrl,PilotInDataSz,PilotOutDataSz,
  80.  TXFPIPrec,TXFPFPrec)); 
  81.    PilotInsert#(TXGlobalCtrl,PilotInDataSz,PilotOutDataSz,
  82. TXFPIPrec,TXFPFPrec) block; 
  83.    block <- mkPilotInsert(pilotMapCtrl, pilotAdder,
  84.   pilotPRBSMask, pilotInitSeq);
  85.    return block;
  86. endmodule
  87. (* synthesize *)
  88. module [Module] mkIFFTInstance (IFFT#(TXGlobalCtrl,FFTIFFTSz,
  89.       TXFPIPrec,TXFPFPrec));
  90.    IFFT#(TXGlobalCtrl,FFTIFFTSz,TXFPIPrec,TXFPFPrec) block;
  91.    block <- mkIFFT;
  92.    return block;
  93. endmodule
  94. (* synthesize *)
  95. module mkCPInsertInstance(CPInsert#(TXGlobalCtrl,CPInsertDataSz,
  96.     TXFPIPrec,TXFPFPrec));
  97.    CPInsert#(TXGlobalCtrl,CPInsertDataSz,
  98.      TXFPIPrec,TXFPFPrec) block;
  99.    block <- mkCPInsert(cpInsertMapCtrl,getShortPreambles,
  100.        getLongPreambles);
  101.    return block;
  102. endmodule
  103. (* synthesize *)
  104. module mkTransmitterInstance
  105.    (Transmitter#(TXScramblerAndGlobalCtrl,ScramblerDataSz,
  106.  TXFPIPrec,TXFPFPrec));
  107.    // state elements
  108.    let scrambler <- mkScramblerInstance;
  109.    let encoder <- mkEncoderInstance;
  110.    let interleaver <- mkInterleaverInstance;
  111.    let mapper <- mkMapperInstance;
  112.    let pilotInsert <- mkPilotInsertInstance;
  113.    let ifft <- mkIFFTInstance;
  114.    let cpInsert <- mkCPInsertInstance;
  115.    
  116.    // connections
  117.    mkConnectionPrint("Scrm -> Conv",scrambler.out,encoder.in);
  118.    mkConnectionPrint("Enco -> Intr",encoder.out,interleaver.in);
  119.    mkConnectionPrint("Intr -> Mapr",interleaver.out,mapper.in);
  120.    mkConnectionPrint("Mapr -> Pilt",mapper.out,pilotInsert.in);
  121.    mkConnectionPrint("Pilt -> IFFT",pilotInsert.out,ifft.in);
  122.    mkConnectionPrint("IFFT -> CPIn",ifft.out,cpInsert.in);
  123. //     mkConnection(scrambler.out,encoder.in);
  124. //     mkConnection(encoder.out,interleaver.in);
  125. //     mkConnection(interleaver.out,mapper.in);
  126. //     mkConnection(mapper.out,pilotInsert.in);
  127. //     mkConnection(pilotInsert.out,ifft.in);
  128. //     mkConnection(ifft.out,cpInsert.in);
  129.    
  130.    // methods
  131.    interface in = scrambler.in;
  132.    interface out = cpInsert.out;
  133. endmodule
  134.