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

3G开发

开发平台:

Others

  1. import Connectable::*;
  2. import FIFO::*;
  3. import GetPut::*;
  4. import Vector::*;
  5. import Controls::*;
  6. import DataTypes::*;
  7. import Interfaces::*;
  8. import Parameters::*;
  9. import Receiver::*;
  10. import Transmitter::*;
  11. import RXController::*;
  12. import TXController::*;
  13. import LibraryFunctions::*;
  14. interface WiMAXTransmitter;
  15.    method Action txStart(TXVector txVec);    // fromMAC 
  16.    method Action txData(Bit#(8) inData);    // fromMAC
  17.    method Action txEnd();                    // fromMAC
  18.    interface Get#(DACMesg#(TXFPIPrec,TXFPFPrec)) out; // to DAC
  19. endinterface
  20.       
  21. interface WiMAXReceiver;
  22.    interface Put#(RXFeedback) inFeedback;
  23.    interface Put#(SynchronizerMesg#(RXFPIPrec,RXFPFPrec)) in;
  24.    interface Get#(Bit#(11)) outLength;
  25.    interface Get#(Bit#(8))  outData;
  26. endinterface
  27. interface WiMAXTransceiver;
  28.    interface WiMAXTransmitter transmitter;
  29.    interface WiMAXReceiver    receiver;
  30. endinterface      
  31. (* synthesize *)
  32. module mkWiMAXTransmitter(WiMAXTransmitter);
  33.    // state element
  34.    let tx_controller <- mkTXController;
  35.    let transmitter <- mkTransmitterInstance;
  36.    
  37.    // make connection
  38.    mkConnection(tx_controller.out,transmitter.in);
  39.    
  40.    // methods
  41.    method Action txStart(TXVector txVec);
  42.       tx_controller.txStart(txVec);
  43.    endmethod
  44.    
  45.    method Action txData(Bit#(8) inData);
  46.       tx_controller.txData(inData);
  47.    endmethod
  48.    
  49.    method Action txEnd();
  50.       tx_controller.txEnd;
  51.    endmethod
  52.    
  53.    interface out = transmitter.out;
  54. endmodule
  55. (* synthesize *)
  56. module mkWiMAXReceiver(WiMAXReceiver);
  57.    // state elements
  58.    let rx_controller <- mkRXController;
  59.    let receiver_preFFT <- mkReceiverPreFFTInstance;
  60.    let receiver_preDescrambler <- mkReceiverPreDescramblerInstance;
  61.    let descrambler <- mkDescramblerInstance;
  62.    
  63.    // connections
  64.    mkConnectionPrint("PreFFT -> RXCtrl0",receiver_preFFT.out,rx_controller.inFromPreFFT);
  65.    mkConnectionPrint("RXCtrl0 -> PreDesc",rx_controller.outToPreDescrambler,receiver_preDescrambler.in);
  66.    mkConnectionPrint("PreDesc -> RXCtrl1",receiver_preDescrambler.out,rx_controller.inFromPreDescrambler);
  67.    mkConnectionPrint("RXCtrl1 -> Desc",rx_controller.outToDescrambler,descrambler.in);
  68.    mkConnectionPrint("Desc -> RXCtrl2",descrambler.out,rx_controller.inFromDescrambler);
  69.    
  70.    // methods
  71.    interface inFeedback = rx_controller.inFeedback;
  72.    interface in = receiver_preFFT.in;
  73.    interface outLength = rx_controller.outLength;
  74.    interface outData = rx_controller.outData;
  75. endmodule
  76. (* synthesize *)
  77. module mkTransceiver(WiMAXTransceiver);
  78.    let wimaxTransmitter <- mkWiMAXTransmitter;
  79.    let wimaxReceiver    <- mkWiMAXReceiver;
  80.    
  81.    interface transmitter = wimaxTransmitter;
  82.    interface receiver    = wimaxReceiver;
  83.       
  84. endmodule