serdes_rst : in std_logic;
ref_pclk : out std_logic
);
-end component serdes_gbe_0_200;
+end component serdes_gbe_0_200;
+
+component serdes_100_ext is
+generic(
+ USER_CONFIG_FILE : String := "serdes_100_ext.txt"
+);
+port(
+ refclkp : in std_logic;
+ refclkn : in std_logic;
+ rxrefclk : in std_logic;
+ refclk : in std_logic;
+ rxa_pclk : out std_logic;
+ rxb_pclk : out std_logic;
+ hdinp_0 : in std_logic;
+ hdinn_0 : in std_logic;
+ hdoutp_0 : out std_logic;
+ hdoutn_0 : out std_logic;
+ tclk_0 : in std_logic;
+ rclk_0 : in std_logic;
+ tx_rst_0 : in std_logic;
+ rx_rst_0 : in std_logic;
+ ref_0_sclk : out std_logic;
+ rx_0_sclk : out std_logic;
+ txd_0 : in std_logic_vector(15 downto 0);
+ tx_k_0 : in std_logic_vector(1 downto 0);
+ tx_force_disp_0 : in std_logic_vector(1 downto 0);
+ tx_disp_sel_0 : in std_logic_vector(1 downto 0);
+ rxd_0 : out std_logic_vector(15 downto 0);
+ rx_k_0 : out std_logic_vector(1 downto 0);
+ rx_disp_err_detect_0 : out std_logic_vector(1 downto 0);
+ rx_cv_detect_0 : out std_logic_vector(1 downto 0);
+ tx_crc_init_0 : in std_logic_vector(1 downto 0);
+ rx_crc_eop_0 : out std_logic_vector(1 downto 0);
+ word_align_en_0 : in std_logic;
+ mca_align_en_0 : in std_logic;
+ felb_0 : in std_logic;
+ lsm_en_0 : in std_logic;
+ lsm_status_0 : out std_logic;
+ mca_resync_01 : in std_logic;
+ quad_rst : in std_logic;
+ serdes_rst : in std_logic;
+ ref_pclk : out std_logic
+);
+end component serdes_100_ext;
-- LSM state machine signals
signal swap_bytes : std_logic; -- sysclk
SD_LOS_IN => link_error(8), -- unknown sync
SD_TXCLK_BAD_IN => link_error(5), -- unknown sync
SD_RXCLK_BAD_IN => link_error(4), -- unknown sync
- SD_RETRY_IN => '0', -- OK fixed
- SD_ALIGNMENT_IN => rx_k_q, -- OK
+ SD_RETRY_IN => '0', -- OK fixed
+ SD_ALIGNMENT_IN => rx_k_q, -- OK
SD_CV_IN => link_error(7 downto 6), -- unknown sync
FULL_RESET_OUT => quad_rst, -- sysclk sync'ed
LANE_RESET_OUT => lane_rst, -- sysclk sync'ed
STAT_DEBUG => buf_stat_debug
);
+link_error(4 downto 0) <= (others => '0');
+link_error(5) <= not link_ok(0);
+link_error(8) <= '0';
SD_TXDIS_OUT <= quad_rst;
-- receive komma character status bits for LSM
refclkn => SD_REFCLK_N_IN, -- not used here
rxrefclk => CLK, -- raw 200MHz clock
refclk => CLK, -- raw 200MHz clock
- rxa_pclk => rx_halfclk, -- clock multiplier set by data bus width
+ rxa_pclk => open, --rx_halfclk, -- clock multiplier set by data bus width
rxb_pclk => open,
hdinp_0 => SD_RXD_P_IN, -- SerDes I/O
hdinn_0 => SD_RXD_N_IN, -- SerDes I/O
hdoutn_0 => SD_TXD_N_OUT, -- SerDes I/O
tclk_0 => tx_halfclk, -- 100MHz
rclk_0 => rx_halfclk, -- 100MHz
- tx_rst_0 => lane_rst, -- async reset
- rx_rst_0 => lane_rst, -- async reset
- ref_0_sclk => open,
- rx_0_sclk => open,
+ tx_rst_0 => '0', --JM101206 lane_rst, -- async reset
+ rx_rst_0 => '0', --JM101206 lane_rst, -- async reset --reset when sd_los=0 and disp_err=1 or cv=1
+ ref_0_sclk => tx_halfclk,
+ rx_0_sclk => rx_halfclk,
txd_0 => tx_data,
tx_k_0 => tx_k,
tx_force_disp_0 => b"00", -- BUGBUG
lsm_status_0 => link_ok(0), -- link synchronisation successfull
mca_resync_01 => '0', -- not needed
quad_rst => '0', -- hands off - kills registers!
- serdes_rst => quad_rst, -- unknown if will work
- ref_pclk => tx_halfclk -- clock multiplier set by data bus width
+ serdes_rst => '0', --JM101203 quad_rst, -- unknown if will work
+ ref_pclk => open --tx_halfclk -- clock multiplier set by data bus width
);
end generate;
+gen_serdes_0_100_ext : if SERDES_NUM = 0 and EXT_CLOCK = c_YES and USE_200_MHZ = c_NO generate
+ THE_SERDES: serdes_100_ext
+ port map(
+ refclkp => SD_REFCLK_P_IN, -- not used here
+ refclkn => SD_REFCLK_N_IN, -- not used here
+ rxrefclk => CLK, -- raw 200MHz clock
+ refclk => CLK, -- raw 200MHz clock
+ rxa_pclk => open, --rx_halfclk, -- clock multiplier set by data bus width
+ rxb_pclk => open,
+ hdinp_0 => SD_RXD_P_IN, -- SerDes I/O
+ hdinn_0 => SD_RXD_N_IN, -- SerDes I/O
+ hdoutp_0 => SD_TXD_P_OUT, -- SerDes I/O
+ hdoutn_0 => SD_TXD_N_OUT, -- SerDes I/O
+ tclk_0 => tx_halfclk, -- 100MHz
+ rclk_0 => rx_halfclk, -- 100MHz
+ tx_rst_0 => '0', --JM101206 lane_rst, -- async reset
+ rx_rst_0 => lane_rst, -- async reset --SM: reset when sd_los=0 and disp_err=1 or cv=1
+ ref_0_sclk => tx_halfclk,
+ rx_0_sclk => rx_halfclk,
+ txd_0 => tx_data,
+ tx_k_0 => tx_k,
+ tx_force_disp_0 => b"00", -- BUGBUG
+ tx_disp_sel_0 => b"00", -- BUGBUG
+ rxd_0 => rx_data,
+ rx_k_0 => rx_k,
+ rx_disp_err_detect_0 => open,
+ rx_cv_detect_0 => link_error(7 downto 6),
+ tx_crc_init_0 => b"00", -- CRC init (not needed)
+ rx_crc_eop_0 => open, -- (not needed)
+ word_align_en_0 => '1', -- word alignment
+ mca_align_en_0 => '0', -- (not needed)
+ felb_0 => '0', -- far end loopback disable
+ lsm_en_0 => '1', -- enable LinkStateMachine
+ lsm_status_0 => link_ok(0), -- link synchronisation successfull
+ mca_resync_01 => '0', -- not needed
+ quad_rst => '0', -- hands off - kills registers!
+ serdes_rst => '0', --JM101203 quad_rst, -- unknown if will work
+ ref_pclk => open --tx_halfclk -- clock multiplier set by data bus width
+ );
+end generate;
-------------------------------------------------------------------------
-------------------------------------------------------------------------
generic map(
USE_STATUS_FLAGS => c_NO
)
-port map(
+port map(
fifo_gsr_in => fifo_rx_reset, -- async reset
read_clock_in => SYSCLK,
read_enable_in => fifo_rx_rd_en, -- OK
generic map(
USE_STATUS_FLAGS => c_NO
)
-port map(
+port map(
fifo_gsr_in => fifo_tx_reset, -- async signal, does not matter
read_clock_in => tx_halfclk,
read_enable_in => fifo_tx_rd_en, -- OK
begin
if( rising_edge(SYSCLK) ) then
led_counter <= led_counter + 1;
-
+
if ( buf_med_dataready_out = '1' ) then
rx_led <= '1';
elsif( led_counter = 0 ) then
rx_led <= '0';
end if;
-
+
if ( tx_k(0) = '0' ) then
tx_led <= '1';
elsif( led_counter = 0 ) then
tx_led <= '0';
end if;
-
+
end if;
end process THE_LED_PROC;
-- Debug output
stat_debug(15 downto 0) <= rx_data;
stat_debug(17 downto 16) <= rx_k;
-stat_debug(19 downto 18) <= (others => '0');
+stat_debug(18) <= link_ok(0);
+stat_debug(19) <= quad_rst;
stat_debug(23 downto 20) <= buf_stat_debug(3 downto 0);
stat_debug(24) <= fifo_rx_rd_en;
stat_debug(25) <= fifo_rx_wr_en;
stat_debug(28) <= fifo_rx_full;
stat_debug(29) <= last_rx(8);
stat_debug(30) <= rx_allow_delay;
-stat_debug(41 downto 31) <= (others => '0');
+stat_debug(31) <= lane_rst;
+stat_debug(41 downto 32) <= (others => '0');
stat_debug(42) <= sysclk;
-stat_debug(43) <= sysclk;
-stat_debug(59 downto 44) <= (others => '0');
+stat_debug(43) <= tx_halfclk;
+stat_debug(44) <= rx_halfclk;
+stat_debug(46 downto 45) <= tx_k;
+stat_debug(59 downto 47) <= (others => '0');
stat_debug(63 downto 60) <= buf_stat_debug(3 downto 0);
end architecture;
\ No newline at end of file
LOCATE COMP "ADO_TTL_45" SITE "AM8";
LOCATE COMP "ADO_TTL_46" SITE "AF13";
DEFINE PORT GROUP "ADOTTL_group" "ADO_TTL*" ;
-IOBUF GROUP "ADOTTL_group" IO_TYPE=LVCMOS25 PULLMODE=NONE DRIVE=16; #should be LVTTL33
+IOBUF GROUP "ADOTTL_group" IO_TYPE=LVTTL33 PULLMODE=NONE DRIVE=16;
LOCATE COMP "FS_PE_5" SITE "AE13";
LOCATE COMP "FS_PE_6" SITE "AL9";
LOCATE COMP "FS_PE_10" SITE "AJ9";
LOCATE COMP "FS_PE_11" SITE "AG10";
DEFINE PORT GROUP "FSPE_group" "FS_PE*" ;
-IOBUF GROUP "FSPE_group" IO_TYPE=LVCMOS25 PULLMODE=NONE DRIVE=16; #should be LVTTL33
+IOBUF GROUP "FSPE_group" IO_TYPE=LVTTL33 PULLMODE=NONE DRIVE=16;
#################################################################
# Debug
#################################################################
-# LOCATE COMP "TEST_LINE_0" SITE "AL6";
-# LOCATE COMP "TEST_LINE_1" SITE "AL5";
-# LOCATE COMP "TEST_LINE_2" SITE "AG7";
-# LOCATE COMP "TEST_LINE_3" SITE "AG8";
-# LOCATE COMP "TEST_LINE_4" SITE "AK6";
-# LOCATE COMP "TEST_LINE_5" SITE "AJ6";
-# LOCATE COMP "TEST_LINE_6" SITE "AF10";
-# LOCATE COMP "TEST_LINE_7" SITE "AE11";
-# LOCATE COMP "TEST_LINE_8" SITE "AM4";
-# LOCATE COMP "TEST_LINE_9" SITE "AM3";
-# LOCATE COMP "TEST_LINE_10" SITE "AH5";
-# LOCATE COMP "TEST_LINE_11" SITE "AH4";
-# LOCATE COMP "TEST_LINE_12" SITE "AK5";
-# LOCATE COMP "TEST_LINE_13" SITE "AJ5";
-# LOCATE COMP "TEST_LINE_14" SITE "AF8";
-# LOCATE COMP "TEST_LINE_15" SITE "AF7";
-# LOCATE COMP "TEST_LINE_16" SITE "AL4";
-# LOCATE COMP "TEST_LINE_17" SITE "AL3";
-# LOCATE COMP "TEST_LINE_18" SITE "AG5";
-# LOCATE COMP "TEST_LINE_19" SITE "AF6";
-# LOCATE COMP "TEST_LINE_20" SITE "AK3";
-# LOCATE COMP "TEST_LINE_21" SITE "AJ3";
-# LOCATE COMP "TEST_LINE_22" SITE "AE10";
-# LOCATE COMP "TEST_LINE_23" SITE "AD10";
-# LOCATE COMP "TEST_LINE_24" SITE "AL2";
-# LOCATE COMP "TEST_LINE_25" SITE "AK2";
-# LOCATE COMP "TEST_LINE_26" SITE "AE9";
-# LOCATE COMP "TEST_LINE_27" SITE "AE8";
-# LOCATE COMP "TEST_LINE_28" SITE "AJ1";
-# LOCATE COMP "TEST_LINE_29" SITE "AK1";
-# LOCATE COMP "TEST_LINE_30" SITE "AJ2";
-# LOCATE COMP "TEST_LINE_31" SITE "AH3";
-# DEFINE PORT GROUP "TEST_LINE_group" "TEST_LINE*" ;
-# IOBUF GROUP "TEST_LINE_group" IO_TYPE=LVTTL33 PULLMODE=DOWN DRIVE=16;
+LOCATE COMP "TEST_LINE_0" SITE "AL6";
+LOCATE COMP "TEST_LINE_1" SITE "AL5";
+LOCATE COMP "TEST_LINE_2" SITE "AG7";
+LOCATE COMP "TEST_LINE_3" SITE "AG8";
+LOCATE COMP "TEST_LINE_4" SITE "AK6";
+LOCATE COMP "TEST_LINE_5" SITE "AJ6";
+LOCATE COMP "TEST_LINE_6" SITE "AF10";
+LOCATE COMP "TEST_LINE_7" SITE "AE11";
+LOCATE COMP "TEST_LINE_8" SITE "AM4";
+LOCATE COMP "TEST_LINE_9" SITE "AM3";
+LOCATE COMP "TEST_LINE_10" SITE "AH5";
+LOCATE COMP "TEST_LINE_11" SITE "AH4";
+LOCATE COMP "TEST_LINE_12" SITE "AK5";
+LOCATE COMP "TEST_LINE_13" SITE "AJ5";
+LOCATE COMP "TEST_LINE_14" SITE "AF8";
+LOCATE COMP "TEST_LINE_15" SITE "AF7";
+LOCATE COMP "TEST_LINE_16" SITE "AL4";
+LOCATE COMP "TEST_LINE_17" SITE "AL3";
+LOCATE COMP "TEST_LINE_18" SITE "AG5";
+LOCATE COMP "TEST_LINE_19" SITE "AF6";
+LOCATE COMP "TEST_LINE_20" SITE "AK3";
+LOCATE COMP "TEST_LINE_21" SITE "AJ3";
+LOCATE COMP "TEST_LINE_22" SITE "AE10";
+LOCATE COMP "TEST_LINE_23" SITE "AD10";
+LOCATE COMP "TEST_LINE_24" SITE "AL2";
+LOCATE COMP "TEST_LINE_25" SITE "AK2";
+LOCATE COMP "TEST_LINE_26" SITE "AE9";
+LOCATE COMP "TEST_LINE_27" SITE "AE8";
+LOCATE COMP "TEST_LINE_28" SITE "AJ1";
+LOCATE COMP "TEST_LINE_29" SITE "AK1";
+LOCATE COMP "TEST_LINE_30" SITE "AJ2";
+LOCATE COMP "TEST_LINE_31" SITE "AH3";
+DEFINE PORT GROUP "TEST_LINE_group" "TEST_LINE*" ;
+IOBUF GROUP "TEST_LINE_group" IO_TYPE=LVTTL33 PULLMODE=DOWN DRIVE=16;
#################################################################
# To second FPGA
LOCATE COMP "RS2_2" SITE "AD12";
LOCATE COMP "RS2_3" SITE "AE12";
DEFINE PORT GROUP "RS_group" "RS*" ;
-IOBUF GROUP "RS_group" IO_TYPE=LVCMOS25 PULLMODE=UP DRIVE=16; #should be LVTTL33
+IOBUF GROUP "RS_group" IO_TYPE=LVTTL33 PULLMODE=UP DRIVE=16;
#################################################################
# SFP