/////////////////////////////////////////////////////////////////////////////// // LTC2195.v // // 8/03/21 // Jakub Matyas // // LTC2195 controller. // // /////////////////////////////////////////////////////////////////////////////// // `include "timescale.v" `timescale 1ns/1ps // this was in the SelectIO design module LTC2195( input rst_in, input clk200, input DCO, input DCO_2D, input FR_in_p, input FR_in_n, input [3:0] D0_in_p, input [3:0] D0_in_n, input [3:0] D1_in_p, input [3:0] D1_in_n, input bitslip, input [4:0] delay_val, output reg [15:0] ADC0_out, output reg [15:0] ADC1_out, output reg [3:0] FR_out, output wire [8:0] o_data_from_pins, output idelay_rdy ); // /////////////////////////////////////////////////////////////////////////////// // // LVDS inputs localparam N_BITS = 4; localparam N_LANES = 9; // for each channel 4 lanes + 1 lane for FRAME wire [N_LANES-1:0] data_in_p, data_in_n, data_in_from_pins, data_in_from_pins_delay; assign data_in_p = {FR_in_p, D1_in_p, D0_in_p}; assign data_in_n = {FR_in_n, D1_in_n, D0_in_n}; assign o_data_from_pins = data_in_from_pins_delay; wire [N_LANES*4 -1:0] data_out; wire [35:0 ]data_out_mod; assign data_out_mod = {~data_out[35:24], data_out[23:20], ~data_out[19:16], data_out[15:0]}; always @(posedge DCO_2D) begin ADC0_out <= { data_out_mod[0], data_out_mod[4], data_out_mod[1], data_out_mod[5], data_out_mod[2], data_out_mod[6], data_out_mod[3], data_out_mod[7], data_out_mod[8], data_out_mod[12], data_out_mod[9], data_out_mod[13], data_out_mod[10], data_out_mod[14], data_out_mod[11], data_out_mod[15] }; ADC1_out <= { data_out_mod[16 + 0], data_out_mod[16 + 4], data_out_mod[16 + 1], data_out_mod[16 + 5], data_out_mod[16 + 2], data_out_mod[16 + 6], data_out_mod[16 + 3], data_out_mod[16 + 7], data_out_mod[16 + 8], data_out_mod[16 + 12], data_out_mod[16 + 9], data_out_mod[16 + 13], data_out_mod[16 + 10], data_out_mod[16 + 14], data_out_mod[16 + 11], data_out_mod[16 + 15] }; FR_out <= {data_out_mod[32], data_out_mod[33], data_out_mod[34], data_out_mod[35]}; // value that arrived first is LSB, therefore reversing order end wire s_idelay_rdy; IDELAYCTRL IDELAYCTRL_inst ( .RDY(s_idelay_rdy), // 1-bit output: Ready output .REFCLK(clk200), // 1-bit input: Reference clock input .RST(s_rst) // 1-bit input: Active high reset input ); assign idelay_rdy = s_idelay_rdy; reg s_rst; reg [5:0] rst_cnt; wire serdes_o; always @(posedge DCO_2D) begin if (rst_in) begin s_rst <= 1'b1; rst_cnt <= 'b0; end else begin if (rst_cnt == 22) s_rst <= 'b0; else rst_cnt <= rst_cnt + 1; end end genvar lane; generate for (lane=0; lane