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

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 ComplexF::*;
  23. import DataTypes::*;
  24. import Interfaces::*;
  25. import LibraryFunctions::*;
  26. import Vector::*;
  27. import FIFO::*;
  28. import Controller::*;
  29. import ConvEncoder::*;
  30. import CyclicExtender::*;
  31. import IFFT::*;
  32. import Interleaver::*;
  33. import LibraryFunctions::*;
  34. import Mapper::*;
  35. import Scrambler::*;
  36. (* synthesize *)
  37. module mkTransmitter_Pipe(Transmitter#(24,81));
  38.   let ifft <- mkIFFT_Pipe();
  39.   let _x <- mkTransmitter(ifft);   
  40.   return _x; 
  41. endmodule
  42. (* synthesize *)
  43. module mkTransmitter_Comb(Transmitter#(24,81));
  44.   let ifft <- mkIFFT_Comb();
  45.   let _x <- mkTransmitter(ifft); 
  46.   return _x; 
  47. endmodule
  48. (* synthesize *)
  49. module mkTransmitter_Circ(Transmitter#(24,81));
  50.   let ifft <- mkIFFT_Circ();
  51.   let _x <- mkTransmitter(ifft);   
  52.   return _x; 
  53. endmodule
  54. (* synthesize *)
  55. module mkTransmitter_1Radix(Transmitter#(24,81));
  56.   let ifft <- mkIFFT_Circ_w_1Radix();
  57.   let _x <- mkTransmitter(ifft);   
  58.   return _x; 
  59. endmodule
  60. (* synthesize *)
  61. module mkTransmitter_2Radix(Transmitter#(24,81));
  62.   let ifft <- mkIFFT_Circ_w_2Radix();
  63.   let _x <- mkTransmitter(ifft);   
  64.   return _x; 
  65. endmodule
  66. (* synthesize *)
  67. module mkTransmitter_4Radix(Transmitter#(24,81));
  68.   let ifft <- mkIFFT_Circ_w_4Radix();
  69.   let _x <- mkTransmitter(ifft);   
  70.   return _x; 
  71. endmodule
  72. (* synthesize *)
  73. module mkTransmitter_8Radix(Transmitter#(24,81));
  74.   let ifft <- mkIFFT_Circ_w_8Radix();
  75.   let _x <- mkTransmitter(ifft);   
  76.   return _x; 
  77. endmodule
  78. module [Module] mkTransmitter#(IFFT#(64) ifft)(Transmitter#(24,81));
  79.   function Action stitch(ActionValue#(a) x, function Action f(a v));
  80.     action
  81.       let v <- x;
  82.       f(v); 
  83.     endaction 
  84.   endfunction
  85.    
  86.   let controller   <- mkController();   
  87.   let scrambler    <- mkScrambler_48();     
  88.   let conv_encoder <- mkConvEncoder_24_48();
  89.   let interleaver  <- mkInterleaver(); 
  90.   let mapper       <- mkMapper_48_64();
  91.   //  let ifft         <- mkIFFT();
  92.   let cyc_extender <- mkCyclicExtender();
  93.    rule controller2scrambler(True);
  94.       stitch(controller.getData, scrambler.fromControl);
  95.    endrule
  96.    
  97.    rule controller2conv_encoder(True);
  98.       stitch(controller.getHeader,conv_encoder.encode_fromController);
  99.    endrule   
  100.    rule scrambler2conv_encoder(True);
  101.       stitch(scrambler.toEncoder, conv_encoder.encode_fromScrambler);
  102.    endrule   
  103.   
  104.    rule conv_encoder2interleaver(True);
  105.       stitch(conv_encoder.getOutput, interleaver.fromEncoder);
  106.    endrule
  107.    rule interleaver2mapper(True);
  108.       stitch(interleaver.toMapper, mapper.fromInterleaver);
  109.    endrule
  110.  
  111.    rule mapper2ifft(True);
  112.       stitch(mapper.toIFFT, ifft.fromMapper);
  113.    endrule
  114.      
  115.    rule ifft2cyclicExtender(True);
  116.       stitch(ifft.toCyclicExtender, cyc_extender.fromIFFT);
  117.    endrule
  118.    method ActionValue#(MsgComplexFVec#(81)) toAnalogTX() if(True);
  119.      let x <- cyc_extender.toAnalogTX();
  120.      return(x);
  121.    endmethod
  122.      
  123.    method Action getFromMAC(TXMAC2ControllerInfo x);
  124.      controller.getFromMAC(x); 
  125.    endmethod
  126.      
  127.    method Action getDataFromMAC(Data#(24) x); 
  128.      controller.getDataFromMAC(x);
  129.    endmethod 
  130.      
  131. endmodule