ad_serdes: Add features and update their instances in /library

- ad_serdes_in:
  * Removed unused ports: loaden, phase, locked
  * Added IODELAY_ENABLE is set to be by default 1
  * Added conditional instantiation (using IODELAY_ENABLE) to IDELAY modules
  * Added conditional instantiation (using IODELAY_CTRL_ENABLED) to IDELAYCTRL module, based on IODELAY_ENABLE

- library: Update ad_serdes_in instances: add IODELAY_ENABLE
   * Edited in:
     * axi_ad9434
     * axi_ad9684
     * axi_adrv9001

- ad_serdes_out:
  * Removed unused port: loaden

- library: Update ad_serdes_out instances
   * Edited in:
     * axi_ad9122
     * axi_ad9739a
     * axi_ad9783
     * axi_adrv9001

- ad_serdes_clk:
  * Remove unused ports: loaden, phase

- library: Update ad_serdes_clk instances
   * Edited in:
     * axi_ad9122
     * axi_ad9434
     * axi_ad9684

Signed-off-by: Iulia Moldovan <Iulia.Moldovan@analog.com>
main
Iulia Moldovan 2022-10-05 09:11:57 +01:00 committed by imoldovan
parent 1b1cbfc8ef
commit 173f4a83d4
14 changed files with 48 additions and 44 deletions

View File

@ -112,7 +112,6 @@ module axi_ad9122_if #(
// internal signals // internal signals
wire dac_out_clk; wire dac_out_clk;
wire loaden_s;
// dac status // dac status
@ -136,7 +135,6 @@ module axi_ad9122_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk), .clk (dac_clk),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (loaden_s),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (dac_data_i0), .data_s0 (dac_data_i0),
.data_s1 (dac_data_q0), .data_s1 (dac_data_q0),
@ -160,7 +158,6 @@ module axi_ad9122_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk), .clk (dac_clk),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (loaden_s),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (dac_frame_i0), .data_s0 (dac_frame_i0),
.data_s1 (dac_frame_q0), .data_s1 (dac_frame_q0),
@ -184,7 +181,6 @@ module axi_ad9122_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk), .clk (dac_clk),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (loaden_s),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (1'b1), .data_s0 (1'b1),
.data_s1 (1'b0), .data_s1 (1'b0),
@ -216,8 +212,6 @@ module axi_ad9122_if #(
.clk (dac_clk), .clk (dac_clk),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.out_clk (dac_out_clk), .out_clk (dac_out_clk),
.loaden (loaden_s),
.phase (),
.up_clk (up_clk), .up_clk (up_clk),
.up_rstn (up_rstn), .up_rstn (up_rstn),
.up_drp_sel (up_drp_sel), .up_drp_sel (up_drp_sel),

View File

@ -43,6 +43,7 @@ module axi_ad9434 #(
parameter FPGA_FAMILY = 0, parameter FPGA_FAMILY = 0,
parameter SPEED_GRADE = 0, parameter SPEED_GRADE = 0,
parameter DEV_PACKAGE = 0, parameter DEV_PACKAGE = 0,
parameter IODELAY_ENABLE = 1,
parameter IO_DELAY_GROUP = "dev_if_delay_group" parameter IO_DELAY_GROUP = "dev_if_delay_group"
) ( ) (
@ -133,6 +134,7 @@ module axi_ad9434 #(
axi_ad9434_if #( axi_ad9434_if #(
.FPGA_TECHNOLOGY(FPGA_TECHNOLOGY), .FPGA_TECHNOLOGY(FPGA_TECHNOLOGY),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IO_DELAY_GROUP(IO_DELAY_GROUP) .IO_DELAY_GROUP(IO_DELAY_GROUP)
) i_if ( ) i_if (
.adc_clk_in_p(adc_clk_in_p), .adc_clk_in_p(adc_clk_in_p),

View File

@ -38,6 +38,7 @@
module axi_ad9434_if #( module axi_ad9434_if #(
parameter FPGA_TECHNOLOGY = 0, parameter FPGA_TECHNOLOGY = 0,
parameter IODELAY_ENABLE = 1,
parameter IO_DELAY_GROUP = "dev_if_delay_group" parameter IO_DELAY_GROUP = "dev_if_delay_group"
) ( ) (
@ -102,6 +103,7 @@ module axi_ad9434_if #(
// data interface // data interface
ad_serdes_in #( ad_serdes_in #(
.FPGA_TECHNOLOGY(FPGA_TECHNOLOGY), .FPGA_TECHNOLOGY(FPGA_TECHNOLOGY),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IODELAY_CTRL(0), .IODELAY_CTRL(0),
.IODELAY_GROUP(IO_DELAY_GROUP), .IODELAY_GROUP(IO_DELAY_GROUP),
.DDR_OR_SDR_N(SDR), .DDR_OR_SDR_N(SDR),
@ -111,9 +113,6 @@ module axi_ad9434_if #(
.rst(adc_rst), .rst(adc_rst),
.clk(adc_clk_in), .clk(adc_clk_in),
.div_clk(adc_div_clk), .div_clk(adc_div_clk),
.loaden(1'b0),
.phase(8'b0),
.locked(1'b0),
.data_s0(adc_data[47:36]), .data_s0(adc_data[47:36]),
.data_s1(adc_data[35:24]), .data_s1(adc_data[35:24]),
.data_s2(adc_data[23:12]), .data_s2(adc_data[23:12]),
@ -135,6 +134,7 @@ module axi_ad9434_if #(
// over-range interface // over-range interface
ad_serdes_in #( ad_serdes_in #(
.FPGA_TECHNOLOGY(FPGA_TECHNOLOGY), .FPGA_TECHNOLOGY(FPGA_TECHNOLOGY),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IODELAY_CTRL(1), .IODELAY_CTRL(1),
.IODELAY_GROUP(IO_DELAY_GROUP), .IODELAY_GROUP(IO_DELAY_GROUP),
.DDR_OR_SDR_N(SDR), .DDR_OR_SDR_N(SDR),
@ -144,9 +144,6 @@ module axi_ad9434_if #(
.rst(adc_rst), .rst(adc_rst),
.clk(adc_clk_in), .clk(adc_clk_in),
.div_clk(adc_div_clk), .div_clk(adc_div_clk),
.loaden(1'b0),
.phase(8'b0),
.locked(1'b0),
.data_s0(adc_or_s[3]), .data_s0(adc_or_s[3]),
.data_s1(adc_or_s[2]), .data_s1(adc_or_s[2]),
.data_s2(adc_or_s[1]), .data_s2(adc_or_s[1]),
@ -183,8 +180,6 @@ module axi_ad9434_if #(
.clk (adc_clk_in), .clk (adc_clk_in),
.div_clk (adc_div_clk), .div_clk (adc_div_clk),
.out_clk (), .out_clk (),
.loaden (),
.phase (),
.up_clk (up_clk), .up_clk (up_clk),
.up_rstn (up_rstn), .up_rstn (up_rstn),
.up_drp_sel (up_drp_sel), .up_drp_sel (up_drp_sel),

View File

@ -42,6 +42,7 @@ module axi_ad9684 #(
parameter FPGA_FAMILY = 0, parameter FPGA_FAMILY = 0,
parameter SPEED_GRADE = 0, parameter SPEED_GRADE = 0,
parameter DEV_PACKAGE = 0, parameter DEV_PACKAGE = 0,
parameter IODELAY_ENABLE = 1,
parameter IO_DELAY_GROUP = "dev_if_delay_group", parameter IO_DELAY_GROUP = "dev_if_delay_group",
parameter OR_STATUS = 1 parameter OR_STATUS = 1
) ( ) (
@ -168,6 +169,7 @@ module axi_ad9684 #(
axi_ad9684_if #( axi_ad9684_if #(
.FPGA_TECHNOLOGY(FPGA_TECHNOLOGY), .FPGA_TECHNOLOGY(FPGA_TECHNOLOGY),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IO_DELAY_GROUP(IO_DELAY_GROUP), .IO_DELAY_GROUP(IO_DELAY_GROUP),
.OR_STATUS (OR_STATUS) .OR_STATUS (OR_STATUS)
) i_ad9684_if ( ) i_ad9684_if (

View File

@ -38,6 +38,7 @@
module axi_ad9684_if #( module axi_ad9684_if #(
parameter FPGA_TECHNOLOGY = 0, parameter FPGA_TECHNOLOGY = 0,
parameter IODELAY_ENABLE = 1,
parameter IO_DELAY_GROUP = "dev_if_delay_group", parameter IO_DELAY_GROUP = "dev_if_delay_group",
parameter OR_STATUS = 0 parameter OR_STATUS = 0
) ( ) (
@ -94,7 +95,6 @@ module axi_ad9684_if #(
wire adc_div_clk; wire adc_div_clk;
wire [ 1:0] adc_data_or_a_s; wire [ 1:0] adc_data_or_a_s;
wire [ 1:0] adc_data_or_b_s; wire [ 1:0] adc_data_or_b_s;
wire loaden_s;
wire [ 7:0] phase_s; wire [ 7:0] phase_s;
genvar l_inst; genvar l_inst;
@ -108,6 +108,7 @@ module axi_ad9684_if #(
ad_serdes_in #( ad_serdes_in #(
.FPGA_TECHNOLOGY(FPGA_TECHNOLOGY), .FPGA_TECHNOLOGY(FPGA_TECHNOLOGY),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IODELAY_CTRL(1), .IODELAY_CTRL(1),
.IODELAY_GROUP(IO_DELAY_GROUP), .IODELAY_GROUP(IO_DELAY_GROUP),
.DDR_OR_SDR_N(DDR_OR_SDR_N), .DDR_OR_SDR_N(DDR_OR_SDR_N),
@ -116,9 +117,6 @@ module axi_ad9684_if #(
.rst(adc_rst), .rst(adc_rst),
.clk(adc_clk_in), .clk(adc_clk_in),
.div_clk(adc_div_clk), .div_clk(adc_div_clk),
.loaden(loaden_s),
.phase(phase_s),
.locked(1'b0),
.data_s0(adc_data_b[27:14]), .data_s0(adc_data_b[27:14]),
.data_s1(adc_data_a[27:14]), .data_s1(adc_data_a[27:14]),
.data_s2(adc_data_b[13: 0]), .data_s2(adc_data_b[13: 0]),
@ -141,6 +139,7 @@ module axi_ad9684_if #(
ad_serdes_in #( ad_serdes_in #(
.FPGA_TECHNOLOGY(FPGA_TECHNOLOGY), .FPGA_TECHNOLOGY(FPGA_TECHNOLOGY),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IODELAY_CTRL(0), .IODELAY_CTRL(0),
.IODELAY_GROUP(IO_DELAY_GROUP), .IODELAY_GROUP(IO_DELAY_GROUP),
.DDR_OR_SDR_N(DDR_OR_SDR_N), .DDR_OR_SDR_N(DDR_OR_SDR_N),
@ -149,9 +148,6 @@ module axi_ad9684_if #(
.rst(adc_rst), .rst(adc_rst),
.clk(adc_clk_in), .clk(adc_clk_in),
.div_clk(adc_div_clk), .div_clk(adc_div_clk),
.loaden(loaden_s),
.phase(phase_s),
.locked(1'b0),
.data_s0(adc_data_or_b_s[1]), .data_s0(adc_data_or_b_s[1]),
.data_s1(adc_data_or_a_s[1]), .data_s1(adc_data_or_a_s[1]),
.data_s2(adc_data_or_b_s[0]), .data_s2(adc_data_or_b_s[0]),
@ -197,8 +193,6 @@ module axi_ad9684_if #(
.clk (adc_clk_in), .clk (adc_clk_in),
.div_clk (adc_div_clk), .div_clk (adc_div_clk),
.out_clk (), .out_clk (),
.loaden (loaden_s),
.phase (phase_s),
.up_clk (up_clk), .up_clk (up_clk),
.up_rstn (up_rstn), .up_rstn (up_rstn),
.up_drp_sel (up_drp_sel), .up_drp_sel (up_drp_sel),

View File

@ -108,7 +108,6 @@ module axi_ad9739a_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk), .clk (dac_clk),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (1'b0),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (dac_data_00[15:2]), .data_s0 (dac_data_00[15:2]),
.data_s1 (dac_data_02[15:2]), .data_s1 (dac_data_02[15:2]),
@ -133,7 +132,6 @@ module axi_ad9739a_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk), .clk (dac_clk),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (1'b0),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (dac_data_01[15:2]), .data_s0 (dac_data_01[15:2]),
.data_s1 (dac_data_03[15:2]), .data_s1 (dac_data_03[15:2]),
@ -158,7 +156,6 @@ module axi_ad9739a_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk), .clk (dac_clk),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (1'b0),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (1'b1), .data_s0 (1'b1),
.data_s1 (1'b0), .data_s1 (1'b0),

View File

@ -98,7 +98,6 @@ module axi_ad9783_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk_s), .clk (dac_clk_s),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (1'b0),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (dac_data_a0), .data_s0 (dac_data_a0),
.data_s1 (dac_data_b0), .data_s1 (dac_data_b0),
@ -123,7 +122,6 @@ module axi_ad9783_if #(
.rst (dac_rst), .rst (dac_rst),
.clk (dac_clk_s), .clk (dac_clk_s),
.div_clk (dac_div_clk), .div_clk (dac_div_clk),
.loaden (1'b0),
.data_oe (1'b1), .data_oe (1'b1),
.data_s0 (1'b1), .data_s0 (1'b1),
.data_s1 (1'b0), .data_s1 (1'b0),

View File

@ -40,6 +40,7 @@ module adrv9001_rx #(
parameter FPGA_TECHNOLOGY = 0, parameter FPGA_TECHNOLOGY = 0,
parameter NUM_LANES = 3, parameter NUM_LANES = 3,
parameter DRP_WIDTH = 5, parameter DRP_WIDTH = 5,
parameter IODELAY_ENABLE = 1,
parameter IODELAY_CTRL = 0, parameter IODELAY_CTRL = 0,
parameter USE_BUFG = 0, parameter USE_BUFG = 0,
parameter IO_DELAY_GROUP = "dev_if_delay_group" parameter IO_DELAY_GROUP = "dev_if_delay_group"
@ -111,6 +112,7 @@ module adrv9001_rx #(
.CMOS_LVDS_N (CMOS_LVDS_N), .CMOS_LVDS_N (CMOS_LVDS_N),
.FPGA_TECHNOLOGY (FPGA_TECHNOLOGY), .FPGA_TECHNOLOGY (FPGA_TECHNOLOGY),
.IODELAY_CTRL (IODELAY_CTRL), .IODELAY_CTRL (IODELAY_CTRL),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IODELAY_GROUP (IO_DELAY_GROUP), .IODELAY_GROUP (IO_DELAY_GROUP),
.DDR_OR_SDR_N (DDR_OR_SDR_N), .DDR_OR_SDR_N (DDR_OR_SDR_N),
.DATA_WIDTH (NUM_LANES), .DATA_WIDTH (NUM_LANES),
@ -120,9 +122,6 @@ module adrv9001_rx #(
.rst (adc_rst|ssi_rst), .rst (adc_rst|ssi_rst),
.clk (adc_clk_in_fast), .clk (adc_clk_in_fast),
.div_clk (adc_clk_div), .div_clk (adc_clk_div),
.loaden (1'b0),
.phase (8'b0),
.locked (1'b0),
.data_s0 (data_s0), .data_s0 (data_s0),
.data_s1 (data_s1), .data_s1 (data_s1),
.data_s2 (data_s2), .data_s2 (data_s2),

View File

@ -108,7 +108,6 @@ module adrv9001_tx #(
.rst (dac_rst|ssi_rst), .rst (dac_rst|ssi_rst),
.clk (dac_fast_clk), .clk (dac_fast_clk),
.div_clk (dac_clk_div), .div_clk (dac_clk_div),
.loaden (1'b0),
.data_oe (tx_output_enable), .data_oe (tx_output_enable),
.data_s0 (data_s0), .data_s0 (data_s0),
.data_s1 (data_s1), .data_s1 (data_s1),

View File

@ -47,6 +47,7 @@ module axi_adrv9001 #(
parameter RX_USE_BUFG = 0, parameter RX_USE_BUFG = 0,
parameter TX_USE_BUFG = 0, parameter TX_USE_BUFG = 0,
parameter IODELAY_CTRL = 1, parameter IODELAY_CTRL = 1,
parameter IODELAY_ENABLE = 1,
parameter IO_DELAY_GROUP = "dev_if_delay_group", parameter IO_DELAY_GROUP = "dev_if_delay_group",
parameter FPGA_TECHNOLOGY = 0, parameter FPGA_TECHNOLOGY = 0,
parameter FPGA_FAMILY = 0, parameter FPGA_FAMILY = 0,
@ -282,6 +283,7 @@ module axi_adrv9001 #(
.RX_USE_BUFG (RX_USE_BUFG), .RX_USE_BUFG (RX_USE_BUFG),
.TX_USE_BUFG (TX_USE_BUFG), .TX_USE_BUFG (TX_USE_BUFG),
.IODELAY_CTRL (IODELAY_CTRL), .IODELAY_CTRL (IODELAY_CTRL),
.IODELAY_ENABLE (IODELAY_ENABLE),
.IO_DELAY_GROUP (IO_DELAY_GROUP), .IO_DELAY_GROUP (IO_DELAY_GROUP),
.DISABLE_RX2_SSI (DISABLE_RX2_SSI), .DISABLE_RX2_SSI (DISABLE_RX2_SSI),
.DISABLE_TX2_SSI (DISABLE_TX2_SSI), .DISABLE_TX2_SSI (DISABLE_TX2_SSI),

View File

@ -45,6 +45,7 @@ module axi_adrv9001_if #(
parameter DISABLE_RX2_SSI = 0, parameter DISABLE_RX2_SSI = 0,
parameter DISABLE_TX2_SSI = 0, parameter DISABLE_TX2_SSI = 0,
parameter IODELAY_CTRL = 1, parameter IODELAY_CTRL = 1,
parameter IODELAY_ENABLE = 1,
parameter IO_DELAY_GROUP = "dev_if_delay_group", parameter IO_DELAY_GROUP = "dev_if_delay_group",
parameter USE_RX_CLK_FOR_TX = 0 parameter USE_RX_CLK_FOR_TX = 0
) ( ) (
@ -210,6 +211,7 @@ module axi_adrv9001_if #(
.NUM_LANES (NUM_LANES), .NUM_LANES (NUM_LANES),
.DRP_WIDTH (DRP_WIDTH), .DRP_WIDTH (DRP_WIDTH),
.IODELAY_CTRL (IODELAY_CTRL), .IODELAY_CTRL (IODELAY_CTRL),
.IODELAY_ENABLE (IODELAY_ENABLE),
.USE_BUFG (RX_USE_BUFG), .USE_BUFG (RX_USE_BUFG),
.IO_DELAY_GROUP ({IO_DELAY_GROUP,"_rx"}) .IO_DELAY_GROUP ({IO_DELAY_GROUP,"_rx"})
) i_rx_1_phy ( ) i_rx_1_phy (
@ -276,6 +278,7 @@ module axi_adrv9001_if #(
.NUM_LANES (NUM_LANES), .NUM_LANES (NUM_LANES),
.DRP_WIDTH (DRP_WIDTH), .DRP_WIDTH (DRP_WIDTH),
.IODELAY_CTRL (0), .IODELAY_CTRL (0),
.IODELAY_ENABLE (IODELAY_ENABLE),
.USE_BUFG (RX_USE_BUFG), .USE_BUFG (RX_USE_BUFG),
.IO_DELAY_GROUP ({IO_DELAY_GROUP,"_rx"}) .IO_DELAY_GROUP ({IO_DELAY_GROUP,"_rx"})
) i_rx_2_phy ( ) i_rx_2_phy (

View File

@ -58,8 +58,6 @@ module ad_serdes_clk #(
output clk, output clk,
output div_clk, output div_clk,
output out_clk, output out_clk,
output loaden,
output [ 7:0] phase,
// drp interface // drp interface
@ -82,8 +80,6 @@ module ad_serdes_clk #(
// defaults // defaults
assign loaden = 'd0;
assign phase = 'd0;
assign up_drp_rdata[31:16] = 'd0; assign up_drp_rdata[31:16] = 'd0;
// instantiations // instantiations

View File

@ -42,6 +42,7 @@ module ad_serdes_in #(
parameter SERDES_FACTOR = 8, parameter SERDES_FACTOR = 8,
parameter DATA_WIDTH = 16, parameter DATA_WIDTH = 16,
parameter DRP_WIDTH = 5, parameter DRP_WIDTH = 5,
parameter IODELAY_ENABLE = 1,
parameter IODELAY_CTRL = 0, parameter IODELAY_CTRL = 0,
parameter IODELAY_GROUP = "dev_if_delay_group", parameter IODELAY_GROUP = "dev_if_delay_group",
parameter REFCLK_FREQUENCY = 200 parameter REFCLK_FREQUENCY = 200
@ -52,9 +53,6 @@ module ad_serdes_in #(
input rst, input rst,
input clk, input clk,
input div_clk, input div_clk,
input loaden,
input [ 7:0] phase,
input locked,
// data interface // data interface
@ -88,11 +86,13 @@ module ad_serdes_in #(
localparam ULTRASCALE_PLUS = 3; localparam ULTRASCALE_PLUS = 3;
localparam DATA_RATE = (DDR_OR_SDR_N) ? "DDR" : "SDR"; localparam DATA_RATE = (DDR_OR_SDR_N) ? "DDR" : "SDR";
localparam IODELAY_CTRL_ENABLED = (IODELAY_ENABLE == 1) ? IODELAY_CTRL : 0;
localparam SIM_DEVICE = FPGA_TECHNOLOGY == SEVEN_SERIES ? "7SERIES" : localparam SIM_DEVICE = FPGA_TECHNOLOGY == SEVEN_SERIES ? "7SERIES" :
FPGA_TECHNOLOGY == ULTRASCALE ? "ULTRASCALE" : FPGA_TECHNOLOGY == ULTRASCALE ? "ULTRASCALE" :
FPGA_TECHNOLOGY == ULTRASCALE_PLUS ? "ULTRASCALE_PLUS" : FPGA_TECHNOLOGY == ULTRASCALE_PLUS ? "ULTRASCALE_PLUS" :
"UNSUPPORTED"; "UNSUPPORTED";
// when ULTRASCALE_PLUS, use ULTRASCALE because IDELAYCTRL is the same for both
// and doesn't know ULTRASCALE_PLUS string
localparam SIM_DEVICE_IDELAYCTRL = FPGA_TECHNOLOGY == SEVEN_SERIES ? "7SERIES" : localparam SIM_DEVICE_IDELAYCTRL = FPGA_TECHNOLOGY == SEVEN_SERIES ? "7SERIES" :
FPGA_TECHNOLOGY == ULTRASCALE ? "ULTRASCALE" : FPGA_TECHNOLOGY == ULTRASCALE ? "ULTRASCALE" :
FPGA_TECHNOLOGY == ULTRASCALE_PLUS ? "ULTRASCALE" : FPGA_TECHNOLOGY == ULTRASCALE_PLUS ? "ULTRASCALE" :
@ -108,7 +108,7 @@ module ad_serdes_in #(
// delay controller // delay controller
generate generate
if (IODELAY_CTRL == 1) begin if (IODELAY_CTRL_ENABLED == 1) begin
(* IODELAY_GROUP = IODELAY_GROUP *) (* IODELAY_GROUP = IODELAY_GROUP *)
IDELAYCTRL #( IDELAYCTRL #(
.SIM_DEVICE(SIM_DEVICE_IDELAYCTRL) .SIM_DEVICE(SIM_DEVICE_IDELAYCTRL)
@ -122,6 +122,9 @@ module ad_serdes_in #(
endgenerate endgenerate
// received data interface: ibuf -> idelay -> iserdes // received data interface: ibuf -> idelay -> iserdes
// ibuf
genvar l_inst; genvar l_inst;
generate generate
for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_io for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_io
@ -138,6 +141,14 @@ module ad_serdes_in #(
end end
endgenerate endgenerate
// bypass IDELAY
generate
if (IODELAY_ENABLE == 0) begin
assign data_in_idelay_s = data_in_ibuf_s;
end
endgenerate
reg [6:0] serdes_rst_seq; reg [6:0] serdes_rst_seq;
wire serdes_rst = serdes_rst_seq [6]; wire serdes_rst = serdes_rst_seq [6];
@ -147,9 +158,12 @@ module ad_serdes_in #(
else serdes_rst_seq [6:0] <= {serdes_rst_seq [5:0], 1'b0}; else serdes_rst_seq [6:0] <= {serdes_rst_seq [5:0], 1'b0};
end end
// idelay + iserdes
generate if (FPGA_TECHNOLOGY == SEVEN_SERIES) begin generate if (FPGA_TECHNOLOGY == SEVEN_SERIES) begin
for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_data for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_data
if (IODELAY_ENABLE == 1) begin
(* IODELAY_GROUP = IODELAY_GROUP *) (* IODELAY_GROUP = IODELAY_GROUP *)
IDELAYE2 #( IDELAYE2 #(
.CINVCTRL_SEL ("FALSE"), .CINVCTRL_SEL ("FALSE"),
@ -173,6 +187,7 @@ module ad_serdes_in #(
.LD (up_dld[l_inst]), .LD (up_dld[l_inst]),
.CNTVALUEIN (up_dwdata[DRP_WIDTH*l_inst +: DRP_WIDTH]), .CNTVALUEIN (up_dwdata[DRP_WIDTH*l_inst +: DRP_WIDTH]),
.CNTVALUEOUT (up_drdata[DRP_WIDTH*l_inst +: DRP_WIDTH])); .CNTVALUEOUT (up_drdata[DRP_WIDTH*l_inst +: DRP_WIDTH]));
end
ISERDESE2 #( ISERDESE2 #(
.DATA_RATE (DATA_RATE), .DATA_RATE (DATA_RATE),
@ -231,6 +246,8 @@ module ad_serdes_in #(
for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_data for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_data
wire div_dld; wire div_dld;
wire en_vtc;
wire ld_cnt;
reg [4:0] vtc_cnt = {5{1'b1}}; reg [4:0] vtc_cnt = {5{1'b1}};
sync_event sync_load ( sync_event sync_load (
@ -239,6 +256,7 @@ module ad_serdes_in #(
.out_clk (div_clk), .out_clk (div_clk),
.out_event (div_dld)); .out_event (div_dld));
if (IODELAY_ENABLE == 1) begin
(* IODELAY_GROUP = IODELAY_GROUP *) (* IODELAY_GROUP = IODELAY_GROUP *)
IDELAYE3 #( IDELAYE3 #(
.CASCADE ("NONE"), // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE) .CASCADE ("NONE"), // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)
@ -267,6 +285,7 @@ module ad_serdes_in #(
.INC (1'b0), // 1-bit input: Increment / Decrement tap delay input .INC (1'b0), // 1-bit input: Increment / Decrement tap delay input
.LOAD (ld_cnt), // 1-bit input: Load DELAY_VALUE input .LOAD (ld_cnt), // 1-bit input: Load DELAY_VALUE input
.RST (rst)); // 1-bit input: Asynchronous Reset to the DELAY_VALUE .RST (rst)); // 1-bit input: Asynchronous Reset to the DELAY_VALUE
end
always @(posedge div_clk) begin always @(posedge div_clk) begin
if (div_dld) begin if (div_dld) begin

View File

@ -50,7 +50,6 @@ module ad_serdes_out #(
input rst, input rst,
input clk, input clk,
input div_clk, input div_clk,
input loaden,
// data interface // data interface
input data_oe, input data_oe,
@ -99,10 +98,14 @@ module ad_serdes_out #(
else serdes_rst_seq [6:0] <= {serdes_rst_seq [5:0], 1'b0}; else serdes_rst_seq [6:0] <= {serdes_rst_seq [5:0], 1'b0};
end end
// transmit data path: oserdes -> obuf
genvar l_inst; genvar l_inst;
generate generate
for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_data for (l_inst = 0; l_inst <= (DATA_WIDTH-1); l_inst = l_inst + 1) begin: g_data
// oserdes
if (FPGA_TECHNOLOGY == SEVEN_SERIES) begin if (FPGA_TECHNOLOGY == SEVEN_SERIES) begin
OSERDESE2 #( OSERDESE2 #(
.DATA_RATE_OQ (DR_OQ_DDR), .DATA_RATE_OQ (DR_OQ_DDR),
@ -161,9 +164,10 @@ module ad_serdes_out #(
.RST (serdes_rst)); .RST (serdes_rst));
end end
if (CMOS_LVDS_N == 0) begin // obuf
OBUFTDS i_obuf ( if (CMOS_LVDS_N == 0) begin
OBUFTDS i_obuftds (
.T (data_t[l_inst]), .T (data_t[l_inst]),
.I (data_out_s[l_inst]), .I (data_out_s[l_inst]),
.O (data_out_p[l_inst]), .O (data_out_p[l_inst]),