]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
26_05
authorhadeshyp <hadeshyp>
Wed, 26 May 2010 13:51:40 +0000 (13:51 +0000)
committerhadeshyp <hadeshyp>
Wed, 26 May 2010 13:51:40 +0000 (13:51 +0000)
gbe_ecp2m/tb_gbe_buf.vhd
gbe_ecp2m/trb_net16_gbe_buf.vhd
gbe_ecp2m/trb_net16_gbe_packet_constr.vhd
gbe_ecp2m/trb_net16_gbe_setup.vhd
gbe_ecp2m/trb_net16_med_ecp_sfp_gbe_8b.vhd

index a472efa15e558019d335505ca162af3b17f0dc0c..0516ce0e787b9a0734c06d20d7208da7e5e828bb 100755 (executable)
@@ -7,12 +7,16 @@ ENTITY testbench IS
 END testbench;\r
 \r
 ARCHITECTURE behavior OF testbench IS \r
-\r
-       COMPONENT trb_net16_gbe_buf\r
-       GENERIC( DO_SIMULATION : integer range 0 to 1 := 1 );\r
-       PORT(\r
-               CLK : IN std_logic;\r
-               TEST_CLK : IN std_logic;\r
+       component buf_tester is --trb_net16_gbe_buf is\r
+       generic( \r
+               DO_SIMULATION           : integer range 0 to 1 := 1;\r
+               USE_125MHZ_EXTCLK       : integer range 0 to 1 := 1\r
+       );\r
+       port(\r
+               CLK                                                     : in    std_logic;\r
+               TEST_CLK                                        : in    std_logic; -- only for simulation!\r
+               CLK_125_TX_IN                           : in std_logic;  -- gk 28.04.01 used only in internal 125MHz clock mode\r
+               CLK_125_RX_IN                           : in std_logic;  -- gk 28.04.01 used only in internal 125MHz clock mode\r
                RESET : IN std_logic;\r
                GSR_N : IN std_logic;\r
                STAGE_CTRL_REGS_IN : IN std_logic_vector(31 downto 0);\r
@@ -34,6 +38,17 @@ ARCHITECTURE behavior OF testbench IS
                SLV_ACK_OUT                  : out std_logic;\r
                SLV_DATA_IN                  : in std_logic_vector(31 downto 0);\r
                SLV_DATA_OUT                 : out std_logic_vector(31 downto 0);\r
+               -- gk 26.04.10\r
+               -- registers setup interface\r
+               BUS_ADDR_IN               : in std_logic_vector(7 downto 0);\r
+               BUS_DATA_IN               : in std_logic_vector(31 downto 0);\r
+               BUS_DATA_OUT              : out std_logic_vector(31 downto 0);  -- gk 26.04.10\r
+               BUS_WRITE_EN_IN           : in std_logic;  -- gk 26.04.10\r
+               BUS_READ_EN_IN            : in std_logic;  -- gk 26.04.10\r
+               BUS_ACK_OUT               : out std_logic;  -- gk 26.04.10\r
+               -- gk 23.04.10\r
+               LED_PACKET_SENT_OUT        : out std_logic;\r
+               LED_AN_DONE_N_OUT            : out std_logic;\r
                ------------------------\r
                CTS_NUMBER_IN : IN std_logic_vector(15 downto 0);\r
                CTS_CODE_IN : IN std_logic_vector(7 downto 0);\r
@@ -276,10 +291,12 @@ ARCHITECTURE behavior OF testbench IS
 BEGIN\r
 \r
 -- Please check and add your generic clause manually\r
-       uut: trb_net16_gbe_buf \r
-       GENERIC MAP( DO_SIMULATION => 1 )\r
+       uut: buf_tester --trb_net16_gbe_buf \r
+       GENERIC MAP( DO_SIMULATION => 1, USE_125MHZ_EXTCLK => 1 )\r
        PORT MAP(\r
                CLK => CLK,\r
+               CLK_125_TX_IN => '0',\r
+               CLK_125_RX_IN => '0',\r
                TEST_CLK => TEST_CLK,\r
                RESET => RESET,\r
                GSR_N => GSR_N,\r
@@ -302,6 +319,18 @@ BEGIN
                SLV_ACK_OUT => SLV_ACK_OUT,\r
                SLV_DATA_IN => SLV_DATA_IN,\r
                SLV_DATA_OUT => SLV_DATA_OUT,\r
+               -- gk 22.04.10\r
+               -- registers setup interface\r
+               BUS_ADDR_IN => x"00",\r
+               BUS_DATA_IN => x"0000_0000",\r
+               BUS_DATA_OUT => open,\r
+               BUS_WRITE_EN_IN => '0',\r
+               BUS_READ_EN_IN => '0',\r
+               BUS_ACK_OUT => open,\r
+               -- gk 23.04.10\r
+               LED_PACKET_SENT_OUT => open,\r
+               LED_AN_DONE_N_OUT => open,\r
+               --------------------------\r
                CTS_NUMBER_IN => CTS_NUMBER_IN,\r
                CTS_CODE_IN => CTS_CODE_IN,\r
                CTS_INFORMATION_IN => CTS_INFORMATION_IN,\r
@@ -448,6 +477,7 @@ variable cts_random_number : std_logic_vector(7 downto 0);
 \r
 variable stim : std_logic_vector(15 downto 0);\r
 \r
+\r
 -- RND test\r
 --UNIFORM(seed1, seed2, rand);\r
 --int_rand := INTEGER(TRUNC(rand*65536.0));\r
@@ -509,6 +539,7 @@ begin
 \r
        wait for 500 ns;\r
 \r
+\r
 -------------------------------------------------------------------------------\r
 -- Loop the transmissions\r
 -------------------------------------------------------------------------------\r
@@ -541,8 +572,8 @@ begin
                UNIFORM(seed1, seed2, rand);\r
                test_data_len := INTEGER(TRUNC(rand*max_event_size)) + 1;\r
                \r
-               --test_data_len := 9685;\r
-               test_data_len := 200;\r
+               test_data_len := 9685;\r
+               --test_data_len := 400;\r
                \r
                -- calculate the needed variables\r
                test_loop_len := 2*(test_data_len - 1) + 1;\r
@@ -638,6 +669,7 @@ begin
                        else\r
                                fee_dataready_in <= '1';\r
                        end if;\r
+                               --fee_dataready_in <= '1';\r
                end loop MY_DATA_LOOP;\r
                -- there must be padding words to get multiple of four LWs\r
        \r
index 2f0a3e65fa4bc42b42523076317fa5e77efa9c7c..74ad3e3a7adfdfeaf7835f543939182ee93a374e 100755 (executable)
@@ -248,7 +248,7 @@ port(
        DBG_SF_AEMPTY_OUT                       : out   std_logic;
        DBG_SF_FULL_OUT                         : out   std_logic;
        DBG_SF_AFULL_OUT                        : out   std_logic;
-       DEBUG_OUT                                       : out   std_logic_vector(31 downto 0)   
+       DEBUG_OUT                               : out   std_logic_vector(31 downto 0)   
 );
 end component;
 
@@ -365,7 +365,8 @@ port (
        PROTOCOL_IN                             : in    std_logic_vector(7 downto 0);
        -- ports for packetTransmitter
        RD_CLK                                  : in    std_logic;
-       FT_DATA_OUT                     : out   std_logic_vector(8 downto 0);
+       FT_DATA_OUT             : out   std_logic_vector(8 downto 0);-- gk 04.05.10
+       --FT_EOD_OUT              : out std_logic;-- gk 04.05.10
        FT_TX_EMPTY_OUT                 : out   std_logic;
        FT_TX_RD_EN_IN                  : in    std_logic;
        FT_START_OF_PACKET_OUT  : out   std_logic;
@@ -623,7 +624,7 @@ port(
        GBE_USE_MULTIEVENTS_OUT   : out std_logic;
        GBE_READOUT_CTR_OUT       : out std_logic_vector(23 downto 0);  -- gk 26.04.10
        GBE_READOUT_CTR_VALID_OUT : out std_logic;  -- gk 26.04.10
-       GBE_DELAY_OUT             : out std_logic_vector(31 downto 0) -- gk 28.04.10
+       GBE_DELAY_OUT             : out std_logic_vector(31 downto 0)
 );
 end component;
 
@@ -709,7 +710,7 @@ signal fc_protocol                          : std_logic_vector(7 downto 0);
 signal fc_bsm_constr                   : std_logic_vector(7 downto 0);
 signal fc_bsm_trans                            : std_logic_vector(3 downto 0);
 
-signal ft_data                                 : std_logic_vector(8 downto 0);
+signal ft_data                                 : std_logic_vector(8 downto 0);-- gk 04.05.10
 signal ft_tx_empty                             : std_logic;
 signal ft_start_of_packet              : std_logic;
 signal ft_bsm_init                             : std_logic_vector(3 downto 0);
@@ -767,6 +768,8 @@ signal readout_ctr_valid             : std_logic;
 signal gbe_trig_nr                   : std_logic_vector(31 downto 0);
 -- gk 28.04.10
 signal pc_delay                      : std_logic_vector(31 downto 0);
+-- gk 04.05.10
+signal ft_eod                        : std_logic;
 
 begin
 
@@ -781,6 +784,7 @@ LED_AN_DONE_N_OUT <= not pcs_an_complete;
 --pc_decoding    <= x"00020001"; -- !!!! swap it!!!!  -- gk 22.04.10
 --pc_event_id    <= x"000000ca"; -- !!!! swap it!!!!  -- gk 22.04.10
 --pc_queue_dec   <= x"00030062"; -- !!!! swap it!!!!  -- gk 22.04.10
+
 -- FrameConstructor fixed magic values
 fc_type           <= x"0008";
 fc_ihl_version    <= x"45";
@@ -816,7 +820,7 @@ port map(
        GBE_USE_MULTIEVENTS_OUT   => use_multievents,
        GBE_READOUT_CTR_OUT       => readout_ctr,  -- gk 26.04.10
        GBE_READOUT_CTR_VALID_OUT => readout_ctr_valid,  -- gk 26.04.10
-       GBE_DELAY_OUT             => pc_delay -- gk 28.04.10
+       GBE_DELAY_OUT             => pc_delay
 );
 
 -- IP configurator: allows IP config to change for each event builder
@@ -1016,6 +1020,7 @@ port map(
        -- ports for packetTransmitter
        RD_CLK                                  => serdes_clk_125,
        FT_DATA_OUT                     => ft_data,
+       --FT_EOD_OUT                    => ft_eod, -- gk 04.05.10
        FT_TX_EMPTY_OUT                 => ft_tx_empty,
        FT_TX_RD_EN_IN                  => mac_tx_read,
        FT_START_OF_PACKET_OUT  => ft_start_of_packet,
@@ -1033,7 +1038,7 @@ port map(
        TX_MAC_CLK                              => serdes_clk_125,
        TX_EMPTY_IN                             => ft_tx_empty,
        START_OF_PACKET_IN              => ft_start_of_packet,
-       DATA_ENDFLAG_IN                 => ft_data(8),
+       DATA_ENDFLAG_IN                 => ft_data(8),  -- ft_eod -- gk 04.05.10
        -- MAC interface
        HADDR_OUT                               => mac_haddr,
        HDATA_OUT                               => mac_hdataout,
@@ -1219,7 +1224,7 @@ imp_gen: if (DO_SIMULATION = 0) generate
                );
        end generate serdes_extclk_gen;
 
-       stage_stat_regs(31 downto 28) <= x"d";
+       stage_stat_regs(31 downto 28) <= x"e";
        stage_stat_regs(27 downto 24) <= pcs_stat_debug(25 downto 22); -- link status 
        stage_stat_regs(23 downto 20) <= pcs_stat_debug(35 downto 32); -- reset bsm
        stage_stat_regs(19 downto 18) <= (others => '0');
@@ -1389,7 +1394,7 @@ FC_BSM_CONSTR_TST        <= fc_bsm_constr;
 FC_BSM_TRANS_TST         <= fc_bsm_trans;
 -- FrameTransmitter signals
 FT_TX_EMPTY_TST          <= ft_tx_empty;
-FT_DATA_TST                 <= ft_data;
+FT_DATA_TST              <= ft_data;  -- gk 04.05.10
 FT_START_OF_PACKET_TST   <= ft_start_of_packet;
 FT_BSM_INIT_TST          <= ft_bsm_init;
 FT_BSM_MAC_TST           <= ft_bsm_mac;
index 147b936028cbbb2dd499179c984061fa4e4f55d8..3fec6248d17d15d956e922811b89ef0c5af8a7aa 100755 (executable)
@@ -627,7 +627,9 @@ begin
 \r
                        when CLEANUP => all_int_ctr <= 0;\r
 \r
-                       when PREP_DATA => all_int_ctr <= 0; \r
+                       when PREP_DATA => all_int_ctr <= 0;\r
+\r
+                       when DELAY => all_int_ctr <= 0;\r
                end case;\r
        end if;\r
 end process allIntCtrProc;\r
index 85d5e96977ce8a3feda101d82f3145295a65970c..89917a2a19e868451eda92e881be95228e134a40 100644 (file)
@@ -38,7 +38,7 @@ port(
        GBE_USE_MULTIEVENTS_OUT   : out std_logic;
        GBE_READOUT_CTR_OUT       : out std_logic_vector(23 downto 0);  -- gk 26.04.10
        GBE_READOUT_CTR_VALID_OUT : out std_logic;  -- gk 26.04.10
-       GBE_DELAY_OUT             : out std_logic_vector(31 downto 0) -- gk 28.04.10
+       GBE_DELAY_OUT             : out std_logic_vector(31 downto 0)
 );
 end entity;
 
@@ -104,7 +104,7 @@ begin
                        subevent_id       <= x"0000_00cf";
                        subevent_dec      <= x"0002_0001";
                        queue_dec         <= x"0003_0062";
-                       max_packet        <= x"0000_fde8";
+                       max_packet        <= x"0000_fd00"; --x"0000_fde8"; -- tester
                        max_frame         <= x"0578";
                        use_gbe           <= '1';
                        use_trbnet        <= '0';
@@ -113,6 +113,7 @@ begin
                        readout_ctr       <= x"00_0000";  -- gk 26.04.10
                        readout_ctr_valid <= '0';  -- gk 26.04.10
                        delay             <= x"0000_0000"; -- gk 28.04.10
+
                elsif (BUS_WRITE_EN_IN = '1') then
                        case BUS_ADDR_IN is
 
index e2eeff59e099d4fe696355c7b6096b9d9e8176ec..59eac520c45f5967848e65a602bae8db8b09cc31 100755 (executable)
@@ -8,12 +8,18 @@ use work.trb_net_std.all;
 use work.trb_net_components.all;\r
 \r
 entity trb_net16_med_ecp_sfp_gbe_8b is\r
+-- gk 28.04.10\r
+generic (\r
+       USE_125MHZ_EXTCLK                       : integer range 0 to 1 := 1\r
+);\r
 port(\r
        RESET                                   : in    std_logic;\r
        GSR_N                                   : in    std_logic;\r
        CLK_125_OUT                             : out   std_logic;\r
        CLK_RX_OUT                              : out   std_logic;\r
        CLK_TX_OUT                              : out   std_logic;\r
+       CLK_125_TX_IN                           : in std_logic;  -- gk 28.04.10  used when intclk\r
+       CLK_125_RX_IN                           : in std_logic;  -- gk 28.04.10  used when intclk\r
        --SGMII connection to frame transmitter (tsmac)\r
        FT_TX_CLK_EN_OUT                : out   std_logic;\r
        FT_RX_CLK_EN_OUT                : out   std_logic;\r
@@ -98,6 +104,42 @@ port( refclkp                                       : in    std_logic;
        );\r
 end component;\r
 \r
+component serdes_gbe_0_intclock_8b is\r
+   GENERIC (USER_CONFIG_FILE    :  String := "serdes_gbe_0_intclock_8b.txt");\r
+ port (\r
+   core_txrefclk : in std_logic;\r
+   core_rxrefclk : in std_logic;\r
+   hdinp0, hdinn0 : in std_logic;\r
+   hdoutp0, hdoutn0 : out std_logic;\r
+   ff_rxiclk_ch0, ff_txiclk_ch0, ff_ebrd_clk_0 : in std_logic;\r
+   ff_txdata_ch0 : in std_logic_vector (7 downto 0);\r
+   ff_rxdata_ch0 : out std_logic_vector (7 downto 0);\r
+   ff_tx_k_cntrl_ch0 : in std_logic;\r
+   ff_rx_k_cntrl_ch0 : out std_logic;\r
+   ff_rxfullclk_ch0 : out std_logic;\r
+   ff_xmit_ch0 : in std_logic;\r
+   ff_correct_disp_ch0 : in std_logic;\r
+   ff_disp_err_ch0, ff_cv_ch0 : out std_logic;\r
+   ff_rx_even_ch0 : out std_logic;\r
+   ffc_rrst_ch0 : in std_logic;\r
+   ffc_lane_tx_rst_ch0 : in std_logic;\r
+   ffc_lane_rx_rst_ch0 : in std_logic;\r
+   ffc_txpwdnb_ch0 : in std_logic;\r
+   ffc_rxpwdnb_ch0 : in std_logic;\r
+   ffs_rlos_lo_ch0 : out std_logic;\r
+   ffs_ls_sync_status_ch0 : out std_logic;\r
+   ffs_rlol_ch0 : out std_logic;\r
+   oob_out_ch0 : out std_logic;\r
+   ffc_macro_rst : in std_logic;\r
+   ffc_quad_rst : in std_logic;\r
+   ffc_trst : in std_logic;\r
+   ff_txfullclk : out std_logic;\r
+   ff_txhalfclk : out std_logic;\r
+   refck2core : out std_logic;\r
+   ffs_plol : out std_logic);\r
+\r
+end component;\r
+\r
 component sgmii_gbe_pcs32\r
 port( rst_n                  : in      std_logic;\r
          signal_detect          : in   std_logic;\r
@@ -228,49 +270,93 @@ port map( SYSCLK                  => refclkcore,
                  DEBUG_OUT                     => reset_debug\r
                );\r
 \r
+-- gk 28.04.10\r
 -- SerDes for GbE\r
-SERDES_GBE : serdes_gbe_0_extclock_8b                                          \r
-port map( -- SerDes connection to outside world\r
-                 refclkp                                       => SD_REFCLK_P_IN, -- SerDes REFCLK diff. input\r
-                 refclkn                                       => SD_REFCLK_N_IN,\r
-                 hdinp0                                        => SD_RXD_P_IN, -- SerDes RX diff. input\r
-                 hdinn0                                        => SD_RXD_N_IN,\r
-                 hdoutp0                                       => SD_TXD_P_OUT, -- SerDes TX diff. output\r
-                 hdoutn0                                       => SD_TXD_N_OUT,\r
-                 refck2core                            => refclkcore, -- reference clock from input\r
-                 -- RX part\r
-                 ff_rxfullclk_ch0                      => sd_rx_clk, -- RX full clock output\r
-                 ff_rxiclk_ch0                         => sd_rx_clk,\r
-                 ff_ebrd_clk_0                         => sd_rx_clk, -- EB ist not used as recommended by Lattice\r
-                 ff_rxdata_ch0                         => sd_rx_data, -- RX data output\r
-                 ff_rx_k_cntrl_ch0                     => sd_rx_kcntl, -- RX komma output\r
-                 ff_rx_even_ch0                        => sd_rx_even, -- for autonegotiation (output)\r
-                 ff_disp_err_ch0                       => sd_rx_disp_error, -- RX disparity error\r
-                 ff_cv_ch0                                     => sd_rx_cv_error, -- RX code violation error\r
-                 -- TX part\r
-                 ff_txfullclk                          => sd_tx_clk, -- TX full clock output\r
-                 ff_txiclk_ch0                         => sd_tx_clk, \r
-                 ff_txhalfclk                          => open,\r
-                 ff_txdata_ch0                         => sd_tx_data, -- TX data input\r
-                 ff_tx_k_cntrl_ch0                     => sd_tx_kcntl, -- TX komma input\r
-                 ff_xmit_ch0                           => '0', -- for autonegotiation (input)\r
-                 ff_correct_disp_ch0           => sd_tx_correct_disp, -- controls disparity at IPG start (input)\r
-                 -- Resets and power down\r
-                 ffc_quad_rst                          => quad_rst, -- async reset for whole QUAD (active high)\r
-                 ffc_lane_tx_rst_ch0           => lane_rst, -- async reset for TX channel\r
-                 ffc_lane_rx_rst_ch0           => lane_rst, -- async reset for RX channel\r
-                 ffc_rrst_ch0                          => '0', -- '0' for normal operation\r
-                 ffc_macro_rst                         => '0', -- '0' for normal operation\r
-                 ffc_trst                                      => '0', -- '0' for normal operation\r
-                 ffc_txpwdnb_ch0                       => '1', -- must be '1'\r
-                 ffc_rxpwdnb_ch0                       => '1', -- must be '1'\r
-                 -- Status outputs\r
-                 ffs_ls_sync_status_ch0        => sd_link_ok, -- synced to kommas?\r
-                 ffs_rlos_lo_ch0                       => sd_link_error(0), -- loss of signal in RX channel\r
-                 ffs_rlol_ch0                          => sd_link_error(1), -- loss of lock in RX PLL\r
-                 ffs_plol                                      => sd_link_error(2), -- loss of lock in TX PLL\r
-                 oob_out_ch0                           => open -- not needed\r
-               );\r
+clk_int : if (USE_125MHZ_EXTCLK = 0) generate \r
+       SERDES_GBE : serdes_gbe_0_intclock_8b\r
+       port map(\r
+               core_txrefclk            => CLK_125_TX_IN,\r
+               core_rxrefclk            => CLK_125_RX_IN,\r
+               hdinp0                   => SD_RXD_P_IN,\r
+               hdinn0                   => SD_RXD_N_IN,\r
+               hdoutp0                  => SD_TXD_P_OUT,\r
+               hdoutn0                  => SD_TXD_N_OUT,\r
+               ff_rxiclk_ch0            => sd_rx_clk,\r
+               ff_txiclk_ch0            => sd_tx_clk,\r
+               ff_ebrd_clk_0            => sd_rx_clk,\r
+               ff_txdata_ch0            => sd_tx_data,\r
+               ff_rxdata_ch0            => sd_rx_data,\r
+               ff_tx_k_cntrl_ch0        => sd_tx_kcntl,\r
+               ff_rx_k_cntrl_ch0        => sd_rx_kcntl,\r
+               ff_rxfullclk_ch0         => sd_rx_clk,\r
+               ff_xmit_ch0              => '0',\r
+               ff_correct_disp_ch0      => sd_tx_correct_disp,\r
+               ff_disp_err_ch0          => sd_rx_disp_error,\r
+               ff_cv_ch0                => sd_rx_cv_error,\r
+               ff_rx_even_ch0           => sd_rx_even,\r
+               ffc_rrst_ch0             => '0',\r
+               ffc_lane_tx_rst_ch0      => lane_rst,\r
+               ffc_lane_rx_rst_ch0      => lane_rst,\r
+               ffc_txpwdnb_ch0          => '1',\r
+               ffc_rxpwdnb_ch0          => '1',\r
+               ffs_rlos_lo_ch0          => sd_link_error(0),\r
+               ffs_ls_sync_status_ch0   => sd_link_ok,\r
+               ffs_rlol_ch0             => sd_link_error(1),\r
+               oob_out_ch0              => open,\r
+               ffc_macro_rst            => '0',\r
+               ffc_quad_rst             => quad_rst,\r
+               ffc_trst                 => '0',\r
+               ff_txfullclk             => sd_tx_clk,\r
+               ff_txhalfclk             => open,\r
+               refck2core               => refclkcore,\r
+               ffs_plol                 => sd_link_error(2)\r
+       );\r
+end generate clk_int;\r
+\r
+clk_ext : if (USE_125MHZ_EXTCLK = 1) generate\r
+       SERDES_GBE : serdes_gbe_0_extclock_8b                                           \r
+       port map( -- SerDes connection to outside world\r
+                       refclkp                                 => SD_REFCLK_P_IN, -- SerDes REFCLK diff. input\r
+                       refclkn                                 => SD_REFCLK_N_IN,\r
+                       hdinp0                                  => SD_RXD_P_IN, -- SerDes RX diff. input\r
+                       hdinn0                                  => SD_RXD_N_IN,\r
+                       hdoutp0                                 => SD_TXD_P_OUT, -- SerDes TX diff. output\r
+                       hdoutn0                                 => SD_TXD_N_OUT,\r
+                       refck2core                              => refclkcore, -- reference clock from input\r
+                       -- RX part\r
+                       ff_rxfullclk_ch0                        => sd_rx_clk, -- RX full clock output\r
+                       ff_rxiclk_ch0                           => sd_rx_clk,\r
+                       ff_ebrd_clk_0                           => sd_rx_clk, -- EB ist not used as recommended by Lattice\r
+                       ff_rxdata_ch0                           => sd_rx_data, -- RX data output\r
+                       ff_rx_k_cntrl_ch0                       => sd_rx_kcntl, -- RX komma output\r
+                       ff_rx_even_ch0                  => sd_rx_even, -- for autonegotiation (output)\r
+                       ff_disp_err_ch0                 => sd_rx_disp_error, -- RX disparity error\r
+                       ff_cv_ch0                                       => sd_rx_cv_error, -- RX code violation error\r
+                       -- TX part\r
+                       ff_txfullclk                            => sd_tx_clk, -- TX full clock output\r
+                       ff_txiclk_ch0                           => sd_tx_clk, \r
+                       ff_txhalfclk                            => open,\r
+                       ff_txdata_ch0                           => sd_tx_data, -- TX data input\r
+                       ff_tx_k_cntrl_ch0                       => sd_tx_kcntl, -- TX komma input\r
+                       ff_xmit_ch0                             => '0', -- for autonegotiation (input)\r
+                       ff_correct_disp_ch0             => sd_tx_correct_disp, -- controls disparity at IPG start (input)\r
+                       -- Resets and power down\r
+                       ffc_quad_rst                            => quad_rst, -- async reset for whole QUAD (active high)\r
+                       ffc_lane_tx_rst_ch0             => lane_rst, -- async reset for TX channel\r
+                       ffc_lane_rx_rst_ch0             => lane_rst, -- async reset for RX channel\r
+                       ffc_rrst_ch0                            => '0', -- '0' for normal operation\r
+                       ffc_macro_rst                           => '0', -- '0' for normal operation\r
+                       ffc_trst                                        => '0', -- '0' for normal operation\r
+                       ffc_txpwdnb_ch0                 => '1', -- must be '1'\r
+                       ffc_rxpwdnb_ch0                 => '1', -- must be '1'\r
+                       -- Status outputs\r
+                       ffs_ls_sync_status_ch0  => sd_link_ok, -- synced to kommas?\r
+                       ffs_rlos_lo_ch0                 => sd_link_error(0), -- loss of signal in RX channel\r
+                       ffs_rlol_ch0                            => sd_link_error(1), -- loss of lock in RX PLL\r
+                       ffs_plol                                        => sd_link_error(2), -- loss of lock in TX PLL\r
+                       oob_out_ch0                             => open -- not needed\r
+                       );\r
+end generate clk_ext;\r
 \r
 SD_RX_DATA_PROC: process( sd_rx_clk )\r
 begin\r