Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
combpm_gtsfp_htgfmc2qsfp.vhd 40.69 KiB

library ieee;
use ieee.std_logic_1164.all;

library UNISIM;
use UNISIM.vcomponents.all;

entity combpm_gtsfp_htgfmc2qsfp is
    port(
        -- 100MHz clock, main ref clock
        clk_100                                : in std_logic;

        -- User clock provided by GT
        usrclk                                 : out std_logic;

        -- Async reset active low
        rst_n                                  : in std_logic;

        -- Differential reference clock inputs
        mgtrefclk_p                            : in std_logic;
        mgtrefclk_n                            : in std_logic;

        -- QSFP01 interface
        qsfp01_tx1n                            : out std_logic;
        qsfp01_tx1p                            : out std_logic;
        qsfp01_rx1n                            : in std_logic;
        qsfp01_rx1p                            : in std_logic;
        qsfp01_tx2n                            : out std_logic;
        qsfp01_tx2p                            : out std_logic;
        qsfp01_rx2n                            : in std_logic;
        qsfp01_rx2p                            : in std_logic;
        qsfp01_tx3n                            : out std_logic;
        qsfp01_tx3p                            : out std_logic;
        qsfp01_rx3n                            : in std_logic;
        qsfp01_rx3p                            : in std_logic;
        qsfp01_tx4n                            : out std_logic;
        qsfp01_tx4p                            : out std_logic;
        qsfp01_rx4n                            : in std_logic;
        qsfp01_rx4p                            : in std_logic;
        qsfp01_modprsl                         : in std_logic;
        qsfp01_resetn                          : out std_logic;
        qsfp01_intl                            : in std_logic;

        -- QSFP02 interface
        qsfp02_tx1n                            : out std_logic;
        qsfp02_tx1p                            : out std_logic;
        qsfp02_rx1n                            : in std_logic;
        qsfp02_rx1p                            : in std_logic;
        qsfp02_tx2n                            : out std_logic;
        qsfp02_tx2p                            : out std_logic;
        qsfp02_rx2n                            : in std_logic;
        qsfp02_rx2p                            : in std_logic;
        qsfp02_tx3n                            : out std_logic;
        qsfp02_tx3p                            : out std_logic;
        qsfp02_rx3n                            : in std_logic;
        qsfp02_rx3p                            : in std_logic;
        qsfp02_tx4n                            : out std_logic;
        qsfp02_tx4p                            : out std_logic;
        qsfp02_rx4n                            : in std_logic;
        qsfp02_rx4p                            : in std_logic;
        qsfp02_modprsl                         : in std_logic;
        qsfp02_resetn                          : out std_logic;
        qsfp02_intl                            : in std_logic;

        -- GT01 interface
        gt01_datarx                            : out std_logic_vector(15 downto 0);
        gt01_datatx                            : in std_logic_vector(15 downto 0);
        gt01_powergood                         : out std_logic;
        gt01_qplllock                          : out std_logic;
        gt01_txclkactive                       : out std_logic;
        gt01_rxclkactive                       : out std_logic;
        gt01_txresetdone                       : out std_logic;
        gt01_rxresetdone                       : out std_logic;
        gt01_rxcdrlock                         : out std_logic;
        gt01_rxbyteisaligned                   : out std_logic;
        gt01_rxbyterealign                     : out std_logic;
        gt01_rxcommadet                        : out std_logic;
        gt01_txfault                           : out std_logic;
        gt01_rxlos                             : out std_logic;
        gt01_modabs                            : out std_logic;
        gt01_rstall                            : in std_logic;
        gt01_rxcommadeten                      : in std_logic;
        gt01_txdisable                         : in std_logic;

        -- GT02 interface
        gt02_datarx                            : out std_logic_vector(15 downto 0);
        gt02_datatx                            : in std_logic_vector(15 downto 0);
        gt02_powergood                         : out std_logic;
        gt02_qplllock                          : out std_logic;
        gt02_txclkactive                       : out std_logic;
        gt02_rxclkactive                       : out std_logic;
        gt02_txresetdone                       : out std_logic;
        gt02_rxresetdone                       : out std_logic;
        gt02_rxcdrlock                         : out std_logic;
        gt02_rxbyteisaligned                   : out std_logic;
        gt02_rxbyterealign                     : out std_logic;
        gt02_rxcommadet                        : out std_logic;
        gt02_txfault                           : out std_logic;
        gt02_rxlos                             : out std_logic;
        gt02_modabs                            : out std_logic;
        gt02_rstall                            : in std_logic;
        gt02_rxcommadeten                      : in std_logic;
        gt02_txdisable                         : in std_logic;

        -- GT03 interface
        gt03_datarx                            : out std_logic_vector(15 downto 0);
        gt03_datatx                            : in std_logic_vector(15 downto 0);
        gt03_powergood                         : out std_logic;
        gt03_qplllock                          : out std_logic;
        gt03_txclkactive                       : out std_logic;
        gt03_rxclkactive                       : out std_logic;
        gt03_txresetdone                       : out std_logic;
        gt03_rxresetdone                       : out std_logic;
        gt03_rxcdrlock                         : out std_logic;
        gt03_rxbyteisaligned                   : out std_logic;
        gt03_rxbyterealign                     : out std_logic;
        gt03_rxcommadet                        : out std_logic;
        gt03_txfault                           : out std_logic;
        gt03_rxlos                             : out std_logic;
        gt03_modabs                            : out std_logic;
        gt03_rstall                            : in std_logic;
        gt03_rxcommadeten                      : in std_logic;
        gt03_txdisable                         : in std_logic;

        -- GT04 interface
        gt04_datarx                            : out std_logic_vector(15 downto 0);
        gt04_datatx                            : in std_logic_vector(15 downto 0);
        gt04_powergood                         : out std_logic;
        gt04_qplllock                          : out std_logic;
        gt04_txclkactive                       : out std_logic;
        gt04_rxclkactive                       : out std_logic;
        gt04_txresetdone                       : out std_logic;
        gt04_rxresetdone                       : out std_logic;
        gt04_rxcdrlock                         : out std_logic;
        gt04_rxbyteisaligned                   : out std_logic;
        gt04_rxbyterealign                     : out std_logic;
        gt04_rxcommadet                        : out std_logic;
        gt04_txfault                           : out std_logic;
        gt04_rxlos                             : out std_logic;
        gt04_modabs                            : out std_logic;
        gt04_rstall                            : in std_logic;
        gt04_rxcommadeten                      : in std_logic;
        gt04_txdisable                         : in std_logic;

        -- GT05 interface
        gt05_datarx                            : out std_logic_vector(15 downto 0);
        gt05_datatx                            : in std_logic_vector(15 downto 0);
        gt05_powergood                         : out std_logic;
        gt05_qplllock                          : out std_logic;
        gt05_txclkactive                       : out std_logic;
        gt05_rxclkactive                       : out std_logic;
        gt05_txresetdone                       : out std_logic;
        gt05_rxresetdone                       : out std_logic;
        gt05_rxcdrlock                         : out std_logic;
        gt05_rxbyteisaligned                   : out std_logic;
        gt05_rxbyterealign                     : out std_logic;
        gt05_rxcommadet                        : out std_logic;
        gt05_txfault                           : out std_logic;
        gt05_rxlos                             : out std_logic;
        gt05_modabs                            : out std_logic;
        gt05_rstall                            : in std_logic;
        gt05_rxcommadeten                      : in std_logic;
        gt05_txdisable                         : in std_logic;

        -- GT06 interface
        gt06_datarx                            : out std_logic_vector(15 downto 0);
        gt06_datatx                            : in std_logic_vector(15 downto 0);
        gt06_powergood                         : out std_logic;
        gt06_qplllock                          : out std_logic;
        gt06_txclkactive                       : out std_logic;
        gt06_rxclkactive                       : out std_logic;
        gt06_txresetdone                       : out std_logic;
        gt06_rxresetdone                       : out std_logic;
        gt06_rxcdrlock                         : out std_logic;
        gt06_rxbyteisaligned                   : out std_logic;
        gt06_rxbyterealign                     : out std_logic;
        gt06_rxcommadet                        : out std_logic;
        gt06_txfault                           : out std_logic;
        gt06_rxlos                             : out std_logic;
        gt06_modabs                            : out std_logic;
        gt06_rstall                            : in std_logic;
        gt06_rxcommadeten                      : in std_logic;
        gt06_txdisable                         : in std_logic;

        -- GT07 interface
        gt07_datarx                            : out std_logic_vector(15 downto 0);
        gt07_datatx                            : in std_logic_vector(15 downto 0);
        gt07_powergood                         : out std_logic;
        gt07_qplllock                          : out std_logic;
        gt07_txclkactive                       : out std_logic;
        gt07_rxclkactive                       : out std_logic;
        gt07_txresetdone                       : out std_logic;
        gt07_rxresetdone                       : out std_logic;
        gt07_rxcdrlock                         : out std_logic;
        gt07_rxbyteisaligned                   : out std_logic;
        gt07_rxbyterealign                     : out std_logic;
        gt07_rxcommadet                        : out std_logic;
        gt07_txfault                           : out std_logic;
        gt07_rxlos                             : out std_logic;
        gt07_modabs                            : out std_logic;
        gt07_rstall                            : in std_logic;
        gt07_rxcommadeten                      : in std_logic;
        gt07_txdisable                         : in std_logic;

        -- GT08 interface
        gt08_datarx                            : out std_logic_vector(15 downto 0);
        gt08_datatx                            : in std_logic_vector(15 downto 0);
        gt08_powergood                         : out std_logic;
        gt08_qplllock                          : out std_logic;
        gt08_txclkactive                       : out std_logic;
        gt08_rxclkactive                       : out std_logic;
        gt08_txresetdone                       : out std_logic;
        gt08_rxresetdone                       : out std_logic;
        gt08_rxcdrlock                         : out std_logic;
        gt08_rxbyteisaligned                   : out std_logic;
        gt08_rxbyterealign                     : out std_logic;
        gt08_rxcommadet                        : out std_logic;
        gt08_txfault                           : out std_logic;
        gt08_rxlos                             : out std_logic;
        gt08_modabs                            : out std_logic;
        gt08_rstall                            : in std_logic;
        gt08_rxcommadeten                      : in std_logic;
        gt08_txdisable                         : in std_logic

    );
end combpm_gtsfp_htgfmc2qsfp;


architecture rtl of combpm_gtsfp_htgfmc2qsfp is

    --------------------------------
    -- INTERFACE PORT ASSOCIATION --
    --------------------------------
    ATTRIBUTE X_INTERFACE_INFO                         : STRING;
    ATTRIBUTE X_INTERFACE_PARAMETER                    : STRING;

    ATTRIBUTE X_INTERFACE_INFO of clk_100              :  SIGNAL is "xilinx.com:signal:clock:1.0 clk_100 CLK";
    ATTRIBUTE X_INTERFACE_PARAMETER of clk_100         :  SIGNAL is "FREQ 100000000";
    ATTRIBUTE X_INTERFACE_INFO of rst_n                :  SIGNAL is "xilinx.com:signal:reset:1.0 rst_n RST";
    ATTRIBUTE X_INTERFACE_PARAMETER of rst_n           :  SIGNAL is "POLARITY ACTIVE_LOW";

    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx1n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx1n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx1p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx1p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx1n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx1n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx1p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx1p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx2n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx2n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx2p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx2p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx2n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx2n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx2p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx2p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx3n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx3n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx3p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx3p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx3n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx3n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx3p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx3p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx4n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx4n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_tx4p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_tx4p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx4n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx4n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_rx4p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_rx4p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_modprsl       : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_modprsl";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_resetn        : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_resetn";
    ATTRIBUTE X_INTERFACE_INFO of qsfp02_intl          : SIGNAL is "soleil:user:qsfp:1.0 QSFP02 qsfp02_intl";

    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx1n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx1n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx1p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx1p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx1n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx1n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx1p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx1p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx2n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx2n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx2p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx2p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx2n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx2n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx2p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx2p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx3n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx3n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx3p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx3p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx3n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx3n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx3p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx3p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx4n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx4n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_tx4p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_tx4p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx4n          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx4n";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_rx4p          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_rx4p";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_modprsl       : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_modprsl";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_resetn        : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_resetn";
    ATTRIBUTE X_INTERFACE_INFO of qsfp01_intl          : SIGNAL is "soleil:user:qsfp:1.0 QSFP01 qsfp01_intl";

    ATTRIBUTE X_INTERFACE_INFO of gt01_datarx          : SIGNAL is "soleil:user:gtsfp:1.0 GT01 datarx";
    ATTRIBUTE X_INTERFACE_INFO of gt01_datatx          : SIGNAL is "soleil:user:gtsfp:1.0 GT01 datatx";
    ATTRIBUTE X_INTERFACE_INFO of gt01_powergood       : SIGNAL is "soleil:user:gtsfp:1.0 GT01 powergood";
    ATTRIBUTE X_INTERFACE_INFO of gt01_qplllock        : SIGNAL is "soleil:user:gtsfp:1.0 GT01 qplllock";
    ATTRIBUTE X_INTERFACE_INFO of gt01_txclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT01 txclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt01_txresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT01 txresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxcdrlock       : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxcdrlock";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxbyteisaligned : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxbyteisaligned";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxbyterealign   : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxbyterealign";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxcommadet      : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxcommadet";
    ATTRIBUTE X_INTERFACE_INFO of gt01_txfault         : SIGNAL is "soleil:user:gtsfp:1.0 GT01 txfault";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxlos           : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxlos";
    ATTRIBUTE X_INTERFACE_INFO of gt01_modabs          : SIGNAL is "soleil:user:gtsfp:1.0 GT01 modabs";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rstall          : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rstall";
    ATTRIBUTE X_INTERFACE_INFO of gt01_rxcommadeten    : SIGNAL is "soleil:user:gtsfp:1.0 GT01 rxcommadeten";
    ATTRIBUTE X_INTERFACE_INFO of gt01_txdisable       : SIGNAL is "soleil:user:gtsfp:1.0 GT01 txdisable";

    ATTRIBUTE X_INTERFACE_INFO of gt02_datarx          : SIGNAL is "soleil:user:gtsfp:1.0 GT02 datarx";
    ATTRIBUTE X_INTERFACE_INFO of gt02_datatx          : SIGNAL is "soleil:user:gtsfp:1.0 GT02 datatx";
    ATTRIBUTE X_INTERFACE_INFO of gt02_powergood       : SIGNAL is "soleil:user:gtsfp:1.0 GT02 powergood";
    ATTRIBUTE X_INTERFACE_INFO of gt02_qplllock        : SIGNAL is "soleil:user:gtsfp:1.0 GT02 qplllock";
    ATTRIBUTE X_INTERFACE_INFO of gt02_txclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT02 txclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt02_txresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT02 txresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxcdrlock       : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxcdrlock";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxbyteisaligned : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxbyteisaligned";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxbyterealign   : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxbyterealign";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxcommadet      : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxcommadet";
    ATTRIBUTE X_INTERFACE_INFO of gt02_txfault         : SIGNAL is "soleil:user:gtsfp:1.0 GT02 txfault";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxlos           : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxlos";
    ATTRIBUTE X_INTERFACE_INFO of gt02_modabs          : SIGNAL is "soleil:user:gtsfp:1.0 GT02 modabs";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rstall          : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rstall";
    ATTRIBUTE X_INTERFACE_INFO of gt02_rxcommadeten    : SIGNAL is "soleil:user:gtsfp:1.0 GT02 rxcommadeten";
    ATTRIBUTE X_INTERFACE_INFO of gt02_txdisable       : SIGNAL is "soleil:user:gtsfp:1.0 GT02 txdisable";

    ATTRIBUTE X_INTERFACE_INFO of gt03_datarx          : SIGNAL is "soleil:user:gtsfp:1.0 GT03 datarx";
    ATTRIBUTE X_INTERFACE_INFO of gt03_datatx          : SIGNAL is "soleil:user:gtsfp:1.0 GT03 datatx";
    ATTRIBUTE X_INTERFACE_INFO of gt03_powergood       : SIGNAL is "soleil:user:gtsfp:1.0 GT03 powergood";
    ATTRIBUTE X_INTERFACE_INFO of gt03_qplllock        : SIGNAL is "soleil:user:gtsfp:1.0 GT03 qplllock";
    ATTRIBUTE X_INTERFACE_INFO of gt03_txclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT03 txclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt03_txresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT03 txresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxcdrlock       : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxcdrlock";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxbyteisaligned : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxbyteisaligned";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxbyterealign   : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxbyterealign";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxcommadet      : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxcommadet";
    ATTRIBUTE X_INTERFACE_INFO of gt03_txfault         : SIGNAL is "soleil:user:gtsfp:1.0 GT03 txfault";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxlos           : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxlos";
    ATTRIBUTE X_INTERFACE_INFO of gt03_modabs          : SIGNAL is "soleil:user:gtsfp:1.0 GT03 modabs";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rstall          : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rstall";
    ATTRIBUTE X_INTERFACE_INFO of gt03_rxcommadeten    : SIGNAL is "soleil:user:gtsfp:1.0 GT03 rxcommadeten";
    ATTRIBUTE X_INTERFACE_INFO of gt03_txdisable       : SIGNAL is "soleil:user:gtsfp:1.0 GT03 txdisable";

    ATTRIBUTE X_INTERFACE_INFO of gt04_datarx          : SIGNAL is "soleil:user:gtsfp:1.0 GT04 datarx";
    ATTRIBUTE X_INTERFACE_INFO of gt04_datatx          : SIGNAL is "soleil:user:gtsfp:1.0 GT04 datatx";
    ATTRIBUTE X_INTERFACE_INFO of gt04_powergood       : SIGNAL is "soleil:user:gtsfp:1.0 GT04 powergood";
    ATTRIBUTE X_INTERFACE_INFO of gt04_qplllock        : SIGNAL is "soleil:user:gtsfp:1.0 GT04 qplllock";
    ATTRIBUTE X_INTERFACE_INFO of gt04_txclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT04 txclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxclkactive     : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxclkactive";
    ATTRIBUTE X_INTERFACE_INFO of gt04_txresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT04 txresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxresetdone     : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxresetdone";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxcdrlock       : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxcdrlock";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxbyteisaligned : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxbyteisaligned";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxbyterealign   : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxbyterealign";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxcommadet      : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxcommadet";
    ATTRIBUTE X_INTERFACE_INFO of gt04_txfault         : SIGNAL is "soleil:user:gtsfp:1.0 GT04 txfault";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxlos           : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxlos";
    ATTRIBUTE X_INTERFACE_INFO of gt04_modabs          : SIGNAL is "soleil:user:gtsfp:1.0 GT04 modabs";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rstall          : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rstall";
    ATTRIBUTE X_INTERFACE_INFO of gt04_rxcommadeten    : SIGNAL is "soleil:user:gtsfp:1.0 GT04 rxcommadeten";
    ATTRIBUTE X_INTERFACE_INFO of gt04_txdisable       : SIGNAL is "soleil:user:gtsfp:1.0 GT04 txdisable";


    ---------------------------
    -- COMPONENT DECLARATION --
    ---------------------------
    COMPONENT gtwizard_ultrascale_htgfmc2qsfp
    PORT (
        gtwiz_userclk_tx_reset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_tx_srcclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_tx_usrclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_tx_usrclk2_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_tx_active_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_rx_reset_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_rx_srcclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_rx_usrclk_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_rx_usrclk2_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userclk_rx_active_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_clk_freerun_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_all_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_tx_pll_and_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_tx_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_rx_pll_and_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_rx_datapath_in : IN STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_rx_cdr_stable_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_tx_done_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_reset_rx_done_out : OUT STD_LOGIC_VECTOR(0 DOWNTO 0);
        gtwiz_userdata_tx_in : IN STD_LOGIC_VECTOR(127 DOWNTO 0);
        gtwiz_userdata_rx_out : OUT STD_LOGIC_VECTOR(127 DOWNTO 0);
        gtrefclk01_in : IN STD_LOGIC_VECTOR(1 DOWNTO 0);
        qpll1lock_out : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
        qpll1outclk_out : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
        qpll1outrefclk_out : OUT STD_LOGIC_VECTOR(1 DOWNTO 0);
        gtyrxn_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        gtyrxp_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        rx8b10ben_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxbufreset_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxcommadeten_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxmcommaalignen_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxpcommaalignen_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        tx8b10ben_in : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        txctrl0_in : IN STD_LOGIC_VECTOR(127 DOWNTO 0);
        txctrl1_in : IN STD_LOGIC_VECTOR(127 DOWNTO 0);
        txctrl2_in : IN STD_LOGIC_VECTOR(63 DOWNTO 0);
        gtpowergood_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        gtytxn_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        gtytxp_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxbufstatus_out : OUT STD_LOGIC_VECTOR(23 DOWNTO 0);
        rxbyteisaligned_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxbyterealign_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxcdrlock_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxclkcorcnt_out : OUT STD_LOGIC_VECTOR(15 DOWNTO 0);
        rxcommadet_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        rxctrl0_out : OUT STD_LOGIC_VECTOR(127 DOWNTO 0);
        rxctrl1_out : OUT STD_LOGIC_VECTOR(127 DOWNTO 0);
        rxctrl2_out : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
        rxctrl3_out : OUT STD_LOGIC_VECTOR(63 DOWNTO 0);
        rxpmaresetdone_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
        txpmaresetdone_out : OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
      );
    END COMPONENT;

    ------------------------
    -- SIGNAL DECLARATION --
    ------------------------
    signal txclkactive      : std_logic;
    signal rxclkactive      : std_logic;
    signal rstall           : std_logic;
    signal txresetdone      : std_logic;
    signal rxresetdone      : std_logic;
    signal qplllock         : std_logic_vector(1 downto 0);
    signal ref_clk          : std_logic;


begin

    ---------------------
    -- DIFF CLK BUFFER --
    ---------------------
    ibufd_clkref_inst: IBUFDS_GTE4
    generic map (
        REFCLK_EN_TX_PATH          => '0',
        REFCLK_HROW_CK_SEL         => "00",
        REFCLK_ICNTL_RX            => "00"
    )
    port map (
        O                          => ref_clk,
        ODIV2                      => open,
        CEB                        => '0',
        I                          => mgtrefclk_p,
        IB                         => mgtrefclk_n
    );


    --------------------
    -- GLOBAL SIGNALS --
    --------------------
    gt01_txclkactive    <= txclkactive;
    gt02_txclkactive    <= txclkactive;
    gt03_txclkactive    <= txclkactive;
    gt04_txclkactive    <= txclkactive;
    gt05_txclkactive    <= txclkactive;
    gt06_txclkactive    <= txclkactive;
    gt07_txclkactive    <= txclkactive;
    gt08_txclkactive    <= txclkactive;

    gt01_rxclkactive    <= rxclkactive;
    gt02_rxclkactive    <= rxclkactive;
    gt03_rxclkactive    <= rxclkactive;
    gt04_rxclkactive    <= rxclkactive;
    gt05_rxclkactive    <= rxclkactive;
    gt06_rxclkactive    <= rxclkactive;
    gt07_rxclkactive    <= rxclkactive;
    gt08_rxclkactive    <= rxclkactive;

    rstall              <= gt01_rstall
                           or gt02_rstall
                           or gt03_rstall
                           or gt04_rstall
                           or gt05_rstall
                           or gt06_rstall
                           or gt07_rstall
                           or gt08_rstall;

    gt01_txresetdone    <= txresetdone;
    gt02_txresetdone    <= txresetdone;
    gt03_txresetdone    <= txresetdone;
    gt04_txresetdone    <= txresetdone;
    gt05_txresetdone    <= txresetdone;
    gt06_txresetdone    <= txresetdone;
    gt07_txresetdone    <= txresetdone;
    gt08_txresetdone    <= txresetdone;

    gt01_rxresetdone    <= rxresetdone;
    gt02_rxresetdone    <= rxresetdone;
    gt03_rxresetdone    <= rxresetdone;
    gt04_rxresetdone    <= rxresetdone;
    gt05_rxresetdone    <= rxresetdone;
    gt06_rxresetdone    <= rxresetdone;
    gt07_rxresetdone    <= rxresetdone;
    gt08_rxresetdone    <= rxresetdone;

    gt01_qplllock      <= qplllock(0);
    gt02_qplllock      <= qplllock(0);
    gt03_qplllock      <= qplllock(0);
    gt04_qplllock      <= qplllock(0);
    gt05_qplllock      <= qplllock(1);
    gt06_qplllock      <= qplllock(1);
    gt07_qplllock      <= qplllock(1);
    gt08_qplllock      <= qplllock(1);


    --------------------------
    -- TRANSCEIVER INSTANCE --
    --------------------------
    gtwiz_inst: gtwizard_ultrascale_htgfmc2qsfp
    PORT MAP (
        gtwiz_userclk_tx_reset_in             => "0",
        gtwiz_userclk_tx_srcclk_out           => open,
        gtwiz_userclk_tx_usrclk_out           => open,
        gtwiz_userclk_tx_usrclk2_out          => open,
        gtwiz_userclk_tx_active_out(0)        => txclkactive,
        gtwiz_userclk_rx_reset_in             => "0",
        gtwiz_userclk_rx_srcclk_out           => open,
        gtwiz_userclk_rx_usrclk_out(0)        => usrclk,
        gtwiz_userclk_rx_usrclk2_out          => open,
        gtwiz_userclk_rx_active_out(0)        => rxclkactive,
        gtwiz_reset_clk_freerun_in(0)         => clk_100,
        gtwiz_reset_all_in(0)                 => rstall,
        gtwiz_reset_tx_pll_and_datapath_in    => "0",
        gtwiz_reset_tx_datapath_in            => "0",
        gtwiz_reset_rx_pll_and_datapath_in    => "0",
        gtwiz_reset_rx_datapath_in            => "0",
        gtwiz_reset_rx_cdr_stable_out         => open,
        gtwiz_reset_tx_done_out(0)            => txresetdone,
        gtwiz_reset_rx_done_out(0)            => rxresetdone,
        gtwiz_userdata_tx_in(15 downto 0)     => gt01_datatx,
        gtwiz_userdata_tx_in(31 downto 16)    => gt02_datatx,
        gtwiz_userdata_tx_in(47 downto 32)    => gt03_datatx,
        gtwiz_userdata_tx_in(63 downto 48)    => gt04_datatx,
        gtwiz_userdata_tx_in(79 downto 64)    => gt05_datatx,
        gtwiz_userdata_tx_in(95 downto 80)    => gt06_datatx,
        gtwiz_userdata_tx_in(111 downto 96)   => gt07_datatx,
        gtwiz_userdata_tx_in(127 downto 112)  => gt08_datatx,
        gtwiz_userdata_rx_out(15 downto 0)    => gt01_datarx,
        gtwiz_userdata_rx_out(31 downto 16)   => gt02_datarx,
        gtwiz_userdata_rx_out(47 downto 32)   => gt03_datarx,
        gtwiz_userdata_rx_out(63 downto 48)   => gt04_datarx,
        gtwiz_userdata_rx_out(79 downto 64)   => gt05_datarx,
        gtwiz_userdata_rx_out(95 downto 80)   => gt06_datarx,
        gtwiz_userdata_rx_out(111 downto 96)  => gt07_datarx,
        gtwiz_userdata_rx_out(127 downto 112) => gt08_datarx,
        gtrefclk01_in(0)                      => ref_clk,
        gtrefclk01_in(1)                      => ref_clk,
        qpll1lock_out                         => qplllock,
        qpll1outclk_out                       => open,
        qpll1outrefclk_out                    => open,
        gtyrxn_in(0)                          => qsfp01_rx1n,
        gtyrxn_in(1)                          => qsfp01_rx2n,
        gtyrxn_in(2)                          => qsfp01_rx3n,
        gtyrxn_in(3)                          => qsfp01_rx4n,
        gtyrxn_in(4)                          => qsfp02_rx1n,
        gtyrxn_in(5)                          => qsfp02_rx2n,
        gtyrxn_in(6)                          => qsfp02_rx3n,
        gtyrxn_in(7)                          => qsfp02_rx4n,
        gtyrxp_in(0)                          => qsfp01_rx1p,
        gtyrxp_in(1)                          => qsfp01_rx2p,
        gtyrxp_in(2)                          => qsfp01_rx3p,
        gtyrxp_in(3)                          => qsfp01_rx4p,
        gtyrxp_in(4)                          => qsfp02_rx1p,
        gtyrxp_in(5)                          => qsfp02_rx2p,
        gtyrxp_in(6)                          => qsfp02_rx3p,
        gtyrxp_in(7)                          => qsfp02_rx4p,
        rxbufreset_in                         => (others               => '0'),
        rx8b10ben_in                          => (others               => '1'),
        rxcommadeten_in(0)                    => gt01_rxcommadeten,
        rxcommadeten_in(1)                    => gt02_rxcommadeten,
        rxcommadeten_in(2)                    => gt03_rxcommadeten,
        rxcommadeten_in(3)                    => gt04_rxcommadeten,
        rxcommadeten_in(4)                    => gt05_rxcommadeten,
        rxcommadeten_in(5)                    => gt06_rxcommadeten,
        rxcommadeten_in(6)                    => gt07_rxcommadeten,
        rxcommadeten_in(7)                    => gt08_rxcommadeten,
        rxmcommaalignen_in                    => (others               => '1'),
        rxpcommaalignen_in                    => (others               => '1'),
        tx8b10ben_in                          => (others               => '1'),
        txctrl0_in                            => (others               => '0'),
        txctrl1_in                            => (others               => '0'),
        txctrl2_in                            => (others               => '0'),
        gtpowergood_out(0)                    => gt01_powergood,
        gtpowergood_out(1)                    => gt02_powergood,
        gtpowergood_out(2)                    => gt03_powergood,
        gtpowergood_out(3)                    => gt04_powergood,
        gtpowergood_out(4)                    => gt05_powergood,
        gtpowergood_out(5)                    => gt06_powergood,
        gtpowergood_out(6)                    => gt07_powergood,
        gtpowergood_out(7)                    => gt08_powergood,
        gtytxn_out(0)                         => qsfp01_tx1n,
        gtytxn_out(1)                         => qsfp01_tx2n,
        gtytxn_out(2)                         => qsfp01_tx3n,
        gtytxn_out(3)                         => qsfp01_tx4n,
        gtytxn_out(4)                         => qsfp02_tx1n,
        gtytxn_out(5)                         => qsfp02_tx2n,
        gtytxn_out(6)                         => qsfp02_tx3n,
        gtytxn_out(7)                         => qsfp02_tx4n,
        gtytxp_out(0)                         => qsfp01_tx1p,
        gtytxp_out(1)                         => qsfp01_tx2p,
        gtytxp_out(2)                         => qsfp01_tx3p,
        gtytxp_out(3)                         => qsfp01_tx4p,
        gtytxp_out(4)                         => qsfp02_tx1p,
        gtytxp_out(5)                         => qsfp02_tx2p,
        gtytxp_out(6)                         => qsfp02_tx3p,
        gtytxp_out(7)                         => qsfp02_tx4p,
        rxbufstatus_out                       => open,
        rxbyteisaligned_out(0)                => gt01_rxbyteisaligned,
        rxbyteisaligned_out(1)                => gt02_rxbyteisaligned,
        rxbyteisaligned_out(2)                => gt03_rxbyteisaligned,
        rxbyteisaligned_out(3)                => gt04_rxbyteisaligned,
        rxbyteisaligned_out(4)                => gt05_rxbyteisaligned,
        rxbyteisaligned_out(5)                => gt06_rxbyteisaligned,
        rxbyteisaligned_out(6)                => gt07_rxbyteisaligned,
        rxbyteisaligned_out(7)                => gt08_rxbyteisaligned,
        rxbyterealign_out(0)                  => gt01_rxbyterealign,
        rxbyterealign_out(1)                  => gt02_rxbyterealign,
        rxbyterealign_out(2)                  => gt03_rxbyterealign,
        rxbyterealign_out(3)                  => gt04_rxbyterealign,
        rxbyterealign_out(4)                  => gt05_rxbyterealign,
        rxbyterealign_out(5)                  => gt06_rxbyterealign,
        rxbyterealign_out(6)                  => gt07_rxbyterealign,
        rxbyterealign_out(7)                  => gt08_rxbyterealign,
        rxcdrlock_out(0)                      => gt01_rxcdrlock,
        rxcdrlock_out(1)                      => gt02_rxcdrlock,
        rxcdrlock_out(2)                      => gt03_rxcdrlock,
        rxcdrlock_out(3)                      => gt04_rxcdrlock,
        rxcdrlock_out(4)                      => gt05_rxcdrlock,
        rxcdrlock_out(5)                      => gt06_rxcdrlock,
        rxcdrlock_out(6)                      => gt07_rxcdrlock,
        rxcdrlock_out(7)                      => gt08_rxcdrlock,
        rxclkcorcnt_out                       => open,
        rxcommadet_out(0)                     => gt01_rxcommadet,
        rxcommadet_out(1)                     => gt02_rxcommadet,
        rxcommadet_out(2)                     => gt03_rxcommadet,
        rxcommadet_out(3)                     => gt04_rxcommadet,
        rxcommadet_out(4)                     => gt05_rxcommadet,
        rxcommadet_out(5)                     => gt06_rxcommadet,
        rxcommadet_out(6)                     => gt07_rxcommadet,
        rxcommadet_out(7)                     => gt08_rxcommadet,
        rxctrl0_out                           => open,
        rxctrl1_out                           => open,
        rxctrl2_out                           => open,
        rxctrl3_out                           => open,
        rxpmaresetdone_out                    => open,
        txpmaresetdone_out                    => open
    );

    ----------------------
    -- DIRECT CONNEXION --
    ----------------------
    gt01_txfault  <= qsfp01_modprsl;
    gt02_txfault  <= qsfp01_modprsl;
    gt03_txfault  <= qsfp01_modprsl;
    gt04_txfault  <= qsfp01_modprsl;

    gt05_txfault  <= qsfp02_modprsl;
    gt06_txfault  <= qsfp02_modprsl;
    gt07_txfault  <= qsfp02_modprsl;
    gt08_txfault  <= qsfp02_modprsl;

    gt01_rxlos    <= qsfp01_modprsl;
    gt02_rxlos    <= qsfp01_modprsl;
    gt03_rxlos    <= qsfp01_modprsl;
    gt04_rxlos    <= qsfp01_modprsl;

    gt05_rxlos    <= qsfp02_modprsl;
    gt06_rxlos    <= qsfp02_modprsl;
    gt07_rxlos    <= qsfp02_modprsl;
    gt08_rxlos    <= qsfp02_modprsl;

    gt01_modabs   <= qsfp01_modprsl;
    gt02_modabs   <= qsfp01_modprsl;
    gt03_modabs   <= qsfp01_modprsl;
    gt04_modabs   <= qsfp01_modprsl;

    gt05_modabs   <= qsfp02_modprsl;
    gt06_modabs   <= qsfp02_modprsl;
    gt07_modabs   <= qsfp02_modprsl;
    gt08_modabs   <= qsfp02_modprsl;

    qsfp01_resetn <= '1';
    qsfp02_resetn <= '1';


end architecture rtl;