[FPGA] LIFI光通信——定位系统

[复制链接]
 楼主| feihufuture 发表于 2020-8-26 14:01 | 显示全部楼层 |阅读模式





  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer:
  5. //
  6. // Create Date:    15:33:18 09/28/2010
  7. // Design Name:
  8. // Module Name:    dac_inf
  9. // Project Name:
  10. // Target Devices:
  11. // Tool versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //////////////////////////////////////////////////////////////////////////////////
  20. module rx_link_lifi(
  21.                 input              sys_clk      ,
  22.                 input              rst          ,
  23.                                                       
  24.                 output             O_adc_clk_p  ,
  25.                 output             O_adc_clk_n  ,
  26.                                    
  27.                 input              I_adc_clk    ,
  28.                 input      [13:0]  I_adc_data   ,
  29.                        
  30.                 output     [7:0]   O_adc_data   ,
  31.                 output             O_adc_en     ,
  32.                 output             O_crc_err    ,
  33.                 output     [31:0]  O_crc_err_num,
  34.                 output     [31:0]  O_ethc_num   ,
  35.                
  36.                 input      [13:0]  I_reg_high_gate,
  37.                 //-------------------------------------
  38.                 input      [7:0]   I_hdm960_gc    ,
  39.                 output     [15:0]  O_power_out    ,
  40.                 output     [7:0]   O_hdm960_gc   
  41.    
  42.               
  43.                                                 
  44.        );
  45.                     
  46.                        

  47. //--------------------------------------------------------------

  48.   wire  [13:0] inf_adc_data     ;
  49.   wire         inf_adc_en       ;
  50.   
  51.   wire  [7:0]  hd_gmii_data     ;
  52.   wire         hd_gmii_dv       ;
  53.   wire         hd_gmii_sop      ;
  54.   wire         hd_gmii_eop      ;
  55.   
  56.   wire  [13:0] adc_add_data     ;
  57.   wire  [13:0] power_gate_calu  ;
  58.   wire  [13:0] eq_adc_data      ;
  59.   wire         capture_en_rising;
  60.   wire         s_crc_check_ok   ;
  61.   
  62.   reg  [7:0]   value_in_d1  ;
  63. reg  [7:0]   value_in_d2  ;
  64. reg  [7:0]   value_in_d3  ;
  65. reg  [7:0]   value_in_d4  ;
  66. reg  [7:0]   value_in_d5  ;
  67. reg  [7:0]   value_in_d6  ;
  68. reg  [7:0]   value_in_d7  ;
  69. reg  [7:0]   value_in_d8  ;
  70. reg  [7:0]   value_in_d9  ;
  71. reg  [7:0]   value_in_d10 ;
  72. reg  [7:0]   value_in_d11 ;
  73. reg  [7:0]   value_in_d12 ;
  74. reg  [7:0]   value_in_d13 ;
  75. reg  [7:0]   value_in_d14 ;
  76. reg  [7:0]   value_in_d15 ;
  77. reg  [7:0]   value_in_d16 ;
  78. reg  [7:0]   value_in_d17 ;
  79. reg  [7:0]   value_in_d18 ;
  80. reg  [7:0]   value_in_d19 ;
  81. reg  [7:0]   value_in_d20 ;
  82. reg  [7:0]   value_in_d21 ;
  83. reg  [7:0]   value_in_d22 ;
  84. reg  [7:0]   value_in_d23 ;
  85. reg  [7:0]   value_in_d24 ;
  86. reg  [7:0]   value_in_d25 ;
  87. reg  [7:0]   value_in_d26 ;
  88. reg  [7:0]   value_in_d27 ;
  89. reg  [7:0]   value_in_d28 ;
  90. reg  [7:0]   value_in_d29 ;
  91. reg  [7:0]   value_in_d30 ;
  92. reg  [7:0]   value_in_d31 ;
  93. reg  [7:0]   value_in_d32 ;
  94. reg  [7:0]   value_in_d33 ;
  95. reg  [7:0]   value_in_d34 ;
  96. reg  [7:0]   value_in_d35 ;

  97. reg          value_in_en_d1  ;
  98. reg          value_in_en_d2  ;
  99. reg          value_in_en_d3  ;
  100. reg          value_in_en_d4  ;
  101. reg          value_in_en_d5  ;
  102. reg          value_in_en_d6  ;
  103. reg          value_in_en_d7  ;
  104. reg          value_in_en_d8  ;
  105. reg          value_in_en_d9  ;
  106. reg          value_in_en_d10 ;
  107. reg          value_in_en_d11 ;
  108. reg          value_in_en_d12 ;
  109. reg          value_in_en_d13 ;
  110. reg          value_in_en_d14 ;
  111. reg          value_in_en_d15 ;
  112. reg          value_in_en_d16 ;
  113. reg          value_in_en_d17 ;
  114. reg          value_in_en_d18 ;
  115. reg          value_in_en_d19 ;
  116. reg          value_in_en_d20 ;
  117. reg          value_in_en_d21 ;
  118. reg          value_in_en_d22 ;
  119. reg          value_in_en_d23 ;
  120. reg          value_in_en_d24 ;
  121. reg          value_in_en_d25 ;
  122. reg          value_in_en_d26 ;
  123. reg          value_in_en_d27 ;
  124. reg          value_in_en_d28 ;
  125. reg          value_in_en_d29 ;
  126. reg          value_in_en_d30 ;
  127. reg          value_in_en_d31 ;
  128. reg          value_in_en_d32 ;
  129. reg          value_in_en_d33 ;
  130. reg          value_in_en_d34 ;
  131. reg          value_in_en_d35 ;

  132. reg          value_in_sop_d1  ;
  133. reg          value_in_sop_d2  ;
  134. reg          value_in_sop_d3  ;
  135. reg          value_in_sop_d4  ;
  136. reg          value_in_sop_d5  ;
  137. reg          value_in_sop_d6  ;
  138. reg          value_in_sop_d7  ;
  139. reg          value_in_sop_d8  ;
  140. reg          value_in_sop_d9  ;
  141. reg          value_in_sop_d10 ;
  142. reg          value_in_sop_d11 ;
  143. reg          value_in_sop_d12 ;
  144. reg          value_in_sop_d13 ;
  145. reg          value_in_sop_d14 ;
  146. reg          value_in_sop_d15 ;
  147. reg          value_in_sop_d16 ;
  148. reg          value_in_sop_d17 ;
  149. reg          value_in_sop_d18 ;
  150. reg          value_in_sop_d19 ;
  151. reg          value_in_sop_d20 ;
  152. reg          value_in_sop_d21 ;
  153. reg          value_in_sop_d22 ;
  154. reg          value_in_sop_d23 ;
  155. reg          value_in_sop_d24 ;
  156. reg          value_in_sop_d25 ;
  157. reg          value_in_sop_d26 ;
  158. reg          value_in_sop_d27 ;
  159. reg          value_in_sop_d28 ;
  160. reg          value_in_sop_d29 ;
  161. reg          value_in_sop_d30 ;
  162. reg          value_in_sop_d31 ;
  163. reg          value_in_sop_d32 ;
  164. reg          value_in_sop_d33 ;
  165. reg          value_in_sop_d34 ;
  166. reg          value_in_sop_d35 ;

  167. reg          value_in_eop_d1  ;
  168. reg          value_in_eop_d2  ;
  169. reg          value_in_eop_d3  ;
  170. reg          value_in_eop_d4  ;
  171. reg          value_in_eop_d5  ;
  172. reg          value_in_eop_d6  ;
  173. reg          value_in_eop_d7  ;
  174. reg          value_in_eop_d8  ;
  175. reg          value_in_eop_d9  ;
  176. reg          value_in_eop_d10 ;
  177. reg          value_in_eop_d11 ;
  178. reg          value_in_eop_d12 ;
  179. reg          value_in_eop_d13 ;
  180. reg          value_in_eop_d14 ;
  181. reg          value_in_eop_d15 ;
  182. reg          value_in_eop_d16 ;
  183. reg          value_in_eop_d17 ;
  184. reg          value_in_eop_d18 ;
  185. reg          value_in_eop_d19 ;
  186. reg          value_in_eop_d20 ;
  187. reg          value_in_eop_d21 ;
  188. reg          value_in_eop_d22 ;
  189. reg          value_in_eop_d23 ;
  190. reg          value_in_eop_d24 ;
  191. reg          value_in_eop_d25 ;
  192. reg          value_in_eop_d26 ;
  193. reg          value_in_eop_d27 ;
  194. reg          value_in_eop_d28 ;
  195. reg          value_in_eop_d29 ;
  196. reg          value_in_eop_d30 ;
  197. reg          value_in_eop_d31 ;
  198. reg          value_in_eop_d32 ;
  199. reg          value_in_eop_d33 ;
  200. reg          value_in_eop_d34 ;
  201. reg          value_in_eop_d35 ;

  202.                               
  203. //---------------------------------------------------------------
  204. adc_inf i_adc_inf(
  205.                .sys_clk    (sys_clk      )  ,
  206.                .rst        (rst          )  ,
  207.                                          
  208.                .O_adc_clk_p(O_adc_clk_p  )  ,
  209.                .O_adc_clk_n(O_adc_clk_n  )  ,
  210.                                          
  211.                .I_adc_clk  (I_adc_clk    )  ,
  212.                .I_adc_data (I_adc_data   )  ,
  213.                
  214.                .O_adc_data (inf_adc_data )  ,
  215.                .O_adc_en   (inf_adc_en   )                                                  
  216.        );
  217.       
  218. // add_cons_8191 i_add_cons_8191(
  219. //               .clk(sys_clk     ),
  220. //               .a  ({inf_adc_data[13],inf_adc_data[13],inf_adc_data}),
  221. //               .b  (16'd8191    ),
  222. //               .s  (adc_add_data)
  223. //);      

  224. assign adc_add_data = 14'd16383 - {~inf_adc_data[13],inf_adc_data[12:0]}; //有符号转无符号              
  225.       
  226. rx_packet_extract i_rx_packet_extract(
  227.                 .sys_clk         (sys_clk        ),
  228.                 .rst             (rst            ),
  229.                 .I_adc_data      (eq_adc_data    ),
  230.                 .I_adc_en        (inf_adc_en     ),
  231.                 .O_adc_data      (hd_gmii_data   ),
  232.                 .O_adc_data_en   (hd_gmii_dv     ),
  233.                 .O_data_sop      (hd_gmii_sop    ),
  234.                 .O_data_eop      (hd_gmii_eop    ),               
  235.                 //-----cpu config--------------------------------
  236.                 .I_reg_high_gate (power_gate_calu),
  237.                 //----------------------------------------
  238.                 .O_capture_en_rising (capture_en_rising),
  239.                 //-----power calu--------------------------------
  240.                 .O_power_out      (O_power_out      ),
  241.                 .I_hdm960_gc      (I_hdm960_gc      ),
  242.                 .O_hdm960_gc      (O_hdm960_gc      ),
  243.                 .I_crc_check_ok   (s_crc_check_ok   )

  244.                                                 
  245.        );
  246.       
  247.       
  248. power_gate_calu i_power_gate_calu(
  249.                 .sys_clk         (sys_clk        ),
  250.                 .rst             (rst            ),
  251.                                  
  252.                 .I_data_in       (eq_adc_data    ),      
  253.                 .O_power_gate_out(power_gate_calu)
  254.                   
  255.                                           
  256.        );        
  257.       
  258. eq_pro  i_eq_pro(
  259.                   .sys_clk   (sys_clk     ) ,
  260.                   .rst       (rst         ) ,
  261.                            
  262.                   .I_data_in (adc_add_data) ,      
  263.                   .O_data_out(eq_adc_data )                                             
  264.                  );   
  265.               
  266.                   
  267. ge_crc_check  i_ge_crc_check(  
  268.                          .clk           (sys_clk         ) ,
  269.                          .rst           (rst             ) ,                                                  
  270.                          .I_gmii_dv     (value_in_en_d27 ),//(hd_gmii_dv    ) ,
  271.                          .I_gmii_data   (value_in_d27    ),//(hd_gmii_data  ) ,
  272.                          .I_gmii_sop    (value_in_sop_d27),//(hd_gmii_sop   ) ,
  273.                          .I_gmii_eop    (value_in_eop_d27),//(hd_gmii_eop   ) ,                     
  274.                          .O_gmii_data   (O_adc_data      ) ,
  275.                          .O_gmii_valid  (O_adc_en        ) ,                     
  276.                          .O_crc_err     (O_crc_err       ) ,
  277.                          .O_crc_err_num (O_crc_err_num   ) ,
  278.                          .O_ethc_num    (O_ethc_num      ) ,
  279.                          .O_crc_check_ok(s_crc_check_ok  )                     
  280.                      );
  281.                      
  282.                      
  283. //-----delay--------------------------------------------------------------------
  284. always @(posedge sys_clk)
  285. begin
  286.   value_in_d1  <= hd_gmii_data;
  287.   value_in_d2  <= value_in_d1 ;
  288.   value_in_d3  <= value_in_d2 ;
  289.   value_in_d4  <= value_in_d3 ;
  290.   value_in_d5  <= value_in_d4 ;
  291.   value_in_d6  <= value_in_d5 ;
  292.   value_in_d7  <= value_in_d6 ;
  293.   value_in_d8  <= value_in_d7 ;
  294.   value_in_d9  <= value_in_d8 ;
  295.   value_in_d10 <= value_in_d9 ;
  296.   value_in_d11 <= value_in_d10;
  297.   value_in_d12 <= value_in_d11;
  298.   value_in_d13 <= value_in_d12;
  299.   value_in_d14 <= value_in_d13;
  300.   value_in_d15 <= value_in_d14;
  301.   value_in_d16 <= value_in_d15;
  302.   value_in_d17 <= value_in_d16;
  303.   value_in_d18 <= value_in_d17;
  304.   value_in_d19 <= value_in_d18;
  305.   value_in_d20 <= value_in_d19;
  306.   value_in_d21 <= value_in_d20;
  307.   value_in_d22 <= value_in_d21;
  308.   value_in_d23 <= value_in_d22;
  309.   value_in_d24 <= value_in_d23;
  310.   value_in_d25 <= value_in_d24;
  311.   value_in_d26 <= value_in_d25;
  312.   value_in_d27 <= value_in_d26;
  313.   value_in_d28 <= value_in_d27;
  314.   value_in_d29 <= value_in_d28;
  315.   value_in_d30 <= value_in_d29;
  316.   value_in_d31 <= value_in_d30;
  317.   value_in_d32 <= value_in_d31;
  318.   value_in_d33 <= value_in_d32;
  319.   value_in_d34 <= value_in_d33;
  320.   value_in_d35 <= value_in_d34;
  321. end   

  322. always @(posedge sys_clk)
  323. begin
  324.   value_in_en_d1  <= hd_gmii_dv     ;
  325.   value_in_en_d2  <= value_in_en_d1 ;
  326.   value_in_en_d3  <= value_in_en_d2 ;
  327.   value_in_en_d4  <= value_in_en_d3 ;
  328.   value_in_en_d5  <= value_in_en_d4 ;
  329.   value_in_en_d6  <= value_in_en_d5 ;
  330.   value_in_en_d7  <= value_in_en_d6 ;
  331.   value_in_en_d8  <= value_in_en_d7 ;
  332.   value_in_en_d9  <= value_in_en_d8 ;
  333.   value_in_en_d10 <= value_in_en_d9 ;
  334.   value_in_en_d11 <= value_in_en_d10;
  335.   value_in_en_d12 <= value_in_en_d11;
  336.   value_in_en_d13 <= value_in_en_d12;
  337.   value_in_en_d14 <= value_in_en_d13;
  338.   value_in_en_d15 <= value_in_en_d14;
  339.   value_in_en_d16 <= value_in_en_d15;
  340.   value_in_en_d17 <= value_in_en_d16;
  341.   value_in_en_d18 <= value_in_en_d17;
  342.   value_in_en_d19 <= value_in_en_d18;
  343.   value_in_en_d20 <= value_in_en_d19;
  344.   value_in_en_d21 <= value_in_en_d20;
  345.   value_in_en_d22 <= value_in_en_d21;
  346.   value_in_en_d23 <= value_in_en_d22;
  347.   value_in_en_d24 <= value_in_en_d23;
  348.   value_in_en_d25 <= value_in_en_d24;
  349.   value_in_en_d26 <= value_in_en_d25;
  350.   value_in_en_d27 <= value_in_en_d26;
  351.   value_in_en_d28 <= value_in_en_d27;
  352.   value_in_en_d29 <= value_in_en_d28;
  353.   value_in_en_d30 <= value_in_en_d29;
  354.   value_in_en_d31 <= value_in_en_d30;
  355.   value_in_en_d32 <= value_in_en_d31;
  356.   value_in_en_d33 <= value_in_en_d32;
  357.   value_in_en_d34 <= value_in_en_d33;
  358.   value_in_en_d35 <= value_in_en_d34;
  359. end  

  360.                         
  361. always @(posedge sys_clk)
  362. begin
  363.   value_in_sop_d1  <= hd_gmii_sop     ;
  364.   value_in_sop_d2  <= value_in_sop_d1 ;
  365.   value_in_sop_d3  <= value_in_sop_d2 ;
  366.   value_in_sop_d4  <= value_in_sop_d3 ;
  367.   value_in_sop_d5  <= value_in_sop_d4 ;
  368.   value_in_sop_d6  <= value_in_sop_d5 ;
  369.   value_in_sop_d7  <= value_in_sop_d6 ;
  370.   value_in_sop_d8  <= value_in_sop_d7 ;
  371.   value_in_sop_d9  <= value_in_sop_d8 ;
  372.   value_in_sop_d10 <= value_in_sop_d9 ;
  373.   value_in_sop_d11 <= value_in_sop_d10;
  374.   value_in_sop_d12 <= value_in_sop_d11;
  375.   value_in_sop_d13 <= value_in_sop_d12;
  376.   value_in_sop_d14 <= value_in_sop_d13;
  377.   value_in_sop_d15 <= value_in_sop_d14;
  378.   value_in_sop_d16 <= value_in_sop_d15;
  379.   value_in_sop_d17 <= value_in_sop_d16;
  380.   value_in_sop_d18 <= value_in_sop_d17;
  381.   value_in_sop_d19 <= value_in_sop_d18;
  382.   value_in_sop_d20 <= value_in_sop_d19;
  383.   value_in_sop_d21 <= value_in_sop_d20;
  384.   value_in_sop_d22 <= value_in_sop_d21;
  385.   value_in_sop_d23 <= value_in_sop_d22;
  386.   value_in_sop_d24 <= value_in_sop_d23;
  387.   value_in_sop_d25 <= value_in_sop_d24;
  388.   value_in_sop_d26 <= value_in_sop_d25;
  389.   value_in_sop_d27 <= value_in_sop_d26;
  390.   value_in_sop_d28 <= value_in_sop_d27;
  391.   value_in_sop_d29 <= value_in_sop_d28;
  392.   value_in_sop_d30 <= value_in_sop_d29;
  393.   value_in_sop_d31 <= value_in_sop_d30;
  394.   value_in_sop_d32 <= value_in_sop_d31;
  395.   value_in_sop_d33 <= value_in_sop_d32;
  396.   value_in_sop_d34 <= value_in_sop_d33;
  397.   value_in_sop_d35 <= value_in_sop_d34;
  398. end  

  399. always @(posedge sys_clk)
  400. begin
  401.   value_in_eop_d1  <= hd_gmii_eop     ;
  402.   value_in_eop_d2  <= value_in_eop_d1 ;
  403.   value_in_eop_d3  <= value_in_eop_d2 ;
  404.   value_in_eop_d4  <= value_in_eop_d3 ;
  405.   value_in_eop_d5  <= value_in_eop_d4 ;
  406.   value_in_eop_d6  <= value_in_eop_d5 ;
  407.   value_in_eop_d7  <= value_in_eop_d6 ;
  408.   value_in_eop_d8  <= value_in_eop_d7 ;
  409.   value_in_eop_d9  <= value_in_eop_d8 ;
  410.   value_in_eop_d10 <= value_in_eop_d9 ;
  411.   value_in_eop_d11 <= value_in_eop_d10;
  412.   value_in_eop_d12 <= value_in_eop_d11;
  413.   value_in_eop_d13 <= value_in_eop_d12;
  414.   value_in_eop_d14 <= value_in_eop_d13;
  415.   value_in_eop_d15 <= value_in_eop_d14;
  416.   value_in_eop_d16 <= value_in_eop_d15;
  417.   value_in_eop_d17 <= value_in_eop_d16;
  418.   value_in_eop_d18 <= value_in_eop_d17;
  419.   value_in_eop_d19 <= value_in_eop_d18;
  420.   value_in_eop_d20 <= value_in_eop_d19;
  421.   value_in_eop_d21 <= value_in_eop_d20;
  422.   value_in_eop_d22 <= value_in_eop_d21;
  423.   value_in_eop_d23 <= value_in_eop_d22;
  424.   value_in_eop_d24 <= value_in_eop_d23;
  425.   value_in_eop_d25 <= value_in_eop_d24;
  426.   value_in_eop_d26 <= value_in_eop_d25;
  427.   value_in_eop_d27 <= value_in_eop_d26;
  428.   value_in_eop_d28 <= value_in_eop_d27;
  429.   value_in_eop_d29 <= value_in_eop_d28;
  430.   value_in_eop_d30 <= value_in_eop_d29;
  431.   value_in_eop_d31 <= value_in_eop_d30;
  432.   value_in_eop_d32 <= value_in_eop_d31;
  433.   value_in_eop_d33 <= value_in_eop_d32;
  434.   value_in_eop_d34 <= value_in_eop_d33;
  435.   value_in_eop_d35 <= value_in_eop_d34;
  436. end           
  437. endmodule


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
雷北城 发表于 2020-8-26 16:34 | 显示全部楼层
谢谢分享,学习了!
正点原子FPGA 发表于 2020-8-26 19:22 | 显示全部楼层
点赞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:WX:feihu612 免费合作开发ECAT主从站

171

主题

1029

帖子

101

粉丝
快速回复 在线客服 返回列表 返回顶部