| // Copyright (C) 2017-2020  The Project X-Ray Authors. | 
 | // | 
 | // Use of this source code is governed by a ISC-style | 
 | // license that can be found in the LICENSE file or at | 
 | // https://opensource.org/licenses/ISC | 
 | // | 
 | // SPDX-License-Identifier: ISC | 
 |  | 
 | `include "src/idelay_calibrator.v" | 
 |  | 
 | `default_nettype none | 
 |  | 
 | // ============================================================================ | 
 |  | 
 | module top | 
 | ( | 
 | input  wire clk, | 
 |  | 
 | input  wire rx, | 
 | output wire tx, | 
 |  | 
 | input  wire [15:0] sw, | 
 | output wire [15:0] led, | 
 |  | 
 | output wire ja1, | 
 | output wire ja2, | 
 | output wire ja3, | 
 | output wire ja4, | 
 | output wire ja7, | 
 | output wire ja8, | 
 | output wire ja9, | 
 | output wire ja10, | 
 |  | 
 | output wire jb1, | 
 | output wire jb2, | 
 | output wire jb3, | 
 | output wire jb4, | 
 | output wire jb7, | 
 | output wire jb8, | 
 | output wire jb9, | 
 | output wire jb10, | 
 |  | 
 | output wire jc1, | 
 | output wire jc2, | 
 | output wire jc3, | 
 | output wire jc4, | 
 | output wire jc7, | 
 | output wire jc8, | 
 | output wire jc9, | 
 | output wire jc10, | 
 |  | 
 | output wire xadc1_p, | 
 | output wire xadc2_p, | 
 | output wire xadc3_p, | 
 | output wire xadc4_p, | 
 | output wire xadc1_n, | 
 | output wire xadc2_n, | 
 | output wire xadc3_n, | 
 | output wire xadc4_n | 
 | ); | 
 |  | 
 | // ============================================================================ | 
 | // Clock & reset | 
 | reg [3:0] rst_sr; | 
 |  | 
 | initial rst_sr <= 4'hF; | 
 |  | 
 | always @(posedge clk) | 
 |     if (sw[0]) | 
 |         rst_sr <= 4'hF; | 
 |     else | 
 |         rst_sr <= rst_sr >> 1; | 
 |  | 
 | wire CLK = clk; | 
 | wire RST = rst_sr[0]; | 
 |  | 
 | // ============================================================================ | 
 | // IDELAY calibrator | 
 | wire cal_rdy; | 
 |  | 
 | idelay_calibrator cal | 
 | ( | 
 | .refclk (CLK), | 
 | .rst    (RST), | 
 | .rdy    (cal_rdy) | 
 | ); | 
 |  | 
 | // ============================================================================ | 
 |  | 
 | reg         dly_in; | 
 | wire [31:0] dly_out; | 
 |  | 
 | always @(posedge CLK) | 
 |     if (RST) dly_in <= 0; | 
 |     else     dly_in <= ~dly_in; | 
 |  | 
 | genvar i; | 
 | generate for (i=0; i<32; i=i+1) begin | 
 |  | 
 |     (* KEEP, DONT_TOUCH *) | 
 |     IDELAYE2 # | 
 |     ( | 
 |     .IDELAY_TYPE    ("FIXED"), | 
 |     .IDELAY_VALUE   (i), | 
 |     .DELAY_SRC      ("DATAIN") | 
 |     ) | 
 |     idelay | 
 |     ( | 
 |     .DATAIN         (dly_in), | 
 |     .DATAOUT        (dly_out[i]) | 
 |     ); | 
 |  | 
 | end endgenerate | 
 |  | 
 | // ============================================================================ | 
 | // I/O connections | 
 | reg [23:0] heartbeat_cnt; | 
 |  | 
 | always @(posedge CLK) | 
 |     heartbeat_cnt <= heartbeat_cnt + 1; | 
 |  | 
 | assign led[ 0] = heartbeat_cnt[23]; | 
 | assign led[ 1] = cal_rdy; | 
 | assign led[ 2] = 1'b0; | 
 | assign led[ 3] = 1'b0; | 
 | assign led[ 4] = 1'b0; | 
 | assign led[ 5] = 1'b0; | 
 | assign led[ 6] = 1'b0; | 
 | assign led[ 7] = 1'b0; | 
 | assign led[ 8] = 1'b0; | 
 | assign led[ 9] = 1'b0; | 
 | assign led[10] = 1'b0; | 
 | assign led[11] = 1'b0; | 
 | assign led[12] = 1'b0; | 
 | assign led[13] = 1'b0; | 
 | assign led[14] = 1'b0; | 
 | assign led[15] = 1'b0; | 
 |  | 
 | assign ja1  = dly_out[ 0]; | 
 | assign ja2  = dly_out[ 1]; | 
 | assign ja3  = dly_out[ 2]; | 
 | assign ja4  = dly_out[ 3]; | 
 | assign ja7  = dly_out[ 4]; | 
 | assign ja8  = dly_out[ 5]; | 
 | assign ja9  = dly_out[ 6]; | 
 | assign ja10 = dly_out[ 7]; | 
 |  | 
 | assign jb1  = dly_out[ 8]; | 
 | assign jb2  = dly_out[ 9]; | 
 | assign jb3  = dly_out[10]; | 
 | assign jb4  = dly_out[11]; | 
 | assign jb7  = dly_out[12]; | 
 | assign jb8  = dly_out[13]; | 
 | assign jb9  = dly_out[14]; | 
 | assign jb10 = dly_out[15]; | 
 |  | 
 | assign jc1  = dly_out[16]; | 
 | assign jc2  = dly_out[17]; | 
 | assign jc3  = dly_out[18]; | 
 | assign jc4  = dly_out[19]; | 
 | assign jc7  = dly_out[20]; | 
 | assign jc8  = dly_out[21]; | 
 | assign jc9  = dly_out[22]; | 
 | assign jc10 = dly_out[23]; | 
 |  | 
 | assign xadc1_p = dly_out[24]; | 
 | assign xadc2_p = dly_out[25]; | 
 | assign xadc3_p = dly_out[26]; | 
 | assign xadc4_p = dly_out[27]; | 
 | assign xadc1_n = dly_out[28]; | 
 | assign xadc2_n = dly_out[29]; | 
 | assign xadc3_n = dly_out[30]; | 
 | assign xadc4_n = dly_out[31]; | 
 |  | 
 | endmodule |