| // 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_histogram.v" |
| `include "src/idelay_calibrator.v" |
| `include "src/error_counter.v" |
| `include "src/message_formatter.v" |
| `include "src/lfsr.v" |
| `include "src/simpleuart.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, |
| input 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 pll_clkfb; |
| wire pll_locked; |
| |
| wire CLK100; |
| wire CLK200; |
| wire CLK400; |
| |
| PLLE2_BASE # |
| ( |
| .CLKFBOUT_MULT (8), |
| .CLKOUT0_DIVIDE (8), |
| .CLKOUT1_DIVIDE (4), |
| .CLKOUT2_DIVIDE (2) |
| ) |
| pll |
| ( |
| .CLKIN1 (clk), |
| |
| .CLKFBIN (pll_clkfb), |
| .CLKFBOUT (pll_clkfb), |
| |
| .CLKOUT0 (CLK100), |
| .CLKOUT1 (CLK200), |
| .CLKOUT2 (CLK400), |
| |
| .RST (rst_sr[0]), |
| .LOCKED (pll_locked) |
| ); |
| |
| // ============================================================================ |
| // IDELAY calibrator |
| wire cal_rdy; |
| |
| idelay_calibrator cal |
| ( |
| .refclk (CLK400), |
| .rst (rst_sr[0] || !pll_locked), |
| .rdy (cal_rdy) |
| ); |
| |
| wire RST = rst_sr[0] || !cal_rdy; |
| |
| // ============================================================================ |
| wire sig_out; |
| wire sig_inp; |
| wire [4:0] delay; |
| |
| wire sig_ref_i; |
| wire sig_ref_o; |
| |
| idelay_histogram # |
| ( |
| .UART_PRESCALER (868) |
| ) |
| idelay_histogram |
| ( |
| .CLK (CLK100), |
| .RST (RST), |
| |
| .UART_RX (rx), |
| .UART_TX (tx), |
| |
| .TEST (sw[1]), |
| .O (sig_out), |
| .I (sig_inp), |
| |
| .REF_O (sig_ref_o), |
| .REF_I (sig_ref_i), |
| |
| .DELAY (delay) |
| ); |
| |
| // ============================================================================ |
| // I/O connections |
| reg [23:0] heartbeat_cnt; |
| |
| always @(posedge CLK100) |
| 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] = delay[0]; |
| assign led[12] = delay[1]; |
| assign led[13] = delay[2]; |
| assign led[14] = delay[3]; |
| assign led[15] = delay[4]; |
| |
| assign ja1 = 1'b0; |
| assign ja2 = 1'b0; |
| assign ja3 = 1'b0; |
| assign ja4 = 1'b0; |
| assign ja7 = 1'b0; |
| assign ja8 = 1'b0; |
| assign ja9 = 1'b0; |
| assign ja10 = 1'b0; |
| |
| assign jb1 = 1'b0; |
| assign jb2 = 1'b0; |
| assign jb3 = 1'b0; |
| assign jb4 = 1'b0; |
| assign jb7 = 1'b0; |
| assign jb8 = 1'b0; |
| assign jb9 = 1'b0; |
| assign jb10 = 1'b0; |
| |
| assign jc1 = 1'b0; |
| assign jc2 = 1'b0; |
| assign jc3 = 1'b0; |
| assign jc4 = 1'b0; |
| assign jc7 = 1'b0; |
| assign jc8 = 1'b0; |
| assign jc9 = 1'b0; |
| assign jc10 = 1'b0; |
| |
| assign xadc1_p = sig_ref_i; |
| assign xadc2_p = sig_ref_o; |
| assign xadc3_p = 1'b0; |
| assign xadc4_p = 1'b0; |
| //assign xadc1_n = 1'b0; |
| assign xadc2_n = sig_out; |
| assign xadc3_n = 1'b0; |
| assign xadc4_n = 1'b0; |
| |
| assign sig_inp = xadc1_n; |
| |
| endmodule |