From 692cfeae10e699f40c6c272e026c0abeff922332 Mon Sep 17 00:00:00 2001 From: Thomas Gessler Date: Wed, 16 Sep 2020 08:29:44 +0200 Subject: [PATCH] XCKU MGTs: Expose transceiver debug ports This allows the connection of an in-system IBERT core for link debugging in the instantiating layer. --- media_interfaces/med_xcku_sfp_sync_4.vhd | 32 +++++++- .../gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xci | 57 ++++++++------- .../gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xml | 73 +++++++++++-------- .../gth_xcku_quad_x0y2_top.vhd | 43 ++++++++++- 4 files changed, 144 insertions(+), 61 deletions(-) diff --git a/media_interfaces/med_xcku_sfp_sync_4.vhd b/media_interfaces/med_xcku_sfp_sync_4.vhd index 7587987..11dedfc 100644 --- a/media_interfaces/med_xcku_sfp_sync_4.vhd +++ b/media_interfaces/med_xcku_sfp_sync_4.vhd @@ -50,7 +50,22 @@ entity med_xcku_sfp_sync_4 is BUS_TX : out CTRLBUS_TX; STAT_DEBUG : out std_logic_vector (63 downto 0); - CTRL_DEBUG : in std_logic_vector (63 downto 0) := (others => '0') + CTRL_DEBUG : in std_logic_vector (63 downto 0) := (others => '0'); + + DRPADDR : in std_logic_vector(35 downto 0) := (others => '0'); + DRPCLK : in std_logic_vector(3 downto 0) := (others => '0'); + DRPDI : in std_logic_vector(63 downto 0) := (others => '0'); + DRPEN : in std_logic_vector(3 downto 0) := (others => '0'); + DRPWE : in std_logic_vector(3 downto 0) := (others => '0'); + DRPDO : out std_logic_vector(63 downto 0); + DRPRDY : out std_logic_vector(3 downto 0); + + EYESCANRESET : in std_logic_vector(3 downto 0) := (others => '0'); + RXLPMEN : in std_logic_vector(3 downto 0) := (others => '0'); + RXRATE : in std_logic_vector(11 downto 0) := (others => '0'); + TXDIFFCTRL : in std_logic_vector(15 downto 0) := b"1100_1100_1100_1100"; + TXPOSTCURSOR : in std_logic_vector(19 downto 0) := (others => '0'); + TXPRECURSOR : in std_logic_vector(19 downto 0) := (others => '0') ); end entity; @@ -119,7 +134,20 @@ begin RXCHARISK => rxcharisk, RXCHARISCOMMA => open, RXNOTINTABLE => rxnotintable, - RXDISPERR => open + RXDISPERR => open, + DRPADDR => DRPADDR, + DRPCLK => DRPCLK, + DRPDI => DRPDI, + DRPEN => DRPEN, + DRPWE => DRPWE, + DRPDO => DRPDO, + DRPRDY => DRPRDY, + EYESCANRESET => EYESCANRESET, + RXLPMEN => RXLPMEN, + RXRATE => RXRATE, + TXDIFFCTRL => TXDIFFCTRL, + TXPOSTCURSOR => TXPOSTCURSOR, + TXPRECURSOR => TXPRECURSOR ); tx_lol <= not txpmaresetdone_i(0); diff --git a/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xci b/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xci index eb0b642..6e79fe7 100644 --- a/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xci +++ b/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xci @@ -19,7 +19,7 @@ 0 2 0 - 2 + 1 0 0 1 @@ -147,20 +147,20 @@ -1 0 0 - 0 + 1 0 0 0 - 0 + 1 0 - 0 + 1 0 - 0 + 1 0 - 0 + 1 -1 0 - 0 + 1 -1 -1 0 @@ -171,7 +171,7 @@ 0 0 0 - 0 + 1 0 -1 0 @@ -432,7 +432,7 @@ -1 -1 -1 - 0 + 1 0 0 0 @@ -487,7 +487,7 @@ 0 0 0 - 0 + 1 -1 0 -1 @@ -552,7 +552,7 @@ -1 0 0 - 0 + 1 0 0 0 @@ -601,11 +601,11 @@ 0 0 0 - 0 + 1 0 0 0 - 0 + 1 0 -1 0 @@ -651,7 +651,7 @@ -1 -1 -1 - 16 + 17 0 None 8 @@ -659,9 +659,9 @@ 4 1 100.0000000 - false + true CORE - NONE + EXAMPLE_DESIGN CORE CORE EXAMPLE_DESIGN @@ -850,19 +850,19 @@ false false false - false + true false false - false + true false - false + true false - false + true false - false + true false false - false + true false false false @@ -873,7 +873,7 @@ false false false - false + true false false false @@ -1134,7 +1134,7 @@ false false false - false + true false false false @@ -1187,7 +1187,7 @@ false false false - false + true false false false @@ -1254,7 +1254,7 @@ false false false - false + true false false false @@ -1302,11 +1302,11 @@ true true false - false + true false false false - false + true false false false @@ -1381,6 +1381,7 @@ + diff --git a/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xml b/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xml index 84a1b6a..26f5a0c 100644 --- a/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xml +++ b/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2.xml @@ -14,7 +14,7 @@ outputProductCRC - 9:95340453 + 9:fde239e5 @@ -4614,7 +4614,8 @@ - false + required + true @@ -4640,7 +4641,7 @@ - false + true @@ -4666,7 +4667,8 @@ - false + required + true @@ -4692,7 +4694,8 @@ - false + required + true @@ -4745,7 +4748,8 @@ - false + required + true @@ -5007,7 +5011,8 @@ - false + required + true @@ -7951,7 +7956,8 @@ - false + required + true @@ -8916,7 +8922,8 @@ - false + required + true @@ -9707,7 +9714,8 @@ - false + required + true @@ -10780,7 +10788,8 @@ - false + required + true @@ -10884,7 +10893,8 @@ - false + required + true @@ -11591,7 +11601,8 @@ - false + required + true @@ -11617,7 +11628,8 @@ - false + required + true @@ -14162,7 +14174,7 @@ C_LOCATE_IN_SYSTEM_IBERT_CORE - 2 + 1 C_LOCATE_RX_USER_CLOCKING @@ -16576,7 +16588,7 @@ LOCATE_IN_SYSTEM_IBERT_CORE Include In-System IBERT core Indicate whether or not the In-System IBERT core should be instantiated in the example design. - NONE + EXAMPLE_DESIGN LOCATE_TX_USER_CLOCKING @@ -16626,7 +16638,7 @@ INTERNAL_PORT_ENABLEMENT_UPDATED - 16 + 17 @@ -16670,7 +16682,7 @@ INTERNAL_UPDATE_IP_SYMBOL_drpclk_in - false + true @@ -18699,7 +18711,7 @@ INTERNAL_PORT_ENABLED_DRPADDR_IN - 0 + 1 @@ -18721,7 +18733,7 @@ INTERNAL_PORT_ENABLED_DRPDI_IN - 0 + 1 @@ -18732,7 +18744,7 @@ INTERNAL_PORT_ENABLED_DRPEN_IN - 0 + 1 @@ -18754,7 +18766,7 @@ INTERNAL_PORT_ENABLED_DRPWE_IN - 0 + 1 @@ -18864,7 +18876,7 @@ INTERNAL_PORT_ENABLED_EYESCANRESET_IN - 0 + 1 @@ -20096,7 +20108,7 @@ INTERNAL_PORT_ENABLED_RXLPMEN_IN - 0 + 1 @@ -20503,7 +20515,7 @@ INTERNAL_PORT_ENABLED_RXRATE_IN - 0 + 1 @@ -20833,7 +20845,7 @@ INTERNAL_PORT_ENABLED_TXDIFFCTRL_IN - 0 + 1 @@ -21284,7 +21296,7 @@ INTERNAL_PORT_ENABLED_TXPOSTCURSOR_IN - 0 + 1 @@ -21328,7 +21340,7 @@ INTERNAL_PORT_ENABLED_TXPRECURSOR_IN - 0 + 1 @@ -21625,7 +21637,7 @@ INTERNAL_PORT_ENABLED_DRPDO_OUT - 0 + 1 @@ -21636,7 +21648,7 @@ INTERNAL_PORT_ENABLED_DRPRDY_OUT - 0 + 1 @@ -22692,6 +22704,7 @@ + diff --git a/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2_top.vhd b/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2_top.vhd index e3b5e91..ca8cc66 100644 --- a/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2_top.vhd +++ b/media_interfaces/xcku/gth_xcku_quad_x0y2/gth_xcku_quad_x0y2_top.vhd @@ -44,7 +44,22 @@ entity gth_xcku_quad_x0y2_top is RXCHARISK : out std_logic_vector(3 downto 0); RXCHARISCOMMA : out std_logic_vector(3 downto 0); RXNOTINTABLE : out std_logic_vector(3 downto 0); - RXDISPERR : out std_logic_vector(3 downto 0) + RXDISPERR : out std_logic_vector(3 downto 0); + + DRPADDR : in std_logic_vector(35 downto 0); + DRPCLK : in std_logic_vector(3 downto 0); + DRPDI : in std_logic_vector(63 downto 0); + DRPEN : in std_logic_vector(3 downto 0); + DRPWE : in std_logic_vector(3 downto 0); + DRPDO : out std_logic_vector(63 downto 0); + DRPRDY : out std_logic_vector(3 downto 0); + + EYESCANRESET : in std_logic_vector(3 downto 0); + RXLPMEN : in std_logic_vector(3 downto 0); + RXRATE : in std_logic_vector(11 downto 0); + TXDIFFCTRL : in std_logic_vector(15 downto 0); + TXPOSTCURSOR : in std_logic_vector(19 downto 0); + TXPRECURSOR : in std_logic_vector(19 downto 0) ); end entity gth_xcku_quad_x0y2_top; @@ -86,26 +101,39 @@ architecture behavioral of gth_xcku_quad_x0y2_top is gtrefclk00_in : in std_logic_vector(0 downto 0); qpll0outclk_out : out std_logic_vector(0 downto 0); qpll0outrefclk_out : out std_logic_vector(0 downto 0); + drpaddr_in : in std_logic_vector(35 downto 0); + drpclk_in : in std_logic_vector(3 downto 0); + drpdi_in : in std_logic_vector(63 downto 0); + drpen_in : in std_logic_vector(3 downto 0); + drpwe_in : in std_logic_vector(3 downto 0); + eyescanreset_in : in std_logic_vector(3 downto 0); gthrxn_in : in std_logic_vector(3 downto 0); gthrxp_in : in std_logic_vector(3 downto 0); rx8b10ben_in : in std_logic_vector(3 downto 0); rxbufreset_in : in std_logic_vector(3 downto 0); rxcdrreset_in : in std_logic_vector(3 downto 0); rxcommadeten_in : in std_logic_vector(3 downto 0); + rxlpmen_in : in std_logic_vector(3 downto 0); rxmcommaalignen_in : in std_logic_vector(3 downto 0); rxpcommaalignen_in : in std_logic_vector(3 downto 0); rxpcsreset_in : in std_logic_vector(3 downto 0); rxpmareset_in : in std_logic_vector(3 downto 0); + rxrate_in : in std_logic_vector(11 downto 0); rxusrclk_in : in std_logic_vector(3 downto 0); rxusrclk2_in : in std_logic_vector(3 downto 0); tx8b10ben_in : in std_logic_vector(3 downto 0); txctrl0_in : in std_logic_vector(63 downto 0); txctrl1_in : in std_logic_vector(63 downto 0); txctrl2_in : in std_logic_vector(31 downto 0); + txdiffctrl_in : in std_logic_vector(15 downto 0); txpcsreset_in : in std_logic_vector(3 downto 0); txpmareset_in : in std_logic_vector(3 downto 0); + txpostcursor_in : in std_logic_vector(19 downto 0); + txprecursor_in : in std_logic_vector(19 downto 0); txusrclk_in : in std_logic_vector(3 downto 0); txusrclk2_in : in std_logic_vector(3 downto 0); + drpdo_out : out std_logic_vector(63 downto 0); + drprdy_out : out std_logic_vector(3 downto 0); gthtxn_out : out std_logic_vector(3 downto 0); gthtxp_out : out std_logic_vector(3 downto 0); gtpowergood_out : out std_logic_vector(3 downto 0); @@ -270,16 +298,24 @@ begin gtrefclk00_in(0) => GTREFCLK, qpll0outclk_out => open, qpll0outrefclk_out => open, + drpaddr_in => DRPADDR, + drpclk_in => DRPCLK, + drpdi_in => DRPDI, + drpen_in => DRPEN, + drpwe_in => DRPWE, + eyescanreset_in => EYESCANRESET, gthrxn_in => RXN, gthrxp_in => RXP, rx8b10ben_in => "1111", rxbufreset_in => "0000", rxcdrreset_in => "0000", rxcommadeten_in => "1111", + rxlpmen_in => RXLPMEN, rxmcommaalignen_in => "1111", rxpcommaalignen_in => "1111", rxpcsreset_in => RXPCSRESET, rxpmareset_in => RXPMARESET, + rxrate_in => RXRATE, rxusrclk_in(0) => RXUSRCLK(0), rxusrclk_in(1) => RXUSRCLK(1), rxusrclk_in(2) => RXUSRCLK(2), @@ -292,8 +328,11 @@ begin txctrl0_in => txctrl0, txctrl1_in => txctrl1, txctrl2_in => txctrl2, + txdiffctrl_in => TXDIFFCTRL, txpcsreset_in => TXPCSRESET, txpmareset_in => TXPMARESET, + txpostcursor_in => TXPOSTCURSOR, + txprecursor_in => TXPRECURSOR, txusrclk_in(0) => TXUSRCLK(0), txusrclk_in(1) => TXUSRCLK(1), txusrclk_in(2) => TXUSRCLK(2), @@ -302,6 +341,8 @@ begin txusrclk2_in(1) => TXUSRCLK(1), txusrclk2_in(2) => TXUSRCLK(2), txusrclk2_in(3) => TXUSRCLK(3), + drpdo_out => DRPDO, + drprdy_out => DRPRDY, gthtxn_out => TXN, gthtxp_out => TXP, gtpowergood_out => open, -- 2.43.0