AdcTb.v 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707
  1. `timescale 1ps/1ps
  2. module AdcTb;
  3. `include "tb.vh"
  4. parameter CLOCK_PERIOD_24 = 41666;
  5. parameter CLOCK_PERIOD_50 = 20000;
  6. parameter UUT_CLOCK_PERIOD = 10000; // 100 MHz
  7. parameter ADC_DATA_CLOCK = 1428;
  8. localparam TOP_BULK_PACKET_WIDTH = 16; // Packet width
  9. localparam TOP_FX3_DQ_W = 16; // FX3 bus width
  10. localparam TOP_FX3_CONTROL_BIT_SIZE = 2*8192; // FX3 control endpoint bit size
  11. localparam TOP_FX3_BULK_BIT_SIZE = 8192; // FX3 bulk endpoint bit size
  12. localparam TOP_FX3_WR_WATERMARK = 4; // FX3 write watermark value
  13. localparam TOP_FX3_RD_WATERMARK = 4; // FX3 read watermark value
  14. localparam [1:0] TOP_FX3_RD_ID0_ADDR = 2'b00; // FX3 bus address for bulk ep. transfer
  15. localparam [1:0] TOP_FX3_RD_ID1_ADDR = 2'b11; // FX3 bus address for control ep. transfer
  16. localparam TOP_CMD_NUM = 32; // Must be equal to power of 2
  17. localparam TOP_CONTROL_CMD_NUM = 32; // Must be equal to power of 2
  18. localparam TOP_CMD_ID_NORM = 224;
  19. localparam TOP_AUX_IN_TRIG_NUM = 1; // Number of aux. input triggers
  20. localparam TOP_AUX_OUT_TRIG_NUM = 1; // Number of aux. output triggers
  21. localparam TOP_MODULATOR_NUM = 3; // Number of modulators
  22. localparam TOP_PULSE_GEN_NUM = 3; // Number of pulse generators
  23. localparam [1:0] TOP_FX3_WR_ID0_ADDR = 2'b01; // FX3 bus address for bulk ep. transfer
  24. localparam [1:0] TOP_FX3_WR_ID1_ADDR = 2'b10; // FX3 bus address for control ep. transfe
  25. localparam [6:0] ADC_CLOCK_PATTERN = 7'b1111110;
  26. localparam TOP_DSP_CH_NUM = 8; // Number of input data channels
  27. localparam TOP_DSP_IDAT_W = 14; // Input data width
  28. localparam TOP_DSP_IQ_W = 14; // I and Q width
  29. localparam TOP_DSP_OMULT_W = 16; // sin window nultiplier output width
  30. localparam TOP_DSP_ODAT_W = 48; // Output data width
  31. localparam TOP_DSP_EN_DEBUG = "YES"; // YES or NO
  32. reg test_clk_24mhz;
  33. reg test_clk_50mhz;
  34. wire adc1_ctrl_sck_o;
  35. wire adc1_ctrl_sdata_o;
  36. wire adc1_ctrl_ss_o;
  37. wire adc1_ctrl_reset_o;
  38. wire adc2_ctrl_sck_o;
  39. wire adc2_ctrl_sdata_o;
  40. wire adc2_ctrl_ss_o;
  41. wire adc2_ctrl_reset_o;
  42. wire adc3_ctrl_sck_o;
  43. wire adc3_ctrl_sdata_o;
  44. wire adc3_ctrl_ss_o;
  45. wire adc3_ctrl_reset_o;
  46. wire adc4_ctrl_sck_o;
  47. wire adc4_ctrl_sdata_o;
  48. wire adc4_ctrl_ss_o;
  49. wire adc4_ctrl_reset_o;
  50. wire ref_clk_lmx_cs_o;
  51. wire ref_clk_lmk_cs_o;
  52. wire ref_clk_sck_o;
  53. wire ref_clk_sdata_o;
  54. wire ref_clk_lmx_lock_i;
  55. wire ref_clk_switch_o;
  56. wire [15:0] mcb5_dram_dq;
  57. wire [12:0] mcb5_dram_a;
  58. wire [2:0] mcb5_dram_ba;
  59. wire mcb5_dram_ras_n;
  60. wire mcb5_dram_cas_n;
  61. wire mcb5_dram_we_n;
  62. wire mcb5_dram_odt;
  63. wire mcb5_dram_reset_n;
  64. wire mcb5_dram_cke;
  65. wire mcb5_dram_dm;
  66. wire mcb5_dram_udqs;
  67. wire mcb5_dram_udqs_n;
  68. wire mcb5_rzq;
  69. wire mcb5_zio;
  70. wire mcb5_dram_udm;
  71. wire mcb5_dram_dqs;
  72. wire mcb5_dram_dqs_n;
  73. wire mcb5_dram_ck;
  74. wire mcb5_dram_ck_n;
  75. wire [15:0] mcb1_dram_dq;
  76. wire [12:0] mcb1_dram_a;
  77. wire [2:0] mcb1_dram_ba;
  78. wire mcb1_dram_ras_n;
  79. wire mcb1_dram_cas_n;
  80. wire mcb1_dram_we_n;
  81. wire mcb1_dram_odt;
  82. wire mcb1_dram_reset_n;
  83. wire mcb1_dram_cke;
  84. wire mcb1_dram_dm;
  85. wire mcb1_dram_udqs;
  86. wire mcb1_dram_udqs_n;
  87. wire mcb1_rzq;
  88. wire mcb1_zio;
  89. wire mcb1_dram_udm;
  90. wire mcb1_dram_dqs;
  91. wire mcb1_dram_dqs_n;
  92. wire mcb1_dram_ck;
  93. wire mcb1_dram_ck_n;
  94. // Cypress FX3
  95. wire fx3_pclk_o;
  96. wire fx3_slcs_o;
  97. wire fx3_slrd_o;
  98. wire fx3_slwr_o;
  99. wire fx3_sloe_o;
  100. wire fx3_pktend_o;
  101. wire fx3_flaga_i;
  102. wire fx3_flagb_i;
  103. wire [1:0] fx3_addr_o;
  104. wire [TOP_FX3_DQ_W-1:0] fx3_dq_io;
  105. wire lo_sdata1_o;
  106. wire lo_sdata2_o;
  107. wire lo_cs_o;
  108. wire lo_sck_o;
  109. wire rf1_sdata1_o;
  110. wire rf1_sdata2_o;
  111. wire rf1_cs_o;
  112. wire rf1_sck_o;
  113. wire rf2_sdata1_o;
  114. wire rf2_sdata2_o;
  115. wire rf2_cs_o;
  116. wire rf2_sck_o;
  117. reg [TOP_FX3_DQ_W-1:0] fx3_ram_rd0_data_i;
  118. reg fx3_ram_rd0_val_i;
  119. wire fx3_ram_rd0_rdy_o;
  120. reg fx3_ram_rd0_eop_i;
  121. reg [TOP_FX3_DQ_W-1:0] fx3_ram_rd1_data_i;
  122. reg fx3_ram_rd1_val_i;
  123. wire fx3_ram_rd1_rdy_o;
  124. reg fx3_ram_rd1_eop_i;
  125. wire [TOP_FX3_DQ_W-1:0] fx3_ram_wr0_data_o;
  126. wire fx3_ram_wr0_val_o;
  127. reg fx3_ram_wr0_rdy_i;
  128. wire [TOP_FX3_DQ_W-1:0] fx3_ram_wr1_data_o;
  129. wire fx3_ram_wr1_val_o;
  130. reg fx3_ram_wr1_rdy_i;
  131. wire ext_clk_24mhz_gbl = uut.ext_clk_24mhz_gbl;
  132. wire init_rst_signal = uut.init_rst_signal;
  133. wire lmx_lmk_filtered_rst = uut.lmx_lmk_filtered_rst;
  134. wire ddr3_mic_filtered_rst = uut.ddr3_mic_filtered_rst;
  135. wire adc_done = uut.adc_done;
  136. wire adc_rst = uut.adc_rst;
  137. wire adc_rst_done = uut.adc_rst_done;
  138. wire adc_filtered_rst = uut.adc_filtered_rst;
  139. wire adc_init_valid = uut.adc_init_valid;
  140. wire main_pll_100_mhz_locked = uut.main_pll_100_mhz_locked;
  141. wire main_pll_rst_signal = uut.main_pll_rst_signal;
  142. wire main_pll_100mhz = uut.main_pll_100mhz;
  143. wire main_pll_locked = uut.main_pll_locked;
  144. wire c1_calib_done = uut.c1_calib_done;
  145. wire c5_calib_done = uut.c5_calib_done;
  146. wire cmd_handler_ready = uut.cmd_handler_ready;
  147. /*
  148. wire [735:0] ddr3_mic_wrapper_data_i = uut.ddr3_mic_wrapper_data_i ;
  149. wire [22:0] ddr3_mic_wrapper_valid_i = uut.ddr3_mic_wrapper_valid_i;
  150. wire [22:0] ddr3_mic_wrapper_ready_o = uut.ddr3_mic_wrapper_ready_o;
  151. wire [31:0] ch1_i = ddr3_mic_wrapper_data_i[703:672];
  152. wire [31:0] ch1_q = ddr3_mic_wrapper_data_i[671:640];
  153. wire [31:0] ch2_i = ddr3_mic_wrapper_data_i[639:608];
  154. wire [31:0] ch2_q = ddr3_mic_wrapper_data_i[607:576];
  155. wire [TOP_FX3_DQ_W-1:0] out_stream_data_piped = uut.out_stream_data_piped;
  156. wire out_stream_valid_piped = uut.out_stream_valid_piped;
  157. wire out_stream_ready_piped = uut.out_stream_ready_piped;
  158. wire out_stream_last_piped = uut.out_stream_last_piped;
  159. wire out_stream_id_piped = uut.out_stream_id_piped;
  160. wire [3:0] sm_curr_state = uut.cmd_handler_inst.sm_curr_state;
  161. wire lo_init_done = uut.lo_init_done;
  162. wire lo_done = uut.lo_done;
  163. wire rf1_init_done = uut.rf1_init_done;
  164. wire rf1_done = uut.rf1_done;
  165. wire rf2_init_done = uut.rf2_init_done;
  166. wire rf2_done = uut.rf2_done;
  167. wire [15:0] rf1_data = uut.rf1_data;
  168. wire rf1_valid = uut.rf1_valid;
  169. wire [15:0] rf2_data = uut.rf2_data;
  170. wire rf2_valid = uut.rf2_valid;
  171. wire [7:0] cmd_ffe1_logic_channel_o = uut.cmd_ffe1_logic_channel_o;
  172. wire [7:0] cmd_ffe1_mode_o = uut.cmd_ffe1_mode_o;
  173. wire [31:0] cmd_ffe1_filter_band_o = uut.cmd_ffe1_filter_band_o;
  174. wire [31:0] cmd_ffe1_meas_num_o = uut.cmd_ffe1_meas_num_o;
  175. wire [31:0] cmd_ffe1_meas_delay_o = uut.cmd_ffe1_meas_delay_o;
  176. wire [31:0] cmd_ffe1_meas_period_o = uut.cmd_ffe1_meas_period_o;
  177. wire [7:0] cmd_ffe1_analog_filter_o = uut.cmd_ffe1_analog_filter_o;
  178. wire [7:0] cmd_ffe1_set_ftw_o = uut.cmd_ffe1_set_ftw_o;
  179. wire [31:0] cmd_ffe1_demod_ftw_o = uut.cmd_ffe1_demod_ftw_o;
  180. wire cmd_ffe1_new_flag_o = uut.cmd_ffe1_new_flag_o;
  181. wire [31:0] filter_meas_width_o = uut.filter_meas_width_o;
  182. wire [31:0] filter_phase_inc_o = uut.filter_phase_inc_o;
  183. wire [31:0] filter_norm_value_o = uut.filter_norm_value_o;
  184. wire filter_data_valid_o = uut.filter_data_valid_o;
  185. wire [TOP_DSP_CH_NUM*32-1:0] fp_dsp_data_i_o = uut.fp_dsp_data_i_o;
  186. wire [TOP_DSP_CH_NUM*32-1:0] fp_dsp_data_q_o = uut.fp_dsp_data_q_o;
  187. wire [TOP_DSP_CH_NUM-1:0] fp_dsp_valid_i_o = uut.fp_dsp_valid_i_o;
  188. wire [TOP_DSP_CH_NUM-1:0] fp_dsp_valid_q_o = uut.fp_dsp_valid_q_o;
  189. /*
  190. wire [15:0] cmd_fff7_rf_data_o = uut.cmd_fff7_rf_data_o;
  191. wire cmd_fff7_rf_valid_o = uut.cmd_fff7_rf_valid_o;
  192. wire cmd_fff7_new_flag_o = uut.cmd_fff7_new_flag_o;
  193. wire [15:0] cmd_fff8_rf_data_o = uut.cmd_fff8_rf_data_o;
  194. wire cmd_fff8_rf_valid_o = uut.cmd_fff8_rf_valid_o;
  195. wire cmd_fff8_new_flag_o = uut.cmd_fff8_new_flag_o;
  196. wire [31:0] cmd_fffc_delay_code_o = uut.cmd_fffc_delay_code_o;
  197. wire [7:0] cmd_fffc_port_o = uut.cmd_fffc_port_o;
  198. wire [7:0] cmd_fffc_rf_load_mask_o = uut.cmd_fffc_rf_load_mask_o;
  199. wire [31:0] cmd_fffc_port_switch_delay_o = uut.cmd_fffc_port_switch_delay_o;
  200. wire cmd_fffc_new_flag_o = uut.cmd_fffc_new_flag_o;
  201. wire cmd_fffc_port_switch_flag_o = uut.cmd_fffc_port_switch_flag_o;
  202. wire [3:0] cmd_fffc_curr_port_o = uut.cmd_fffc_curr_port_o;
  203. wire [31:0] cmd_fffc_curr_delay_o = uut.cmd_fffc_curr_delay_o;
  204. wire [15:0] cmd_meas_lo_data_o = uut.cmd_meas_lo_data_o;
  205. wire cmd_meas_lo_valid_o = uut.cmd_meas_lo_valid_o;
  206. wire [15:0] cmd_meas_rf_data_o = uut.cmd_meas_rf_data_o;
  207. wire cmd_meas_rf_valid_o = uut.cmd_meas_rf_valid_o;
  208. wire cmd_meas_new_flag_o = uut.cmd_meas_new_flag_o;
  209. wire [TOP_FX3_DQ_W-1:0] cmd_demuxed_meas_data = uut.cmd_demuxed_meas_data ;
  210. wire cmd_demuxed_meas_valid = uut.cmd_demuxed_meas_valid;
  211. wire cmd_demuxed_meas_last = uut.cmd_demuxed_meas_last ;
  212. wire [TOP_FX3_DQ_W-1:0] cmd_handler_m_data_o = uut.cmd_handler_m_data_o;
  213. wire cmd_handler_m_valid_o = uut.cmd_handler_m_valid_o;
  214. wire cmd_handler_m_ready_i = uut.cmd_handler_m_ready_i;
  215. wire cmd_handler_m_last_o = uut.cmd_handler_m_last_o;
  216. wire [7:0] cmd_handler_m_id_o = uut.cmd_handler_m_id_o;
  217. wire cmd_handler_block_req_o = uut.cmd_handler_block_req_o;
  218. wire [2:0] cmd_handler_block_mask_o = uut.cmd_handler_block_mask_o;
  219. wire cmd_handler_block_ack_i = uut.cmd_handler_block_ack_i;
  220. wire cmd_handler_meas_req_o = uut.cmd_handler_meas_req_o;
  221. wire cmd_handler_meas_ack_i = uut.cmd_handler_meas_ack_i;
  222. wire cmd_handler_ans_req_o = uut.cmd_handler_ans_req_o;
  223. wire cmd_handler_ans_ack_i = uut.cmd_handler_ans_ack_i;
  224. wire [31:0] cmd_handler_cmd_head_o = uut.cmd_handler_cmd_head_o;
  225. wire [15:0] cmd_handler_cmd_data_o = uut.cmd_handler_cmd_data_o;
  226. wire cmd_handler_perm_before_meas_i = uut.cmd_handler_perm_before_meas_i;
  227. wire cmd_handler_perm_after_meas_i = uut.cmd_handler_perm_after_meas_i;
  228. wire cmd_handler_perm_after_sweep_i = uut.cmd_handler_perm_after_sweep_i;
  229. wire cmd_handler_event_meas_req_o = uut.cmd_handler_event_meas_req_o;
  230. wire cmd_handler_event_before_meas_o = uut.cmd_handler_event_before_meas_o;
  231. wire cmd_handler_event_after_meas_o = uut.cmd_handler_event_after_meas_o;
  232. wire cmd_handler_event_sweep_end_o = uut.cmd_handler_event_sweep_end_o;
  233. */
  234. /*
  235. always @(negedge fx3_pclk_o) begin
  236. if (cmd_ffe1_new_flag_o) begin
  237. $display("cmd_ffe1_logic_channel_o = %h", cmd_ffe1_logic_channel_o);
  238. $display("cmd_ffe1_mode_o = %h", cmd_ffe1_mode_o);
  239. $display("cmd_ffe1_filter_band_o = %h", cmd_ffe1_filter_band_o);
  240. $display("cmd_ffe1_meas_num_o = %h", cmd_ffe1_meas_num_o);
  241. $display("cmd_ffe1_meas_delay_o = %h", cmd_ffe1_meas_delay_o);
  242. $display("cmd_ffe1_meas_period_o = %h", cmd_ffe1_meas_period_o);
  243. $display("cmd_ffe1_analog_filter_o = %h", cmd_ffe1_analog_filter_o);
  244. $display("cmd_ffe1_set_ftw_o = %h", cmd_ffe1_set_ftw_o);
  245. $display("cmd_ffe1_demod_ftw_o = %h", cmd_ffe1_demod_ftw_o);
  246. end
  247. end
  248. always @(negedge fx3_pclk_o) begin
  249. if (cmd_fffc_new_flag_o) begin
  250. $display("cmd_fffc_delay_code_o = %h", cmd_fffc_delay_code_o);
  251. $display("cmd_fffc_port_o = %h", cmd_fffc_port_o);
  252. $display("cmd_fffc_rf_load_mask_o = %h", cmd_fffc_rf_load_mask_o);
  253. $display("cmd_fffc_port_switch_delay_o = %h", cmd_fffc_port_switch_delay_o);
  254. $display("cmd_fffc_port_switch_flag_o = %h", cmd_fffc_port_switch_flag_o);
  255. $display("cmd_fffc_curr_port_o = %h", cmd_fffc_curr_port_o);
  256. $display("cmd_fffc_curr_delay_o = %h", cmd_fffc_curr_delay_o);
  257. end
  258. end
  259. always @(negedge fx3_pclk_o) begin
  260. if (cmd_fff7_rf_valid_o) begin
  261. $display("FFF7 data = %h", cmd_fff7_rf_data_o);
  262. end
  263. end
  264. always @(negedge fx3_pclk_o) begin
  265. if (cmd_fff8_rf_valid_o) begin
  266. $display("FFF8 data = %h", cmd_fff8_rf_data_o);
  267. end
  268. end
  269. always @(negedge fx3_pclk_o) begin
  270. if (cmd_meas_lo_valid_o) begin
  271. $display("MEAS LO DATA = %h", cmd_meas_lo_data_o);
  272. end
  273. if (cmd_meas_rf_valid_o) begin
  274. $display("MEAS RF DATA = %h", cmd_meas_rf_data_o);
  275. end
  276. end
  277. */
  278. integer fid0_in;
  279. integer fid1_in;
  280. integer len;
  281. integer i;
  282. assign ref_clk_lmx_lock_i = 1'b0;
  283. task automatic read_data;
  284. input integer fid;
  285. output reg [15:0] data;
  286. output integer len;
  287. begin
  288. len = $fread(data, fid);
  289. end
  290. endtask
  291. c3420_main uut(
  292. .ext_clk_24mhz_i (test_clk_24mhz),
  293. .adc1_ctrl_sck_o (adc1_ctrl_sck_o),
  294. .adc1_ctrl_sdata_o (adc1_ctrl_sdata_o),
  295. .adc1_ctrl_ss_o (adc1_ctrl_ss_o),
  296. /*
  297. .adc1_ctrl_gain_a_o (),
  298. .adc1_ctrl_gain_b_o (),
  299. .adc1_ctrl_filter_o (),
  300. .adc1_ctrl_dither_o (),
  301. */
  302. .adc1_ctrl_reset_o (adc1_ctrl_reset_o),
  303. .adc1_fclk_i_p (test_clk_50mhz),
  304. .adc1_fclk_i_n (~test_clk_50mhz),
  305. .adc1_ch_a0_i_p (),
  306. .adc1_ch_a0_i_n (),
  307. .adc1_ch_a1_i_p (),
  308. .adc1_ch_a1_i_n (),
  309. .adc1_ch_b0_i_p (),
  310. .adc1_ch_b0_i_n (),
  311. .adc1_ch_b1_i_p (),
  312. .adc1_ch_b1_i_n (),
  313. .adc2_ctrl_sck_o (adc2_ctrl_sck_o),
  314. .adc2_ctrl_sdata_o (adc2_ctrl_sdata_o),
  315. .adc2_ctrl_ss_o (adc2_ctrl_ss_o),
  316. /*
  317. .adc2_ctrl_gain_a_o (),
  318. .adc2_ctrl_gain_b_o (),
  319. .adc2_ctrl_filter_o (),
  320. .adc2_ctrl_dither_o (),
  321. */
  322. .adc2_ctrl_reset_o (adc2_ctrl_reset_o),
  323. /*
  324. .adc2_ch_a0_i_p (),
  325. .adc2_ch_a0_i_n (),
  326. .adc2_ch_a1_i_p (),
  327. .adc2_ch_a1_i_n (),
  328. .adc2_ch_b0_i_p (),
  329. .adc2_ch_b0_i_n (),
  330. .adc2_ch_b1_i_p (),
  331. .adc2_ch_b1_i_n (),
  332. */
  333. .adc3_ctrl_sck_o (adc3_ctrl_sck_o),
  334. .adc3_ctrl_sdata_o (adc3_ctrl_sdata_o),
  335. .adc3_ctrl_ss_o (adc3_ctrl_ss_o),
  336. /*
  337. .adc3_ctrl_gain_a_o (),
  338. .adc3_ctrl_gain_b_o (),
  339. .adc3_ctrl_filter_o (),
  340. .adc3_ctrl_dither_o (),
  341. */
  342. .adc3_ctrl_reset_o (adc3_ctrl_reset_o),
  343. .adc3_fclk_i_p (test_clk_50mhz),
  344. .adc3_fclk_i_n (~test_clk_50mhz),
  345. .adc3_ch_a0_i_p (1'b1),
  346. .adc3_ch_a0_i_n (1'b0),
  347. .adc3_ch_a1_i_p (1'b0),
  348. .adc3_ch_a1_i_n (1'b1),
  349. .adc3_ch_b0_i_p (1'b1),
  350. .adc3_ch_b0_i_n (1'b0),
  351. .adc3_ch_b1_i_p (1'b1),
  352. .adc3_ch_b1_i_n (1'b0),
  353. .adc4_ctrl_sck_o (adc4_ctrl_sck_o),
  354. .adc4_ctrl_sdata_o (adc4_ctrl_sdata_o),
  355. .adc4_ctrl_ss_o (adc4_ctrl_ss_o),
  356. /*
  357. .adc4_ctrl_gain_a_o (),
  358. .adc4_ctrl_gain_b_o (),
  359. .adc4_ctrl_filter_o (),
  360. .adc4_ctrl_dither_o (),
  361. */
  362. .adc4_ctrl_reset_o (adc4_ctrl_reset_o),
  363. /*
  364. .adc4_fclk_i_p (),
  365. .adc4_fclk_i_n (),
  366. .adc4_ch_a0_i_p (),
  367. .adc4_ch_a0_i_n (),
  368. .adc4_ch_a1_i_p (),
  369. .adc4_ch_a1_i_n (),
  370. .adc4_ch_b0_i_p (),
  371. .adc4_ch_b0_i_n (),
  372. .adc4_ch_b1_i_p (),
  373. .adc4_ch_b1_i_n (),
  374. */
  375. .pg_pulse0_o (),
  376. .pg_pulse1_o (),
  377. .pg_pulse2_o (),
  378. .pg_pulse3_o (),
  379. .mod_pulse0_o (),
  380. .mod_pulse1_o (),
  381. .ref_clk_lmx_cs_o (ref_clk_lmx_cs_o),
  382. .ref_clk_lmk_cs_o (ref_clk_lmk_cs_o),
  383. .ref_clk_sck_o (ref_clk_sck_o),
  384. .ref_clk_sdata_o (ref_clk_sdata_o),
  385. .ref_clk_lmx_lock_i (ref_clk_lmx_lock_i),
  386. .ref_clk_switch_o (ref_clk_switch_o),
  387. .ref_clk_i2c_scl_o (),
  388. .ref_clk_i2c_sda_io (),
  389. .mcb5_dram_dq (mcb5_dram_dq),
  390. .mcb5_dram_a (mcb5_dram_a),
  391. .mcb5_dram_ba (mcb5_dram_ba),
  392. .mcb5_dram_ras_n (mcb5_dram_ras_n),
  393. .mcb5_dram_cas_n (mcb5_dram_cas_n),
  394. .mcb5_dram_we_n (mcb5_dram_we_n),
  395. .mcb5_dram_odt (mcb5_dram_odt),
  396. .mcb5_dram_reset_n (mcb5_dram_reset_n),
  397. .mcb5_dram_cke (mcb5_dram_cke),
  398. .mcb5_dram_dm (mcb5_dram_dm),
  399. .mcb5_dram_udqs (mcb5_dram_udqs),
  400. .mcb5_dram_udqs_n (mcb5_dram_udqs_n),
  401. .mcb5_rzq (mcb5_rzq),
  402. .mcb5_zio (mcb5_zio),
  403. .mcb5_dram_udm (mcb5_dram_udm),
  404. .mcb5_dram_dqs (mcb5_dram_dqs),
  405. .mcb5_dram_dqs_n (mcb5_dram_dqs_n),
  406. .mcb5_dram_ck (mcb5_dram_ck),
  407. .mcb5_dram_ck_n (mcb5_dram_ck_n),
  408. .mcb1_dram_dq (mcb1_dram_dq),
  409. .mcb1_dram_a (mcb1_dram_a),
  410. .mcb1_dram_ba (mcb1_dram_ba),
  411. .mcb1_dram_ras_n (mcb1_dram_ras_n),
  412. .mcb1_dram_cas_n (mcb1_dram_cas_n),
  413. .mcb1_dram_we_n (mcb1_dram_we_n),
  414. .mcb1_dram_odt (mcb1_dram_odt),
  415. .mcb1_dram_reset_n (mcb1_dram_reset_n),
  416. .mcb1_dram_cke (mcb1_dram_cke),
  417. .mcb1_dram_dm (mcb1_dram_dm),
  418. .mcb1_dram_udqs (mcb1_dram_udqs),
  419. .mcb1_dram_udqs_n (mcb1_dram_udqs_n),
  420. .mcb1_rzq (mcb1_rzq),
  421. .mcb1_zio (mcb1_zio),
  422. .mcb1_dram_udm (mcb1_dram_udm),
  423. .mcb1_dram_dqs (mcb1_dram_dqs),
  424. .mcb1_dram_dqs_n (mcb1_dram_dqs_n),
  425. .mcb1_dram_ck (mcb1_dram_ck),
  426. .mcb1_dram_ck_n (mcb1_dram_ck_n),
  427. .fx3_pclk_o (fx3_pclk_o),
  428. .fx3_slcs_o (fx3_slcs_o),
  429. .fx3_slrd_o (fx3_slrd_o),
  430. .fx3_slwr_o (fx3_slwr_o),
  431. .fx3_sloe_o (fx3_sloe_o),
  432. .fx3_pktend_o (fx3_pktend_o),
  433. .fx3_flaga_i (fx3_flaga_i),
  434. .fx3_flagb_i (fx3_flagb_i),
  435. .fx3_addr_o (fx3_addr_o),
  436. .fx3_dq_io (fx3_dq_io),
  437. .lo_sdata1_o (lo_sdata1_o),
  438. .lo_sdata2_o (lo_sdata2_o),
  439. .lo_cs_o (lo_cs_o),
  440. .lo_sck_o (lo_sck_o),
  441. .rf1_sdata1_o (rf1_sdata1_o),
  442. .rf1_sdata2_o (rf1_sdata2_o),
  443. .rf1_cs_o (rf1_cs_o),
  444. .rf1_sck_o (rf1_sck_o),
  445. .rf2_sdata1_o (rf2_sdata1_o),
  446. .rf2_sdata2_o (rf2_sdata2_o),
  447. .rf2_cs_o (rf2_cs_o),
  448. .rf2_sck_o (rf2_sck_o)
  449. );
  450. fx3_slfifo_model #(
  451. .DQ_W (TOP_FX3_DQ_W), //
  452. .RD_IDO_WM (TOP_FX3_RD_WATERMARK), //
  453. .RD_ID1_WM (TOP_FX3_RD_WATERMARK), //
  454. .WR_ID0_WM (TOP_FX3_WR_WATERMARK), //
  455. .WR_ID1_WM (TOP_FX3_WR_WATERMARK), //
  456. .RD_ID0_ADDR (TOP_FX3_RD_ID0_ADDR), //
  457. .RD_ID1_ADDR (TOP_FX3_RD_ID1_ADDR), //
  458. .WR_ID0_ADDR (TOP_FX3_WR_ID0_ADDR), //
  459. .WR_ID1_ADDR (TOP_FX3_WR_ID1_ADDR), //
  460. .CLOCK_PERIOD (10000) // 10000 ps <-> 100 MHz
  461. ) fx3_slfifo_model_inst (
  462. // FX3 ports
  463. .PCLK (fx3_pclk_o),
  464. .SLCS (fx3_slcs_o),
  465. .SLRD (fx3_slrd_o),
  466. .SLOE (fx3_sloe_o),
  467. .SLWR (fx3_slwr_o),
  468. .A (fx3_addr_o),
  469. .DQ (fx3_dq_io),
  470. .FLAGA (fx3_flaga_i),
  471. .FLAGB (fx3_flagb_i),
  472. .PKTEND (fx3_pktend_o),
  473. .ram_rd0_data_i (fx3_ram_rd0_data_i),
  474. .ram_rd0_val_i (fx3_ram_rd0_val_i),
  475. .ram_rd0_rdy_o (fx3_ram_rd0_rdy_o),
  476. .ram_rd0_eop_i (fx3_ram_rd0_eop_i),
  477. .ram_rd1_data_i (fx3_ram_rd1_data_i),
  478. .ram_rd1_val_i (fx3_ram_rd1_val_i),
  479. .ram_rd1_rdy_o (fx3_ram_rd1_rdy_o),
  480. .ram_rd1_eop_i (fx3_ram_rd1_eop_i),
  481. .ram_wr0_data_o (fx3_ram_wr0_data_o),
  482. .ram_wr0_val_o (fx3_ram_wr0_val_o),
  483. .ram_wr0_rdy_i (fx3_ram_wr0_rdy_i),
  484. .ram_wr1_data_o (fx3_ram_wr1_data_o),
  485. .ram_wr1_val_o (fx3_ram_wr1_val_o),
  486. .ram_wr1_rdy_i (fx3_ram_wr1_rdy_i)
  487. );
  488. always @(negedge fx3_pclk_o) begin
  489. if (fx3_ram_wr0_val_o) begin
  490. $display("FX3 ID0 WR DATA = %h", {fx3_ram_wr0_data_o[7:0], fx3_ram_wr0_data_o[15:8]});
  491. end
  492. if (fx3_ram_wr1_val_o) begin
  493. $display("FX3 ID1 WR DATA = %h", fx3_ram_wr1_data_o);
  494. end
  495. end
  496. ddr3_model_c5 u_mem_c5(
  497. .ck (mcb5_dram_ck),
  498. .ck_n (mcb5_dram_ck_n),
  499. .cke (mcb5_dram_cke),
  500. .cs_n (1'b0),
  501. .ras_n (mcb5_dram_ras_n),
  502. .cas_n (mcb5_dram_cas_n),
  503. .we_n (mcb5_dram_we_n),
  504. .dm_tdqs ({mcb5_dram_udm,mcb5_dram_dm}),
  505. .ba (mcb5_dram_ba),
  506. .addr (mcb5_dram_a),
  507. .dq (mcb5_dram_dq),
  508. .dqs ({mcb5_dram_udqs,mcb5_dram_dqs}),
  509. .dqs_n ({mcb5_dram_udqs_n,mcb5_dram_dqs_n}),
  510. .tdqs_n (),
  511. .odt (mcb5_dram_odt),
  512. .rst_n (mcb5_dram_reset_n)
  513. );
  514. ddr3_model_c1 u_mem_c1(
  515. .ck (mcb1_dram_ck),
  516. .ck_n (mcb1_dram_ck_n),
  517. .cke (mcb1_dram_cke),
  518. .cs_n (1'b0),
  519. .ras_n (mcb1_dram_ras_n),
  520. .cas_n (mcb1_dram_cas_n),
  521. .we_n (mcb1_dram_we_n),
  522. .dm_tdqs ({mcb1_dram_udm,mcb1_dram_dm}),
  523. .ba (mcb1_dram_ba),
  524. .addr (mcb1_dram_a),
  525. .dq (mcb1_dram_dq),
  526. .dqs ({mcb1_dram_udqs,mcb1_dram_dqs}),
  527. .dqs_n ({mcb1_dram_udqs_n,mcb1_dram_dqs_n}),
  528. .tdqs_n (),
  529. .odt (mcb1_dram_odt),
  530. .rst_n (mcb1_dram_reset_n)
  531. );
  532. reg [31:0] data_buf;
  533. integer data_cnt;
  534. initial begin
  535. fid0_in = $fopen("./src/tb/in_data.bin", "rb");
  536. fid1_in = $fopen("./src/tb/in_control_data.bin", "rb");
  537. data_cnt = 0;
  538. fx3_ram_rd0_data_i = 0;
  539. fx3_ram_rd0_val_i = 0;
  540. fx3_ram_rd0_eop_i = 0;
  541. fx3_ram_rd1_data_i = 0;
  542. fx3_ram_rd1_val_i = 0;
  543. fx3_ram_rd1_eop_i = 0;
  544. fx3_ram_wr0_rdy_i = 1;
  545. fx3_ram_wr1_rdy_i = 1;
  546. // rd1
  547. wait (fx3_pclk_o);
  548. #(UUT_CLOCK_PERIOD*20);
  549. @(posedge fx3_pclk_o) begin
  550. fx3_ram_rd1_val_i = 1'b1;
  551. read_data(fid1_in, fx3_ram_rd1_data_i, len);
  552. end
  553. repeat(CONTROL_DATA_NUM-2) begin
  554. #(UUT_CLOCK_PERIOD/2);
  555. wait(fx3_ram_rd1_rdy_o);
  556. @(posedge fx3_pclk_o) begin
  557. fx3_ram_rd1_val_i = 1'b1;
  558. read_data(fid1_in, fx3_ram_rd1_data_i, len);
  559. end
  560. end
  561. #(UUT_CLOCK_PERIOD/2);
  562. wait(fx3_ram_rd1_rdy_o);
  563. @(posedge fx3_pclk_o) begin
  564. fx3_ram_rd1_val_i = 1'b1;
  565. fx3_ram_rd1_eop_i = 1'b1;
  566. read_data(fid1_in, fx3_ram_rd1_data_i, len);
  567. end
  568. #(UUT_CLOCK_PERIOD/2);
  569. wait(fx3_ram_rd1_rdy_o);
  570. @(posedge fx3_pclk_o) begin
  571. fx3_ram_rd1_val_i = 1'b0;
  572. fx3_ram_rd1_eop_i = 1'b0;
  573. fx3_ram_rd1_data_i = 16'b0;
  574. end
  575. // End rd1
  576. #(UUT_CLOCK_PERIOD*20);
  577. wait (fx3_pclk_o);
  578. #(UUT_CLOCK_PERIOD*20);
  579. @(posedge fx3_pclk_o) begin
  580. fx3_ram_rd0_val_i = 1'b1;
  581. read_data(fid0_in, fx3_ram_rd0_data_i, len);
  582. end
  583. repeat(BULK_DATA_NUM-2) begin
  584. #(UUT_CLOCK_PERIOD/2);
  585. wait(fx3_ram_rd0_rdy_o);
  586. @(posedge fx3_pclk_o) begin
  587. fx3_ram_rd0_val_i = 1'b1;
  588. read_data(fid0_in, fx3_ram_rd0_data_i, len);
  589. end
  590. end
  591. #(UUT_CLOCK_PERIOD/2);
  592. wait(fx3_ram_rd0_rdy_o);
  593. @(posedge fx3_pclk_o) begin
  594. fx3_ram_rd0_val_i = 1'b1;
  595. fx3_ram_rd0_eop_i = 1'b1;
  596. read_data(fid0_in, fx3_ram_rd0_data_i, len);
  597. end
  598. #(UUT_CLOCK_PERIOD/2);
  599. wait(fx3_ram_rd0_rdy_o);
  600. @(posedge fx3_pclk_o) begin
  601. fx3_ram_rd0_val_i = 1'b0;
  602. fx3_ram_rd0_eop_i = 1'b0;
  603. fx3_ram_rd0_data_i = 16'b0;
  604. end
  605. end
  606. initial begin
  607. test_clk_24mhz = 1'b0;
  608. forever begin
  609. #(CLOCK_PERIOD_24/2) test_clk_24mhz = ~test_clk_24mhz;
  610. end
  611. end
  612. initial begin
  613. test_clk_50mhz = 1'b1;
  614. forever begin
  615. #(CLOCK_PERIOD_50/2) test_clk_50mhz = ~test_clk_50mhz;
  616. end
  617. end
  618. endmodule