AdcDataInterface.v 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // company:
  4. // engineer:
  5. //
  6. // create date: 11:47:44 07/11/2019
  7. // design name:
  8. // module name: adc_data_interface
  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. //////////////////////////////////////////////////////////////////////////////////
  21. module AdcDataInterface
  22. #(
  23. parameter AdcDataWidth = 14,
  24. parameter ChNum = 4,
  25. parameter Ratio = 8
  26. )
  27. (
  28. input Clk_i,
  29. input RefClk_i,
  30. input Locked_i,
  31. input Rst_i,
  32. input [AdcDataWidth-1:0] testAdc,
  33. input Adc1FclkP_i,
  34. input Adc1FclkN_i,
  35. input Adc1DataDa0P_i,
  36. input Adc1DataDa0N_i,
  37. input Adc1DataDa1P_i,
  38. input Adc1DataDa1N_i,
  39. input Adc1DataDb0P_i,
  40. input Adc1DataDb0N_i,
  41. input Adc1DataDb1P_i,
  42. input Adc1DataDb1N_i,
  43. input Adc2FclkP_i,
  44. input Adc2FclkN_i,
  45. input Adc2DataDa0P_i,
  46. input Adc2DataDa0N_i,
  47. input Adc2DataDa1P_i,
  48. input Adc2DataDa1N_i,
  49. input Adc2DataDb0P_i,
  50. input Adc2DataDb0N_i,
  51. input Adc2DataDb1P_i,
  52. input Adc2DataDb1N_i,
  53. output [AdcDataWidth-1:0] Adc1ChT1Data_o,
  54. output [AdcDataWidth-1:0] Adc1ChR1Data_o,
  55. output [AdcDataWidth-1:0] Adc2ChR2Data_o,
  56. output [AdcDataWidth-1:0] Adc2ChT2Data_o
  57. );
  58. //================================================================================
  59. // reg/wire
  60. //================================================================================
  61. wire [ChNum-1:0] adc1P;
  62. wire [ChNum-1:0] adc1N;
  63. wire [ChNum-1:0] adc2P;
  64. wire [ChNum-1:0] adc2N;
  65. reg [AdcDataWidth*2-1:0] adc1DataSyncPipe [2:0];
  66. reg [AdcDataWidth*2-1:0] adc2DataSyncPipe [2:0];
  67. wire [(ChNum-2)*AdcDataWidth-1:0] adc1Dout;
  68. wire [(ChNum-2)*AdcDataWidth-1:0] adc2Dout;
  69. wire [AdcDataWidth-1:0] adc1ChAData;
  70. wire [AdcDataWidth-1:0] adc1ChBData;
  71. wire [AdcDataWidth-1:0] adc2ChAData;
  72. wire [AdcDataWidth-1:0] adc2ChBData;
  73. reg [AdcDataWidth-1:0] adc1ChT1DataSyncR;
  74. reg [AdcDataWidth-1:0] adc1ChR1DataSyncR;
  75. reg [AdcDataWidth-1:0] adc2ChT2DataSyncR;
  76. reg [AdcDataWidth-1:0] adc2ChR2DataSyncR;
  77. wire [AdcDataWidth-1:0] adc1ChT1DataSync;
  78. wire [AdcDataWidth-1:0] adc1ChR1DataSync;
  79. wire [AdcDataWidth-1:0] adc2ChT2DataSync;
  80. wire [AdcDataWidth-1:0] adc2ChR2DataSync;
  81. assign adc1P = {Adc1DataDb1P_i, Adc1DataDb0P_i, Adc1DataDa1P_i, Adc1DataDa0P_i};
  82. assign adc1N = {Adc1DataDb1N_i, Adc1DataDb0N_i, Adc1DataDa1N_i, Adc1DataDa0N_i};
  83. assign adc2P = {Adc2DataDb1P_i, Adc2DataDb0P_i, Adc2DataDa1P_i, Adc2DataDa0P_i};
  84. assign adc2N = {Adc2DataDb1N_i, Adc2DataDb0N_i, Adc2DataDa1N_i, Adc2DataDa0N_i};
  85. // assign Adc1ChT1Data_o = adc1DataSyncPipe[2][AdcDataWidth*2-1-:14];
  86. // assign Adc1ChR1Data_o = adc1DataSyncPipe[2][AdcDataWidth-1-:14];
  87. // assign Adc2ChR2Data_o = adc2DataSyncPipe[2][AdcDataWidth*2-1-:14];
  88. // assign Adc2ChT2Data_o = adc2DataSyncPipe[2][AdcDataWidth-1-:14];
  89. assign Adc1ChT1Data_o = adc1ChT1DataSync;
  90. assign Adc1ChR1Data_o = adc1ChR1DataSync;
  91. assign Adc2ChR2Data_o = adc2ChR2DataSync;
  92. assign Adc2ChT2Data_o = adc2ChT2DataSync;
  93. wire idly_reset_int;
  94. wire rx_reset;
  95. wire rx2_cmt_locked;
  96. wire Adc1RxClk;
  97. wire Adc2RxClk;
  98. //================================================================================
  99. // instantiations
  100. //================================================================================
  101. top5x2_7to1_sdr_rx Adc1Rx
  102. (
  103. .reset (Rst_i),
  104. .refclkin (RefClk_i),
  105. .Locked_i (Locked_i),
  106. .clkin1_p (Adc1FclkP_i),
  107. .clkin1_n (Adc1FclkN_i),
  108. .datain1_p (adc1P),
  109. .datain1_n (adc1N),
  110. .clkin2_p (),
  111. .clkin2_n (),
  112. .datain2_p (),
  113. .datain2_n (),
  114. .dummy (),
  115. .dout (adc1Dout),
  116. .DivClk_o (Adc1RxClk)
  117. );
  118. top5x2_7to1_sdr_rx Adc2Rx
  119. (
  120. .reset (Rst_i),
  121. .refclkin (RefClk_i),
  122. .Locked_i (Locked_i),
  123. .clkin1_p (Adc2FclkP_i),
  124. .clkin1_n (Adc2FclkN_i),
  125. .datain1_p (adc2P),
  126. .datain1_n (adc2N),
  127. .clkin2_p (),
  128. .clkin2_n (),
  129. .datain2_p (),
  130. .datain2_n (),
  131. .dummy (),
  132. .dout (adc2Dout),
  133. .DivClk_o (Adc2RxClk)
  134. );
  135. AdcSync Adc1Sync
  136. (
  137. .Clk_i (Clk_i),
  138. .Rst_i (Rst_i),
  139. .Data_i (adc1Dout),
  140. .Data_o ({adc1ChT1DataSync, adc1ChR1DataSync})
  141. );
  142. AdcSync Adc2Sync
  143. (
  144. .Clk_i (Clk_i),
  145. .Rst_i (Rst_i),
  146. .Data_i (adc2Dout),
  147. .Data_o ({adc2ChR2DataSync, adc2ChT2DataSync})
  148. );
  149. // AdcSyncFifo adc1SyncFifo (
  150. // .rst (Rst_i),
  151. // .wr_clk (Adc1RxClk),
  152. // .rd_clk (Clk_i),
  153. // .din (adc1Dout),
  154. // .din ({testAdc,testAdc}),
  155. // .wr_en (1'b1),
  156. // .rd_en (1'b1),
  157. // .dout ({adc1ChT1DataSync, adc1ChR1DataSync}),
  158. // .full (),
  159. // .empty ()
  160. // );
  161. // AdcSyncFifo adc2SyncFifo (
  162. // .rst (Rst_i),
  163. // .wr_clk (Adc2RxClk),
  164. // .rd_clk (Clk_i),
  165. // .din (adc2Dout),
  166. // .wr_en (1'b1),
  167. // .rd_en (1'b1),
  168. // .dout ({adc2ChR2DataSync, adc2ChT2DataSync}),
  169. // .full (),
  170. // .empty ()
  171. // );
  172. endmodule