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

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 DataTypes::*;
  27. import FPComplex::*;
  28. import GetPut::*;
  29. import Vector::*;
  30. // Generic OFDM Module Interface
  31. interface Block#(type in_t, type out_t);
  32.     interface Put#(in_t) in;
  33.     interface Get#(out_t) out;
  34. endinterface
  35. // Transmitter Modules
  36. // Scrmabler
  37. typedef Block#(ScramblerMesg#(i_ctrl_t,i_n),
  38.        EncoderMesg#(o_ctrl_t,o_n))
  39.         Scrambler#(type i_ctrl_t,
  40.    type o_ctrl_t,
  41.    numeric type i_n,
  42.    numeric type o_n);
  43.    
  44. // FEC Encoder        
  45. typedef Block#(EncoderMesg#(ctrl_t,i_n),
  46.        EncoderMesg#(ctrl_t,o_n))
  47.         Encoder#(type ctrl_t,
  48.  numeric type i_n,
  49.  numeric type o_n);
  50. // Reed Solomon Encoder
  51. typedef Encoder#(ctrl_t,i_n,o_n)
  52.         ReedEncoder#(type ctrl_t,
  53.      numeric type i_n,
  54.      numeric type o_n);
  55.      
  56. // Convolutional Encoder      
  57. typedef Encoder#(ctrl_t,i_n,o_n)
  58. ConvEncoder#(type ctrl_t,
  59.      numeric type i_n,
  60.      numeric type o_n);
  61. // Puncturer      
  62. typedef Encoder#(ctrl_t,i_n,o_n)
  63.         Puncturer#(type ctrl_t,            // ctrl
  64.    numeric type i_n,       // input size
  65.    numeric type o_n,       // output size
  66.    numeric type i_buf_sz,  // input buffer size
  67.    numeric type o_buf_sz); // output buffer size
  68. // InterleaveBlock (common for Interleaver and Deinterleaver)
  69. typedef Block#(Mesg#(ctrl_t,Vector#(i_n,data_t)),
  70.        Mesg#(ctrl_t,Vector#(o_n,data_t)))
  71.         InterleaveBlock#(type ctrl_t,
  72.  numeric type i_n,
  73.  numeric type o_n,
  74.  type data_t,
  75.  numeric type minNcbps);
  76. // Interleaver
  77. typedef Block#(InterleaverMesg#(ctrl_t,i_n),
  78.        MapperMesg#(ctrl_t,o_n))
  79. Interleaver#(type ctrl_t,
  80.      numeric type i_n,
  81.      numeric type o_n,
  82.      numeric type minNcbps);
  83. // Mapper
  84. typedef Block#(MapperMesg#(ctrl_t,i_n),
  85.        PilotInsertMesg#(ctrl_t,n,i_prec,f_prec))
  86. Mapper#(type ctrl_t,
  87. numeric type i_n,
  88. numeric type n,
  89. numeric type i_prec,
  90. numeric type f_prec);
  91. // PilotInsert
  92. typedef Block#(PilotInsertMesg#(ctrl_t,i_n,i_prec,f_prec),
  93.        IFFTMesg#(ctrl_t,o_n,i_prec,f_prec)) 
  94. PilotInsert#(type ctrl_t,          // ctrl
  95.      numeric type i_n,     // fft sz - guards/pilots
  96.      numeric type o_n,     // fft sz
  97.      numeric type i_prec,  // integer precision
  98.      numeric type f_prec); // fractional precision
  99. // IFFT
  100. typedef Block#(IFFTMesg#(ctrl_t,n,i_prec,f_prec),
  101.        CPInsertMesg#(ctrl_t,n,i_prec,f_prec))
  102. IFFT#(type ctrl_t,
  103.       numeric type n,
  104.       numeric type i_prec,
  105.       numeric type f_prec);
  106. // CPInsert
  107. typedef Block#(CPInsertMesg#(ctrl_t,n,i_prec,f_prec),
  108.        DACMesg#(i_prec,f_prec))
  109.         CPInsert#(type ctrl_t,          // ctrl
  110.   numeric type n,       // fft sz
  111.   numeric type i_prec,  // integer precision
  112.   numeric type f_prec); // fractional precision
  113. // Transmitter
  114. typedef Block#(ScramblerMesg#(ctrl_t,n),
  115.        DACMesg#(i_prec,f_prec))
  116. Transmitter#(type ctrl_t,
  117.      numeric type n,
  118.      numeric type i_prec,
  119.      numeric type f_prec);
  120. // Receiver Modules
  121. // Synchronizer
  122. typedef Block#(SynchronizerMesg#(i_prec,f_prec),
  123.        UnserializerMesg#(i_prec,f_prec))
  124. Synchronizer#(numeric type i_prec,
  125.       numeric type f_prec);
  126. // Unserializer
  127. typedef Block#(UnserializerMesg#(i_prec,f_prec),
  128.        SPMesgFromSync#(n,i_prec,f_prec))
  129. Unserializer#(numeric type n,
  130.       numeric type i_prec,
  131.       numeric type f_prec);
  132. // ReceiverPreFFT
  133. typedef Block#(SynchronizerMesg#(i_prec,f_prec),
  134.        SPMesgFromSync#(n,i_prec,f_prec))
  135. ReceiverPreFFT#(numeric type n,
  136. numeric type i_prec,
  137. numeric type f_prec);
  138. // FFT              
  139. typedef Block#(FFTMesg#(ctrl_t,n,i_prec,f_prec),
  140.        ChannelEstimatorMesg#(ctrl_t,n,i_prec,f_prec))
  141. FFT#(type ctrl_t,
  142.      numeric type n,
  143.      numeric type i_prec,
  144.      numeric type f_prec);
  145. // Channel Estimator
  146. typedef Block#(ChannelEstimatorMesg#(ctrl_t,i_n,i_prec,f_prec),
  147.        DemapperMesg#(ctrl_t,o_n,i_prec,f_prec))
  148. ChannelEstimator#(type ctrl_t,
  149.   numeric type i_n,
  150.   numeric type o_n,
  151.   numeric type i_prec,
  152.   numeric type f_prec);
  153. // Demapper
  154. typedef Block#(DemapperMesg#(ctrl_t,i_n,i_prec,f_prec),
  155.        DeinterleaverMesg#(ctrl_t,o_n, decode_t))
  156. Demapper#(type ctrl_t,
  157.   numeric type i_n,
  158.   numeric type o_n,
  159.   numeric type i_prec,
  160.   numeric type f_prec,
  161.   type decode_t);
  162. // Deinterleaver
  163. typedef Block#(DeinterleaverMesg#(ctrl_t,i_n,decode_t),
  164.        DecoderMesg#(ctrl_t,o_n,decode_t))
  165. Deinterleaver#(type ctrl_t,
  166.        numeric type i_n,
  167.        numeric type o_n,
  168.        type decode_t,
  169.        numeric type minNcbps);
  170. // Decoder
  171. typedef Block#(DecoderMesg#(ctrl_t,i_n,i_decode_t),
  172.        DecoderMesg#(ctrl_t,o_n,o_decode_t))
  173. Decoder#(type ctrl_t,
  174.  numeric type i_n,
  175.  type i_decode_t,
  176.  numeric type o_n,
  177.  type o_decode_t);
  178.  
  179. // Depuncturer
  180. typedef Decoder#(ctrl_t,i_n,ViterbiMetric,o_n,ViterbiMetric)
  181. Depuncturer#(type ctrl_t,
  182.      numeric type i_n,
  183.      numeric type o_n,
  184.      numeric type i_buf_sz,
  185.      numeric type o_buf_sz);
  186. // Viterbi
  187. typedef Decoder#(ctrl_t,i_n,ViterbiMetric,o_n,Bit#(1))
  188. Viterbi#(type ctrl_t,
  189.  numeric type i_n,
  190.  numeric type o_n);
  191. // Reed Solomon Decoder
  192. typedef Decoder#(ctrl_t,i_n,Bit#(1),o_n,Bit#(1))
  193. ReedDecoder#(type ctrl_t,
  194.      numeric type i_n,
  195.      numeric type o_n);
  196. // ReceiverPreDescrambler
  197. typedef Block#(FFTMesg#(ctrl_t,i_n,i_prec,f_prec),
  198.        DecoderMesg#(ctrl_t,o_n,o_t))
  199. ReceiverPreDescrambler#(type ctrl_t,
  200. numeric type i_n,
  201. numeric type i_prec,
  202. numeric type f_prec,
  203. numeric type o_n,
  204. type o_t);
  205. // Descrambler
  206. typedef Scrambler#(ctrl_t,ctrl_t,i_n,o_n)
  207.         Descrambler#(type ctrl_t,
  208.      numeric type i_n,
  209.      numeric type o_n);
  210.    
  211.