]> jspc29.x-matter.uni-frankfurt.de Git - soda.git/commitdiff
Intermediate commit. In the process of creating the soda-hub. Now going to fiddle...
authorPeter Lemmens <p.j.j.lemmens@rug.nl>
Thu, 6 Feb 2014 10:49:58 +0000 (11:49 +0100)
committerPeter Lemmens <p.j.j.lemmens@rug.nl>
Thu, 6 Feb 2014 10:49:58 +0000 (11:49 +0100)
20 files changed:
soda_hub_probe.rvl
soda_source.lpf
soda_source_probe.rvl
source/med_ecp3_sfp_sync_down.vhd
source/med_ecp3_sfp_sync_up.vhd
source/serdes_sync_downstream.ipx
source/serdes_sync_downstream.lpc
source/serdes_sync_downstream.txt
source/serdes_sync_downstream.vhd
source/serdes_sync_upstream.ipx
source/serdes_sync_upstream.lpc
source/serdes_sync_upstream.txt
source/serdes_sync_upstream.vhd
source/soda_cmd_window_generator.vhd
source/soda_components.vhd
source/soda_hub.vhd
source/soda_packet_handler.vhd
source/soda_reply_pkt_builder.vhd
source/soda_source.vhd
source/soda_superburst_gen.vhd

index 0397f85085d7a306e37897160d7c489b1adea0b3..642e560345d0329520a1f9d1f1816f43cc6da849 100644 (file)
@@ -1,10 +1,10 @@
-<Project ModBy="Inserter" SigType="0" Name="/local/lemmens/lattice/soda/soda_hub_probe.rvl" Date="2014-01-29">
+<Project ModBy="Inserter" SigType="0" Name="/local/lemmens/lattice/soda/soda_hub_probe.rvl" Date="2014-01-30">
     <IP Version="1_5_062609"/>
     <Design DesignEntry="Schematic/VHDL" Synthesis="synplify" DeviceFamily="LatticeECP3" DesignName="soda_hub"/>
-    <Core InsertDataset="0" Insert="1" Reveal_sig="2021302512" Name="trb3_periph_sodaclient_LA0" ID="0">
+    <Core InsertDataset="0" Insert="1" Reveal_sig="2021452834" Name="trb3_periph_sodaclient_LA0" ID="0">
         <Setting>
-            <Clock SampleClk="the_sync_link/clk_rx_full" SampleEnable="0" EnableClk="" EnableClk_Pri="0"/>
-            <TraceBuffer Implementation="0" BitTimeStamp="0" hasTimeStamp="0" IncTrigSig="1" BufferDepth="512"/>
+            <Clock SampleClk="soda_rx_clock_full" SampleEnable="0" EnableClk="" EnableClk_Pri="0"/>
+            <TraceBuffer Implementation="0" BitTimeStamp="0" hasTimeStamp="0" IncTrigSig="1" BufferDepth="256"/>
             <Capture Mode="0" MinSamplesPerTrig="8"/>
             <Event CntEnable="0" MaxEventCnt="8"/>
             <TrigOut Polarity="0" MinPulseWidth="0" TrigOutNetType="1" EnableTrigOut="0" TrigOutNet="reveal_debug_soda_client_LA0_net"/>
                 </Bus>
             </Trace>
             <Trigger>
-                <TU Serialbits="0" Type="0" ID="1" Sig="a_soda_hub/start_of_superburst_s,"/>
-                <TU Serialbits="0" Type="0" ID="2" Sig="rxup_dlm_i,"/>
-                <TU Serialbits="0" Type="0" ID="3" Sig="txup_dlm_i,"/>
-                <TU Serialbits="0" Type="0" ID="4" Sig="the_sync_uplink/watchdog_trigger,"/>
-                <TU Serialbits="0" Type="0" ID="5" Sig="(BUS)rxdn_dlm_i[1:0],"/>
-                <TU Serialbits="0" Type="0" ID="6" Sig="(BUS)txdn_dlm_i[1:0],"/>
-                <TU Serialbits="0" Type="0" ID="7" Sig="a_soda_hub/start_calibration_s,"/>
+                <TU Serialbits="0" Type="0" ID="1" Sig="a_soda_hub/start_of_calibration_s,"/>
+                <TU Serialbits="0" Type="0" ID="2" Sig="the_sync_uplink/watchdog_trigger,"/>
+                <TU Serialbits="0" Type="0" ID="3" Sig="(BUS)rxdn_dlm_i[1:0],"/>
+                <TU Serialbits="0" Type="0" ID="4" Sig="(BUS)txdn_dlm_i[1:0],"/>
+                <TU Serialbits="0" Type="0" ID="5" Sig="a_soda_hub/start_of_calibration_s,"/>
+                <TU Serialbits="0" Type="0" ID="6" Sig="(BUS)a_soda_hub/reply_valid_s[1:0],"/>
                 <TE MaxSequence="2" MaxEvnCnt="1" ID="1" Resource="0"/>
                 <TE MaxSequence="2" MaxEvnCnt="1" ID="2" Resource="0"/>
                 <TE MaxSequence="2" MaxEvnCnt="1" ID="3" Resource="0"/>
                 <TE MaxSequence="2" MaxEvnCnt="1" ID="4" Resource="0"/>
                 <TE MaxSequence="2" MaxEvnCnt="1" ID="5" Resource="0"/>
                 <TE MaxSequence="2" MaxEvnCnt="1" ID="6" Resource="0"/>
-                <TE MaxSequence="2" MaxEvnCnt="1" ID="7" Resource="0"/>
             </Trigger>
         </Dataset>
     </Core>
index 3667e7aa96f46ac10834742bddc8bde86bf1446f..44e792046cb9cdbe790d11676635b242cbf361f7 100644 (file)
@@ -215,6 +215,7 @@ MULTICYCLE TO CELL "THE_SYNC_LINK/sci*" 20.000000 ns ;
 MULTICYCLE FROM CELL "THE_SYNC_LINK/sci*" 25.000000 ns ;
 MULTICYCLE TO CELL "THE_SYNC_LINK/wa_pos*" 20.000000 ns ;
 MULTICYCLE TO CELL "THE_MEDIA_UPLINK/SCI_DATA_OUT*" 50.000000 ns ;
+MULTICYCLE TO CELL "THE_SODA_SOURCE.packet_builder.soda_cmd_word_S*" 10.000000 ns ;
 BLOCK JTAGPATHS ;
 ## IOBUF ALLPORTS ;
 #USE PRIMARY PURE NET "CLK_PCLK_LEFT_c" QUADRANT_TL QUADRANT_TR QUADRANT_BL QUADRANT_BR ;\r
index 1d33e9e8f1c96722d983db37b13dd5a9a66831cf..dc0203a1a19c19a3daa50e27a6e6f6bf54b3c0ae 100644 (file)
@@ -1,7 +1,7 @@
-<Project ModBy="Inserter" SigType="0" Name="/local/lemmens/lattice/soda/soda_source_probe.rvl" Date="2014-01-22">
+<Project ModBy="Inserter" SigType="0" Name="/local/lemmens/lattice/soda/soda_source_probe.rvl" Date="2014-01-30">
     <IP Version="1_5_062609"/>
     <Design DesignEntry="Schematic/VHDL" Synthesis="synplify" DeviceFamily="LatticeECP3" DesignName="soda_source"/>
-    <Core InsertDataset="0" Insert="1" Reveal_sig="2020398765" Name="trb3_periph_sodasource_LA0" ID="0">
+    <Core InsertDataset="0" Insert="1" Reveal_sig="2021438704" Name="trb3_periph_sodasource_LA0" ID="0">
         <Setting>
             <Clock SampleClk="rx_clock_full" SampleEnable="0" EnableClk="" EnableClk_Pri="0"/>
             <TraceBuffer Implementation="0" BitTimeStamp="0" hasTimeStamp="0" IncTrigSig="1" BufferDepth="512"/>
                     <Sig Type="SIG" Name="the_sync_link/wa_position:14"/>
                     <Sig Type="SIG" Name="the_sync_link/wa_position:15"/>
                 </Bus>
+                <Sig Type="SIG" Name="the_soda_source/soda_cmd_strobe_s"/>
+                <Sig Type="SIG" Name="the_soda_source/soda_cmd_strobe_sodaclk_s"/>
+                <Sig Type="SIG" Name="the_soda_source/soda_cmd_pending_s"/>
+                <Sig Type="SIG" Name="the_soda_source/soda_send_cmd_s"/>
+                <Sig Type="SIG" Name="the_soda_source/soda_cmd_window_s"/>
             </Trace>
             <Trigger>
                 <TU Serialbits="0" Type="0" ID="1" Sig="the_soda_source/store_rd,"/>
index e9266fb4392a37abc8b222b82001333f9460d08e..f69b1d6b53b81be8065f29a8244daea6c8713c89 100644 (file)
@@ -19,7 +19,7 @@ entity med_ecp3_sfp_sync_down is
                SYSCLK             : in  std_logic; -- 100 MHz main clock net, synchronous to RX clock
                RESET              : in  std_logic; -- synchronous reset
                CLEAR              : in  std_logic; -- asynchronous reset
-               -- \r
+               -- 
 --             PCSA_REFCLKP : in  std_logic;           -- external refclock straight into serdes       PL!
 --             PCSA_REFCLKN : in  std_logic;           -- external refclock straight into serdes       PL!
                --Internal Connection TX
@@ -41,28 +41,28 @@ entity med_ecp3_sfp_sync_down is
                RX_DLM             : out std_logic := '0';
                RX_DLM_WORD        : out std_logic_vector(7 downto 0) := x"00";
                TX_DLM             : in  std_logic := '0';
-               TX_DLM_WORD        : in  std_logic_vector(7 downto 0) := x"00";\r
-               TX_DLM_PREVIEW_IN               : in std_logic := '0';  --PL!\r
-               LINK_PHASE_OUT                  : out   std_logic := '0';       --PL!
+               TX_DLM_WORD        : in  std_logic_vector(7 downto 0) := x"00";
+               TX_DLM_PREVIEW_IN               : in std_logic := '0';  --PL!
+               link_PHASE_OUT                  : out   std_logic := '0';       --PL!
 
                --SFP Connection
-               SD_RXD_P_IN        : in  std_logic;
-               SD_RXD_N_IN        : in  std_logic;
-               SD_TXD_P_OUT       : out std_logic;
-               SD_TXD_N_OUT       : out std_logic;
-               SD_REFCLK_P_IN     : in  std_logic;  --not used
-               SD_REFCLK_N_IN     : in  std_logic;  --not used
-               SD_PRSNT_N_IN      : in  std_logic;  -- SFP Present ('0' = SFP in place, '1' = no SFP mounted)
-               SD_LOS_IN          : in  std_logic;  -- SFP Loss Of Signal ('0' = OK, '1' = no signal)
-               SD_TXDIS_OUT       : out  std_logic := '0'; -- SFP disable
+               SD_RXD_P_IN        : in  t_QUAD_BIT;    -- well, there's 4 of them...
+               SD_RXD_N_IN        : in  t_QUAD_BIT;
+               SD_TXD_P_OUT       : out t_QUAD_BIT;
+               SD_TXD_N_OUT       : out t_QUAD_BIT;
+               SD_REFCLK_P_IN     : in  t_QUAD_BIT;  --not used
+               SD_REFCLK_N_IN     : in  t_QUAD_BIT;  --not used
+               SD_PRSNT_N_IN      : in  t_QUAD_BIT;  -- SFP Present ('0' = SFP in place, '1' = no SFP mounted)
+               SD_LOS_IN          : in  t_QUAD_BIT;  -- SFP Loss Of Signal ('0' = OK, '1' = no signal)
+               SD_TXDIS_OUT       : out t_QUAD_BIT := (others => '0'); -- SFP disable
                --Control Interface
-               SCI_DATA_IN        : in  std_logic_vector(7 downto 0) := (others => '0');
-               SCI_DATA_OUT       : out std_logic_vector(7 downto 0) := (others => '0');
-               SCI_ADDR           : in  std_logic_vector(8 downto 0) := (others => '0');
-               SCI_READ           : in  std_logic := '0';
-               SCI_WRITE          : in  std_logic := '0';
-               SCI_ACK            : out std_logic := '0';
-               SCI_NACK           : out std_logic := '0';
+               SCI_DATA_IN                             : in std_logic_vector(7 downto 0) := (others => '0');
+               SCI_DATA_OUT                    : out std_logic_vector(7 downto 0) := (others => '0');
+               SCI_ADDR                                        : in std_logic_vector(8 downto 0) := (others => '0');
+               SCI_READ                                        : in std_logic := '0';
+               SCI_WRITE                               : in std_logic := '0';
+               SCI_ACK                                 : out std_logic := '0';
+               SCI_NACK                                        : out std_logic := '0';
                -- Status and control port
                STAT_OP            : out std_logic_vector (15 downto 0);
                CTRL_OP            : in  std_logic_vector (15 downto 0) := (others => '0');
@@ -81,7 +81,7 @@ architecture med_ecp3_sfp_sync_down_arch of med_ecp3_sfp_sync_down is
   attribute syn_sharing : string;
   attribute syn_sharing of med_ecp3_sfp_sync_down_arch : architecture is "off";
 
-\r
+
 
 component DCS
 -- synthesis translate_off
@@ -102,95 +102,104 @@ end component;
 
 --signal refclk_p_in_S                 : std_logic;    --PL!
 --signal refclk_n_in_S                 : std_logic;    --PL!
---signal refclk2core_S                 : std_logic;    --PL!\r
-
-signal clk_200_i         : std_logic;
-signal clk_200_internal  : std_logic;
-signal clk_rx_full       : std_logic;
-signal clk_rx_half       : std_logic;
-signal clk_tx_full       : std_logic;
-signal clk_tx_half       : std_logic;
-
-signal tx_data           : std_logic_vector(7 downto 0);
-signal tx_k              : std_logic;
-signal rx_data           : std_logic_vector(7 downto 0);
-signal rx_k              : std_logic;
-signal rx_error          : std_logic;
-
-signal rst_n             : std_logic;
-signal rst                                             : std_logic;            -- PL!
-signal rx_serdes_rst     : std_logic;
-signal tx_serdes_rst     : std_logic;
-signal tx_pcs_rst        : std_logic;
-signal rx_pcs_rst        : std_logic;
-signal rst_qd            : std_logic;
-signal serdes_rst_qd     : std_logic;
-signal sd_los_i          : std_logic;  --PL!
-
-signal rx_los_low        : std_logic;
-signal lsm_status        : std_logic;
-signal rx_cdr_lol        : std_logic;
-signal tx_pll_lol        : std_logic;
-
-signal sci_ch_i          : std_logic_vector(3 downto 0);
-signal sci_qd_i          : std_logic;
-signal sci_reg_i         : std_logic;
-signal sci_addr_i        : std_logic_vector(8 downto 0);
-signal sci_data_in_i     : std_logic_vector(7 downto 0);
-signal sci_data_out_i    : std_logic_vector(7 downto 0);
-signal sci_read_i        : std_logic;
-signal sci_write_i       : std_logic;
-signal sci_write_shift_i : std_logic_vector(2 downto 0);
-signal sci_read_shift_i  : std_logic_vector(2 downto 0);
-
-signal wa_position        : std_logic_vector(15 downto 0) := x"FFFF";
-signal wa_position_rx     : std_logic_vector(15 downto 0) := x"FFFF";
-signal tx_allow           : std_logic;
-signal rx_allow           : std_logic;
-signal tx_allow_q         : std_logic;
-signal rx_allow_q         : std_logic;
-signal link_phase_S                    : std_logic;    --PL!
-signal request_retr_i     : std_logic;
-signal start_retr_i       : std_logic;
-signal request_retr_position_i  : std_logic_vector(7 downto 0);
-signal start_retr_position_i    : std_logic_vector(7 downto 0);
-signal send_link_reset_i  : std_logic;
-signal make_link_reset_i  : std_logic;
-signal got_link_ready_i   : std_logic;
-signal internal_make_link_reset_out : std_logic;
-
-signal stat_rx_control_i  : std_logic_vector(31 downto 0);
-signal stat_tx_control_i  : std_logic_vector(31 downto 0);
-signal debug_rx_control_i : std_logic_vector(31 downto 0);
-signal debug_tx_control_i : std_logic_vector(31 downto 0);
-signal rx_fsm_state       : std_logic_vector(3 downto 0);
-signal tx_fsm_state       : std_logic_vector(3 downto 0);
-signal debug_reg          : std_logic_vector(63 downto 0);
+--signal refclk2core_S                 : std_logic;    --PL!
+
+signal clk_200_i                                                               : std_logic;
+signal clk_200_internal                                                : std_logic;
+
+signal rst_n                                                                   : std_logic;
+signal rst                                                                             : std_logic;            -- PL!
+
+---------------------------
+-- signals for downlinks --
+---------------------------
+signal clk_rx_full                                                     : t_QUAD_BIT;
+signal clk_rx_half                                                     : t_QUAD_BIT;
+signal clk_tx_full                                                     : t_QUAD_BIT;
+signal clk_tx_half                                                     : t_QUAD_BIT;
+
+signal tx_data                                                         : t_QUAD_BYTE;
+signal tx_k                                                                    : t_QUAD_BIT;
+signal rx_data                                                         : t_QUAD_BYTE;
+signal rx_k                                                                    : t_QUAD_BIT;
+signal rx_error                                                                : t_QUAD_BIT;
+
+signal rx_serdes_rst                                           : t_QUAD_BIT;
+signal tx_serdes_rst                                           : t_QUAD_BIT;
+signal tx_pcs_rst                                                      : t_QUAD_BIT;
+signal rx_pcs_rst                                                      : t_QUAD_BIT;
+signal rst_qd                                                          : t_QUAD_BIT;
+signal serdes_rst_qd                                           : t_QUAD_BIT;
+signal sd_los_i                                                                : t_QUAD_BIT;   --PL!
+
+signal rx_los_low                                                      : t_QUAD_BIT;
+signal lsm_status                                                      : t_QUAD_BIT;
+signal rx_cdr_lol                                                      : t_QUAD_BIT;
+signal tx_pll_lol                                                      : t_QUAD_BIT;
+
+signal wa_position                                             : t_QUAD_WORD   := (others => (others => '1'));
+signal wa_position_rx                                          : t_QUAD_WORD   := (others => (others => '1'));
+signal tx_allow                                                                : t_QUAD_BIT;
+signal rx_allow                                                                : t_QUAD_BIT;
+signal tx_allow_q                                                      : t_QUAD_BIT;
+signal rx_allow_q                                                      : t_QUAD_BIT;
+signal link_phase_S                                            : t_QUAD_BIT;   --PL!
+signal request_retr_i                                          : t_QUAD_BIT;
+signal start_retr_i                                            : t_QUAD_BIT;
+signal request_retr_position_i                 : t_QUAD_BYTE;
+signal start_retr_position_i                   : t_QUAD_BYTE;
+signal send_link_reset_i                                       : t_QUAD_BIT;
+signal make_link_reset_i                                       : t_QUAD_BIT;
+signal got_link_ready_i                                        : t_QUAD_BIT;
+signal internal_make_link_reset_out    : t_QUAD_BIT;
+
+signal stat_rx_control_i                                       : t_QUAD_LWORD;
+signal stat_tx_control_i                                       : t_QUAD_LWORD;
+signal debug_rx_control_i                              : t_QUAD_LWORD;
+signal debug_tx_control_i                              : t_QUAD_LWORD;
+signal rx_fsm_state                                            : t_QUAD_NIBL;
+signal tx_fsm_state                                            : t_QUAD_NIBL;
+
+
+signal sci_ch_i                                                                : std_logic_vector(3 downto 0);
+signal sci_qd_i                                                                : std_logic;
+signal sci_reg_i                                                               : std_logic;
+signal sci_addr_i                                                              : std_logic_vector(8 downto 0);
+signal sci_data_in_i                                                   : std_logic_vector(7 downto 0);
+signal sci_data_out_i                                          : std_logic_vector(7 downto 0);
+signal sci_read_i                                                              : std_logic;
+signal sci_write_i                                                     : std_logic;
+signal sci_write_shift_i                                       : std_logic_vector(2 downto 0);
+signal sci_read_shift_i                                                : std_logic_vector(2 downto 0);
+
+signal debug_reg                                                               : std_logic_vector(63 downto 0);
 
 type sci_ctrl is (IDLE, SCTRL, SCTRL_WAIT, SCTRL_WAIT2, SCTRL_FINISH, GET_WA, GET_WA_WAIT, GET_WA_WAIT2, GET_WA_FINISH);
-signal sci_state         : sci_ctrl;
-signal sci_timer         : unsigned(12 downto 0) := (others => '0');
-signal start_timer       : unsigned(18 downto 0) := (others => '0');
-signal watchdog_timer  : unsigned(20 downto 0) := (others => '0');
-signal watchdog_trigger        : std_logic :='0';
+signal sci_state                                                               : sci_ctrl;
+signal sci_timer                                                               : unsigned(12 downto 0) := (others => '0');
+signal start_timer                                                     : unsigned(18 downto 0) := (others => '0');
+signal watchdog_timer                                          : unsigned(20 downto 0) := (others => '0');
+signal watchdog_trigger                                                : std_logic :='0';
 
 begin
 
-clk_200_internal <= CLK;       \r
+clk_200_internal <= CLK;       
        
-CLK_RX_HALF_OUT        <= clk_rx_half;
-CLK_RX_FULL_OUT        <= clk_rx_full;
-CLK_TX_HALF_OUT        <= clk_tx_half;
-CLK_TX_FULL_OUT        <= clk_tx_full;
+CLK_RX_HALF_OUT        <= clk_rx_half(0);
+CLK_RX_FULL_OUT        <= clk_rx_full(0);
+CLK_TX_HALF_OUT        <= clk_tx_half(0);
+CLK_TX_FULL_OUT        <= clk_tx_full(0);
 
 
 
-SD_TXDIS_OUT <= '0'; --not (rx_allow_q or not IS_SLAVE);   --slave only switches on when RX is ready
+SD_TXDIS_OUT <= (others => '0'); --not (rx_allow_q or not IS_SLAVE);   --slave only switches on when RX is ready
 
 
---rst_n <= not CLEAR;  PL!\r
-rst_n                                  <= not(CLEAR or sd_los_i or internal_make_link_reset_out or watchdog_trigger);
-rst                                    <=              (CLEAR or sd_los_i or internal_make_link_reset_out or watchdog_trigger);
+--rst_n <= not CLEAR;  PL!
+--rst_n                                        <= not(CLEAR or sd_los_i or internal_make_link_reset_out or watchdog_trigger);
+--rst                                  <=              (CLEAR or sd_los_i or internal_make_link_reset_out or watchdog_trigger);
+rst_n                                  <= 0    when (CLEAR='1') or (sd_los_i='1') or (internal_make_link_reset_out='1') or (watchdog_trigger='1') else '1';
+rst                                    <=      1       when (CLEAR='1') or (sd_los_i='1') or (internal_make_link_reset_out='1') or (watchdog_trigger='1') else '0';
 
 
 gen_slave_clock : if IS_SYNC_SLAVE = c_YES generate
@@ -206,83 +215,195 @@ end generate;
 -- Serdes
 -------------------------------------------------      
 THE_SERDES : entity work.serdes_sync_downstream
-  port map(
---  refclkp                                    =>      PCSA_REFCLKP,           -- external refclock straight into serdes       PL!\r
---      refclkn                                        => PCSA_REFCLKN,                -- external refclock straight into serdes       PL!
-    hdinp_ch0            => SD_RXD_P_IN,
-    hdinn_ch0            => SD_RXD_N_IN,
-    hdoutp_ch0           => SD_TXD_P_OUT,
-    hdoutn_ch0           => SD_TXD_N_OUT,
---    rxiclk_ch0           => clk_200_i,               -- read fifo is no longer present! PL!
-    txiclk_ch0           => clk_200_i,
-    rx_full_clk_ch0      => clk_rx_full,
-    rx_half_clk_ch0      => clk_rx_half,
-    tx_full_clk_ch0      => clk_tx_full,
-    tx_half_clk_ch0      => clk_tx_half,
-    fpga_rxrefclk_ch0    => clk_200_internal,
-    txdata_ch0           => tx_data,
-    tx_k_ch0             => tx_k,
-    tx_force_disp_ch0    => '0',
-    tx_disp_sel_ch0      => '0',
-    rxdata_ch0           => rx_data,
-    rx_k_ch0             => rx_k,
-    rx_disp_err_ch0      => open,
-    rx_cv_err_ch0        => rx_error,
-    rx_serdes_rst_ch0_c  => rx_serdes_rst,
-    sb_felb_ch0_c        => '0',
-    sb_felb_rst_ch0_c    => '0',
-    tx_pcs_rst_ch0_c     => tx_pcs_rst,
-    tx_pwrup_ch0_c       => '1',
-    rx_pcs_rst_ch0_c     => rx_pcs_rst,
-    rx_pwrup_ch0_c       => '1',
-    rx_los_low_ch0_s     => rx_los_low,
-    lsm_status_ch0_s     => lsm_status,
-    rx_cdr_lol_ch0_s     => rx_cdr_lol,
-    tx_div2_mode_ch0_c   => '0',
-    rx_div2_mode_ch0_c   => '0',\r
-        refclk2fpga                            => open,        --refclk2core_S,
-    
-    SCI_WRDATA           => sci_data_in_i,
-    SCI_RDDATA           => sci_data_out_i,
-    SCI_ADDR             => sci_addr_i(5 downto 0),
-    SCI_SEL_QUAD         => sci_qd_i,
-    SCI_SEL_CH0          => sci_ch_i(0),
-    SCI_RD               => sci_read_i,
-    SCI_WRN              => sci_write_i,
-    
-    fpga_txrefclk        => clk_200_i,
-    tx_serdes_rst_c      => tx_serdes_rst,
-    tx_pll_lol_qd_s      => tx_pll_lol,
-    rst_qd_c             => rst_qd,
-    serdes_rst_qd_c      => serdes_rst_qd
+       port map(
+               --------------
+               -- CHANNEL0 --
+               --------------
+               hdinp_ch0                               => SD_RXD_P_IN(0),
+               hdinn_ch0                               => SD_RXD_N_IN(0),
+               hdoutp_ch0                              => SD_TXD_P_OUT(0),
+               hdoutn_ch0                              => SD_TXD_N_OUT(0),
+               -- rxiclk_ch0                           => clk_200_i,           -- read fifo is no longer present! PL!
+               txiclk_ch0                              => clk_200_i,
+               rx_full_clk_ch0         => clk_rx_full(0),
+               rx_half_clk_ch0         => clk_rx_half(0),
+               tx_full_clk_ch0         => clk_tx_full(0),
+               tx_half_clk_ch0         => clk_tx_half(0),
+               fpga_rxrefclk_ch0               => clk_200_internal,
+               txdata_ch0                              => tx_data(0),
+               tx_k_ch0                                        => tx_k(0),
+               tx_force_disp_ch0               => '0',
+               tx_disp_sel_ch0         => '0',
+               rxdata_ch0                              => rx_data(0),
+               rx_k_ch0                                        => rx_k(0),
+               rx_disp_err_ch0         => open,
+               rx_cv_err_ch0                   => rx_error(0),
+               rx_serdes_rst_ch0_c     => rx_serdes_rst(0),
+               sb_felb_ch0_c                   => '0',
+               sb_felb_rst_ch0_c               => '0',
+               tx_pcs_rst_ch0_c                => tx_pcs_rst(0),
+               tx_pwrup_ch0_c                  => '1',
+               rx_pcs_rst_ch0_c                => rx_pcs_rst(0),
+               rx_pwr_ch0_c                    => '1',
+               rx_los_low_ch0_s                => rx_los_low(0),
+               lsm_status_ch0_s                => lsm_status(0),
+               rx_cdr_lol_ch0_s                => rx_cdr_lol(0),
+               tx_div2_mode_ch0_c      => '0',
+               rx_div2_mode_ch0_c      => '0',
+
+               --------------
+               -- CHANNEL1 --
+               --------------
+               hdinp_ch1                               => SD_RXD_P_IN(1),
+               hdinn_ch1                               => SD_RXD_N_IN(1),
+               hdoutp_ch1                              => SD_TXD_P_OUT(1),
+               hdoutn_ch1                              => SD_TXD_N_OUT(1),
+               -- rxiclk_ch1                           => clk_200_i,           -- read fifo is no longer present! PL!
+               txiclk_ch1                              => clk_200_i,
+               rx_full_clk_ch1         => clk_rx_full(1),
+               rx_half_clk_ch1         => clk_rx_half(1),
+               tx_full_clk_ch1         => clk_tx_full(1),
+               tx_half_clk_ch1         => clk_tx_half(1),
+               fpga_rxrefclk_ch1               => clk_200_internal,
+               txdata_ch1                              => tx_data(1),
+               tx_k_ch1                                        => tx_k(1),
+               tx_force_disp_ch1               => '0',
+               tx_disp_sel_ch1         => '0',
+               rxdata_ch1                              => rx_data(1),
+               rx_k_ch1                                        => rx_k(1),
+               rx_disp_err_ch1         => open,
+               rx_cv_err_ch1                   => rx_error(1),
+               rx_serdes_rst_ch1_c     => rx_serdes_rst(1),
+               sb_felb_ch1_c                   => '0',
+               sb_felb_rst_ch1_c               => '0',
+               tx_pcs_rst_ch1_c                => tx_pcs_rst(1),
+               tx_pwrup_ch1_c                  => '1',
+               rx_pcs_rst_ch1_c                => rx_pcs_rst(1),
+               rx_pwr_ch1_c                    => '1',
+               rx_los_low_ch1_s                => rx_los_low(1),
+               lsm_status_ch1_s                => lsm_status(1),
+               rx_cdr_lol_ch1_s                => rx_cdr_lol(1),
+               tx_div2_mode_ch1_c      => '0',
+               rx_div2_mode_ch1_c      => '0',
+
+               --------------
+               -- CHANNEL2 --
+               --------------
+               hdinp_ch2                               => SD_RXD_P_IN(2),
+               hdinn_ch2                               => SD_RXD_N_IN(2),
+               hdoutp_ch2                              => SD_TXD_P_OUT(2),
+               hdoutn_ch2                              => SD_TXD_N_OUT(2),
+               -- rxiclk_ch2                           => clk_200_i,           -- read fifo is no longer present! PL!
+               txiclk_ch2                              => clk_200_i,
+               rx_full_clk_ch2         => clk_rx_full(2),
+               rx_half_clk_ch2         => clk_rx_half(2),
+               tx_full_clk_ch2         => clk_tx_full(2),
+               tx_half_clk_ch2         => clk_tx_half(2),
+               fpga_rxrefclk_ch2               => clk_200_internal,
+               txdata_ch2                              => tx_data(2),
+               tx_k_ch2                                        => tx_k(2),
+               tx_force_disp_ch2               => '0',
+               tx_disp_sel_ch2         => '0',
+               rxdata_ch2                              => rx_data(2),
+               rx_k_ch2                                        => rx_k(2),
+               rx_disp_err_ch2         => open,
+               rx_cv_err_ch2                   => rx_error(2),
+               rx_serdes_rst_ch2_c     => rx_serdes_rst(2),
+               sb_felb_ch2_c                   => '0',
+               sb_felb_rst_ch2_c               => '0',
+               tx_pcs_rst_ch2_c                => tx_pcs_rst(2),
+               tx_pwrup_ch2_c                  => '1',
+               rx_pcs_rst_ch2_c                => rx_pcs_rst(2),
+               rx_pwr_ch2_c                    => '1',
+               rx_los_low_ch2_s                => rx_los_low(2),
+               lsm_status_ch2_s                => lsm_status(2),
+               rx_cdr_lol_ch2_s                => rx_cdr_lol(2),
+               tx_div2_mode_ch2_c      => '0',
+               rx_div2_mode_ch2_c      => '0',
+
+               --------------
+               -- CHANNEL3 --
+               --------------
+               hdinp_ch3                               => SD_RXD_P_IN(3),
+               hdinn_ch3                               => SD_RXD_N_IN(3),
+               hdoutp_ch3                              => SD_TXD_P_OUT(3),
+               hdoutn_ch3                              => SD_TXD_N_OUT(3),
+               -- rxiclk_ch3                           => clk_200_i,           -- read fifo is no longer present! PL!
+               txiclk_ch3                              => clk_200_i,
+               rx_full_clk_ch3         => clk_rx_full(3),
+               rx_half_clk_ch3         => clk_rx_half(3),
+               tx_full_clk_ch3         => clk_tx_full(3),
+               tx_half_clk_ch3         => clk_tx_half(3),
+               fpga_rxrefclk_ch3               => clk_200_internal,
+               txdata_ch3                              => tx_data(3),
+               tx_k_ch3                                        => tx_k(3),
+               tx_force_disp_ch3               => '0',
+               tx_disp_sel_ch3         => '0',
+               rxdata_ch3                              => rx_data(3),
+               rx_k_ch3                                        => rx_k(3),
+               rx_disp_err_ch3         => open,
+               rx_cv_err_ch3                   => rx_error(3),
+               rx_serdes_rst_ch3_c     => rx_serdes_rst(3),
+               sb_felb_ch3_c                   => '0',
+               sb_felb_rst_ch3_c               => '0',
+               tx_pcs_rst_ch3_c                => tx_pcs_rst(3),
+               tx_pwrup_ch3_c                  => '1',
+               rx_pcs_rst_ch3_c                => rx_pcs_rst(3),
+               rx_pwr_ch3_c                    => '1',
+               rx_los_low_ch3_s                => rx_los_low(3),
+               lsm_status_ch3_s                => lsm_status(3),
+               rx_cdr_lol_ch3_s                => rx_cdr_lol(3),
+               tx_div2_mode_ch3_c      => '0',
+               rx_div2_mode_ch3_c      => '0',
+               
+               
+               refclk2fpga                             => open,        --refclk2core_S,
+
+               SCI_WRDATA                              => sci_data_in_i,
+               SCI_RDDATA                              => sci_data_out_i,
+               SCI_ADDR                                        => sci_addr_i(5 downto 0),
+               SCI_SEL_QUAD                    => sci_qd_i,
+               SCI_SEL_CH0                             => sci_ch_i(0),
+               SCI_RD                                  => sci_read_i,
+               SCI_WRN                                 => sci_write_i,
+
+               fpga_txrefclk                   => clk_200_i,
+               tx_serdes_rst_c         => tx_serdes_rst,
+               tx_pll_lol_qd_s         => tx_pll_lol,
+               rst_qd_c                                        => rst_qd,
+               serdes_rst_qd_c         => serdes_rst_qd
 
-    );
+);
 
--------------------------------------------------      
--- Reset FSM & Link states
--------------------------------------------------      
-THE_RX_FSM : rx_reset_fsm
-  port map(
-    RST_N               => rst_n,
-    RX_REFCLK           => clk_200_i,
-    TX_PLL_LOL_QD_S     => tx_pll_lol,
-    RX_SERDES_RST_CH_C  => rx_serdes_rst,
-    RX_CDR_LOL_CH_S     => rx_cdr_lol,
-    RX_LOS_LOW_CH_S     => rx_los_low,
-    RX_PCS_RST_CH_C     => rx_pcs_rst,
-    WA_POSITION         => wa_position_rx(3 downto 0),
-    STATE_OUT           => rx_fsm_state
-    );
-    
-THE_TX_FSM : tx_reset_fsm
-  port map(
-    RST_N           => rst_n,
-    TX_REFCLK       => clk_200_internal,
-    TX_PLL_LOL_QD_S => tx_pll_lol,
-    RST_QD_C        => rst_qd,
-    TX_PCS_RST_CH_C => tx_pcs_rst,
-    STATE_OUT       => tx_fsm_state
-    );
+
+channel :for i in c_HUB_CHILDREN-1 downto 0 generate
+
+       -------------------------------------------------      
+       -- Reset FSM & DOWN-link states
+       -------------------------------------------------      
+       THE_RX_FSM : rx_reset_fsm
+               port map(
+                       RST_N                                           => rst_n,
+                       RX_REFCLK                               => clk_200_i,
+                       TX_PLL_LOL_QD_S         => tx_pll_lol(i),
+                       RX_SERDES_RST_CH_C      => rx_serdes_rst(i),
+                       RX_CDR_LOL_CH_S         => rx_cdr_lol(i),
+                       RX_LOS_LOW_CH_S         => rx_los_low(i),
+                       RX_PCS_RST_CH_C         => rx_pcs_rst(i),
+                       WA_POSITION                             => wa_position_rx(i)(3 downto 0),
+                       STATE_OUT                               => rx_fsm_state(i)
+               );
+
+       THE_TX_FSM : tx_reset_fsm
+               port map(
+                       RST_N                                           => rst_n,
+                       TX_REFCLK                               => clk_200_internal,
+                       TX_PLL_LOL_QD_S         => tx_pll_lol,
+                       RST_QD_C                                        => rst_qd,
+                       TX_PCS_RST_CH_C         => tx_pcs_rst,
+                       STATE_OUT                               => tx_fsm_state
+               );
+end generate;
 
 -- Master does not do bit-locking    
 wa_position_rx <= wa_position when (IS_SYNC_SLAVE = c_YES) else x"0000";
@@ -306,17 +427,6 @@ end process;
 rx_allow_q <= rx_allow when rising_edge(SYSCLK);
 tx_allow_q <= tx_allow when rising_edge(SYSCLK);
 
-
---PROC_START_TIMER : process begin
-  --wait until rising_edge(clk_200_i);
-  --if got_link_ready_i = '1' then
-    --if start_timer(start_timer'left) = '0' then
-      --start_timer <= start_timer + 1;
-    --end if;  
-  --else
-    --start_timer <= (others => '0');
-  --end if;
---end process;
     
 PROC_START_TIMER : process(clk_200_i)
 begin
@@ -363,21 +473,21 @@ THE_TX : soda_tx_control
 
                START_RETRANSMIT_IN             => start_retr_i,               --TODO
                START_POSITION_IN                       => request_retr_position_i,    --TODO
-\r
+
                TX_DLM_PREVIEW_IN                       =>      TX_DLM_PREVIEW_IN,
                SEND_DLM                                                => TX_DLM,
                SEND_DLM_WORD                           => TX_DLM_WORD,
 
-               SEND_LINK_RESET_IN              => CTRL_OP(15),
+               SEND_link_RESET_IN              => CTRL_OP(15),
                TX_ALLOW_IN                                     => tx_allow,
-               RX_ALLOW_IN                                     => rx_allow,\r
-               LINK_PHASE_OUT                          =>      link_phase_S,           --PL!
+               RX_ALLOW_IN                                     => rx_allow,
+               link_PHASE_OUT                          =>      link_phase_S,           --PL!
 
                DEBUG_OUT                                       => debug_tx_control_i,
                STAT_REG_OUT                            => stat_tx_control_i
 );  
 
-LINK_PHASE_OUT         <= link_phase_S;                --PL!
+link_PHASE_OUT         <= link_phase_S;                --PL!
 -------------------------------------------------      
 -- RX Data
 -------------------------------------------------             
@@ -405,10 +515,10 @@ THE_RX_CONTROL : rx_control
     RX_DLM                         => RX_DLM,
     RX_DLM_WORD                    => RX_DLM_WORD,
     
-    SEND_LINK_RESET_OUT            => send_link_reset_i,
+    SEND_link_RESET_OUT            => send_link_reset_i,
     MAKE_RESET_OUT                 => make_link_reset_i,
     RX_ALLOW_IN                    => rx_allow,
-    GOT_LINK_READY                 => got_link_ready_i,
+    GOT_link_READY                 => got_link_ready_i,
 
     DEBUG_OUT                      => debug_rx_control_i,
     STAT_REG_OUT                   => stat_rx_control_i
@@ -547,5 +657,4 @@ STAT_OP(6)          <= make_link_reset_i;
 STAT_OP(5)             <= request_retr_i;
 STAT_OP(4)             <= start_retr_i;
 STAT_OP(3 downto 0) <= x"0" when rx_allow_q = '1' and tx_allow_q = '1' else x"7";
-end med_ecp3_sfp_sync_down_arch;
-
+end med_ecp3_sfp_sync_down_arch;
\ No newline at end of file
index 7295d518d7e548829152009191da19cf00d3b8ae..c96cf4afeef1b75172db01d22da4fdc4b051a5e3 100644 (file)
@@ -218,43 +218,43 @@ end generate;
 -------------------------------------------------      
 THE_SERDES : entity work.serdes_sync_upstream
   port map(
-    hdinp_ch0            => SD_RXD_P_IN,
-    hdinn_ch0            => SD_RXD_N_IN,
-    hdoutp_ch0           => SD_TXD_P_OUT,
-    hdoutn_ch0           => SD_TXD_N_OUT,
---    rxiclk_ch0           => clk_200_i,       -- no more RX-fifo
-    txiclk_ch0           => clk_200_i,
-    rx_full_clk_ch0      => clk_rx_full,
-    rx_half_clk_ch0      => clk_rx_half,
-    tx_full_clk_ch0      => clk_tx_full,
-    tx_half_clk_ch0      => clk_tx_half,
-    fpga_rxrefclk_ch0    => clk_200_internal,
-    txdata_ch0           => tx_data,
-    tx_k_ch0             => tx_k,
-    tx_force_disp_ch0    => '0',
-    tx_disp_sel_ch0      => '0',
-    rxdata_ch0           => rx_data,
-    rx_k_ch0             => rx_k,
-    rx_disp_err_ch0      => open,
-    rx_cv_err_ch0        => rx_error,
-    rx_serdes_rst_ch0_c  => rx_serdes_rst,
-    sb_felb_ch0_c        => '0',
-    sb_felb_rst_ch0_c    => '0',
-    tx_pcs_rst_ch0_c     => tx_pcs_rst,
-    tx_pwrup_ch0_c       => '1',
-    rx_pcs_rst_ch0_c     => rx_pcs_rst,
-    rx_pwrup_ch0_c       => '1',
-    rx_los_low_ch0_s     => rx_los_low,
-    lsm_status_ch0_s     => lsm_status,
-    rx_cdr_lol_ch0_s     => rx_cdr_lol,
-    tx_div2_mode_ch0_c   => '0',
-    rx_div2_mode_ch0_c   => '0',
+    hdinp_ch3            => SD_RXD_P_IN,
+    hdinn_ch3            => SD_RXD_N_IN,
+    hdoutp_ch3           => SD_TXD_P_OUT,
+    hdoutn_ch3           => SD_TXD_N_OUT,
+--    rxiclk_ch3           => clk_200_i,       -- no more RX-fifo
+    txiclk_ch3           => clk_200_i,
+    rx_full_clk_ch3      => clk_rx_full,
+    rx_half_clk_ch3      => clk_rx_half,
+    tx_full_clk_ch3      => clk_tx_full,
+    tx_half_clk_ch3      => clk_tx_half,
+    fpga_rxrefclk_ch3    => clk_200_internal,
+    txdata_ch3           => tx_data,
+    tx_k_ch3             => tx_k,
+    tx_force_disp_ch3    => '0',
+    tx_disp_sel_ch3      => '0',
+    rxdata_ch3           => rx_data,
+    rx_k_ch3             => rx_k,
+    rx_disp_err_ch3      => open,
+    rx_cv_err_ch3        => rx_error,
+    rx_serdes_rst_ch3_c  => rx_serdes_rst,
+    sb_felb_ch3_c        => '0',
+    sb_felb_rst_ch3_c    => '0',
+    tx_pcs_rst_ch3_c     => tx_pcs_rst,
+    tx_pwrup_ch3_c       => '1',
+    rx_pcs_rst_ch3_c     => rx_pcs_rst,
+    rx_pwrup_ch3_c       => '1',
+    rx_los_low_ch3_s     => rx_los_low,
+    lsm_status_ch3_s     => lsm_status,
+    rx_cdr_lol_ch3_s     => rx_cdr_lol,
+    tx_div2_mode_ch3_c   => '0',
+    rx_div2_mode_ch3_c   => '0',
     
     SCI_WRDATA           => sci_data_in_i,
     SCI_RDDATA           => sci_data_out_i,
     SCI_ADDR             => sci_addr_i(5 downto 0),
     SCI_SEL_QUAD         => sci_qd_i,
-    SCI_SEL_CH0          => sci_ch_i(0),
+    SCI_SEL_CH3          => sci_ch_i(0),
     SCI_RD               => sci_read_i,
     SCI_WRN              => sci_write_i,
     
index d3573a35ed74da7a846b87c6e63b6593084af1aa..9537910b48144c7ff3e3ad879e585629a24e3e85 100644 (file)
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DiamondModule name="serdes_sync_downstream" module="serdes_sync_downstream" VendorName="Lattice Semiconductor Corporation" generator="IPexpress" date="2014 01 21 12:02:05.297" version="8.1" type="Module" synthesis="synplify" source_format="VHDL">
+<DiamondModule name="serdes_sync_downstream" module="serdes_sync_downstream" VendorName="Lattice Semiconductor Corporation" generator="IPexpress" date="2014 02 04 15:43:09.526" version="8.1" type="Module" synthesis="synplify" source_format="VHDL">
   <Package>
-               <File name="serdes_sync_downstream.lpc" type="lpc" modified="2014 01 21 12:02:01.000"/>
-               <File name="serdes_sync_downstream.pp" type="pp" modified="2014 01 21 12:02:01.000"/>
-               <File name="serdes_sync_downstream.sym" type="sym" modified="2014 01 21 12:02:01.000"/>
-               <File name="serdes_sync_downstream.tft" type="tft" modified="2014 01 21 12:02:01.000"/>
-               <File name="serdes_sync_downstream.txt" type="pcs_module" modified="2014 01 21 12:02:01.000"/>
-               <File name="serdes_sync_downstream.vhd" type="top_level_vhdl" modified="2014 01 21 12:02:01.000"/>
+               <File name="serdes_sync_downstream.lpc" type="lpc" modified="2014 02 04 15:43:06.000"/>
+               <File name="serdes_sync_downstream.pp" type="pp" modified="2014 02 04 15:43:06.000"/>
+               <File name="serdes_sync_downstream.sym" type="sym" modified="2014 02 04 15:43:06.000"/>
+               <File name="serdes_sync_downstream.tft" type="tft" modified="2014 02 04 15:43:06.000"/>
+               <File name="serdes_sync_downstream.txt" type="pcs_module" modified="2014 02 04 15:43:06.000"/>
+               <File name="serdes_sync_downstream.vhd" type="top_level_vhdl" modified="2014 02 04 15:43:06.000"/>
   </Package>
 </DiamondModule>
index 9f4ab45bace4dbfd6a95226dd669bae0d79bef33..f11341b0bc9d428ea037a33eb86332238b69f0c2 100644 (file)
@@ -16,8 +16,8 @@ CoreRevision=8.1
 ModuleName=serdes_sync_downstream
 SourceFormat=VHDL
 ParameterFileVersion=1.0
-Date=01/21/2014
-Time=12:02:01
+Date=02/04/2014
+Time=15:43:06
 
 [Parameters]
 Verilog=0
@@ -28,9 +28,9 @@ Expression=BusA(0 to 7)
 Order=Big Endian [MSB:LSB]
 IO=0
 _mode0=RXTX
-_mode1=DISABLED
-_mode2=DISABLED
-_mode3=DISABLED
+_mode1=RXTX
+_mode2=RXTX
+_mode3=RXTX
 _protocol0=G8B10B
 _protocol1=G8B10B
 _protocol2=G8B10B
@@ -44,9 +44,9 @@ _pll_txsrc=INTERNAL
 _refclk_mult=10X
 _refclk_rate=200
 _tx_protocol0=G8B10B
-_tx_protocol1=DISABLED
-_tx_protocol2=DISABLED
-_tx_protocol3=DISABLED
+_tx_protocol1=G8B10B
+_tx_protocol2=G8B10B
+_tx_protocol3=G8B10B
 _tx_data_rate0=FULL
 _tx_data_rate1=FULL
 _tx_data_rate2=FULL
@@ -64,41 +64,41 @@ _tx_ficlk_rate1=200
 _tx_ficlk_rate2=200
 _tx_ficlk_rate3=200
 _pll_rxsrc0=INTERNAL
-_pll_rxsrc1=EXTERNAL
-_pll_rxsrc2=EXTERNAL
-_pll_rxsrc3=EXTERNAL
+_pll_rxsrc1=INTERNAL
+_pll_rxsrc2=INTERNAL
+_pll_rxsrc3=INTERNAL
 Multiplier0=
 Multiplier1=
 Multiplier2=
 Multiplier3=
 _rx_datarange0=2
-_rx_datarange1=2.5
-_rx_datarange2=2.5
-_rx_datarange3=2.5
+_rx_datarange1=2
+_rx_datarange2=2
+_rx_datarange3=2
 _rx_protocol0=G8B10B
-_rx_protocol1=DISABLED
-_rx_protocol2=DISABLED
-_rx_protocol3=DISABLED
+_rx_protocol1=G8B10B
+_rx_protocol2=G8B10B
+_rx_protocol3=G8B10B
 _rx_data_rate0=FULL
 _rx_data_rate1=FULL
 _rx_data_rate2=FULL
 _rx_data_rate3=FULL
 _rxrefclk_rate0=200
-_rxrefclk_rate1=250.0
-_rxrefclk_rate2=250.0
-_rxrefclk_rate3=250.0
+_rxrefclk_rate1=200
+_rxrefclk_rate2=200
+_rxrefclk_rate3=200
 _rx_data_width0=8
 _rx_data_width1=8
 _rx_data_width2=8
 _rx_data_width3=8
 _rx_fifo0=DISABLED
-_rx_fifo1=ENABLED
-_rx_fifo2=ENABLED
-_rx_fifo3=ENABLED
+_rx_fifo1=DISABLED
+_rx_fifo2=DISABLED
+_rx_fifo3=DISABLED
 _rx_ficlk_rate0=200
-_rx_ficlk_rate1=250.0
-_rx_ficlk_rate2=250.0
-_rx_ficlk_rate3=250.0
+_rx_ficlk_rate1=200
+_rx_ficlk_rate2=200
+_rx_ficlk_rate3=200
 _tdrv_ch0=0
 _tdrv_ch1=0
 _tdrv_ch2=0
@@ -120,9 +120,9 @@ _rterm_rx1=50
 _rterm_rx2=50
 _rterm_rx3=50
 _rx_dcc0=DC
-_rx_dcc1=AC
-_rx_dcc2=AC
-_rx_dcc3=AC
+_rx_dcc1=DC
+_rx_dcc2=DC
+_rx_dcc3=DC
 _los_threshold_mode0=LOS_E
 _los_threshold_mode1=LOS_E
 _los_threshold_mode2=LOS_E
@@ -191,9 +191,9 @@ _cc_match_mode1=1
 _cc_match_mode2=1
 _cc_match_mode3=1
 _k00=01
-_k01=00
-_k02=00
-_k03=00
+_k01=01
+_k02=01
+_k03=01
 _k10=00
 _k11=00
 _k12=00
@@ -207,9 +207,9 @@ _k31=01
 _k32=01
 _k33=01
 _byten00=00011100
-_byten01=00000000
-_byten02=00000000
-_byten03=00000000
+_byten01=00011100
+_byten02=00011100
+_byten03=00011100
 _byten10=00000000
 _byten11=00000000
 _byten12=00000000
index ec77632c4cf42b6a21b4f46b5808a095da25c09a..2bb812f3015665a330a7c7cb71d99d997f14dbac 100644 (file)
 
 DEVICE_NAME "LFE3-150EA"
 CH0_PROTOCOL            "G8B10B"
+CH1_PROTOCOL            "G8B10B"
+CH2_PROTOCOL            "G8B10B"
+CH3_PROTOCOL            "G8B10B"
 CH0_MODE                "RXTX"
-CH1_MODE                "DISABLED"
-CH2_MODE                "DISABLED"
-CH3_MODE                "DISABLED"
+CH1_MODE                "RXTX"
+CH2_MODE                "RXTX"
+CH3_MODE                "RXTX"
 CH0_CDR_SRC       "REFCLK_CORE"
+CH1_CDR_SRC       "REFCLK_CORE"
+CH2_CDR_SRC       "REFCLK_CORE"
+CH3_CDR_SRC       "REFCLK_CORE"
 PLL_SRC                 "REFCLK_CORE"
 TX_DATARATE_RANGE       "MEDHIGH"
 CH0_RX_DATARATE_RANGE   "MEDHIGH"
+CH1_RX_DATARATE_RANGE   "MEDHIGH"
+CH2_RX_DATARATE_RANGE   "MEDHIGH"
+CH3_RX_DATARATE_RANGE   "MEDHIGH"
 REFCK_MULT              "10X"
 #REFCLK_RATE            200
 CH0_RX_DATA_RATE        "FULL"
+CH1_RX_DATA_RATE        "FULL"
+CH2_RX_DATA_RATE        "FULL"
+CH3_RX_DATA_RATE        "FULL"
 CH0_TX_DATA_RATE        "FULL"
+CH1_TX_DATA_RATE        "FULL"
+CH2_TX_DATA_RATE        "FULL"
+CH3_TX_DATA_RATE        "FULL"
 CH0_TX_DATA_WIDTH       "8"
+CH1_TX_DATA_WIDTH       "8"
+CH2_TX_DATA_WIDTH       "8"
+CH3_TX_DATA_WIDTH       "8"
 CH0_RX_DATA_WIDTH        "8"
+CH1_RX_DATA_WIDTH        "8"
+CH2_RX_DATA_WIDTH        "8"
+CH3_RX_DATA_WIDTH        "8"
 CH0_TX_FIFO       "DISABLED"
+CH1_TX_FIFO       "ENABLED"
+CH2_TX_FIFO       "ENABLED"
+CH3_TX_FIFO       "ENABLED"
 CH0_RX_FIFO        "DISABLED"
+CH1_RX_FIFO        "DISABLED"
+CH2_RX_FIFO        "DISABLED"
+CH3_RX_FIFO        "DISABLED"
 CH0_TDRV      "0"
+CH1_TDRV      "0"
+CH2_TDRV      "0"
+CH3_TDRV      "0"
 #CH0_TX_FICLK_RATE      200
+#CH1_TX_FICLK_RATE      200
+#CH2_TX_FICLK_RATE      200
+#CH3_TX_FICLK_RATE      200
 #CH0_RXREFCLK_RATE        "200"
+#CH1_RXREFCLK_RATE        "200"
+#CH2_RXREFCLK_RATE        "200"
+#CH3_RXREFCLK_RATE        "200"
 #CH0_RX_FICLK_RATE      200
+#CH1_RX_FICLK_RATE      200
+#CH2_RX_FICLK_RATE      200
+#CH3_RX_FICLK_RATE      200
 CH0_TX_PRE              "DISABLED"
+CH1_TX_PRE              "DISABLED"
+CH2_TX_PRE              "DISABLED"
+CH3_TX_PRE              "DISABLED"
 CH0_RTERM_TX            "50"
+CH1_RTERM_TX            "50"
+CH2_RTERM_TX            "50"
+CH3_RTERM_TX            "50"
 CH0_RX_EQ               "DISABLED"
+CH1_RX_EQ               "DISABLED"
+CH2_RX_EQ               "DISABLED"
+CH3_RX_EQ               "DISABLED"
 CH0_RTERM_RX            "50"
+CH1_RTERM_RX            "50"
+CH2_RTERM_RX            "50"
+CH3_RTERM_RX            "50"
 CH0_RX_DCC              "DC"
+CH1_RX_DCC              "DC"
+CH2_RX_DCC              "DC"
+CH3_RX_DCC              "DC"
 CH0_LOS_THRESHOLD_LO       "2"
+CH1_LOS_THRESHOLD_LO       "2"
+CH2_LOS_THRESHOLD_LO       "2"
+CH3_LOS_THRESHOLD_LO       "2"
 PLL_TERM                "50"
 PLL_DCC                 "AC"
 PLL_LOL_SET             "0"
 CH0_TX_SB               "DISABLED"
+CH1_TX_SB               "DISABLED"
+CH2_TX_SB               "DISABLED"
+CH3_TX_SB               "DISABLED"
 CH0_RX_SB               "DISABLED"
+CH1_RX_SB               "DISABLED"
+CH2_RX_SB               "DISABLED"
+CH3_RX_SB               "DISABLED"
 CH0_TX_8B10B            "ENABLED"
+CH1_TX_8B10B            "ENABLED"
+CH2_TX_8B10B            "ENABLED"
+CH3_TX_8B10B            "ENABLED"
 CH0_RX_8B10B            "ENABLED"
+CH1_RX_8B10B            "ENABLED"
+CH2_RX_8B10B            "ENABLED"
+CH3_RX_8B10B            "ENABLED"
 CH0_COMMA_A             "1100000101"
+CH1_COMMA_A             "1100000101"
+CH2_COMMA_A             "1100000101"
+CH3_COMMA_A             "1100000101"
 CH0_COMMA_B             "0011111010"
+CH1_COMMA_B             "0011111010"
+CH2_COMMA_B             "0011111010"
+CH3_COMMA_B             "0011111010"
 CH0_COMMA_M             "1111111100"
+CH1_COMMA_M             "1111111100"
+CH2_COMMA_M             "1111111100"
+CH3_COMMA_M             "1111111100"
 CH0_RXWA                "ENABLED"
+CH1_RXWA                "ENABLED"
+CH2_RXWA                "ENABLED"
+CH3_RXWA                "ENABLED"
 CH0_ILSM                "ENABLED"
+CH1_ILSM                "ENABLED"
+CH2_ILSM                "ENABLED"
+CH3_ILSM                "ENABLED"
 CH0_CTC                 "DISABLED"
+CH1_CTC                 "DISABLED"
+CH2_CTC                 "DISABLED"
+CH3_CTC                 "DISABLED"
 CH0_CC_MATCH4           "0100011100"
+CH1_CC_MATCH4           "0100011100"
+CH2_CC_MATCH4           "0100011100"
+CH3_CC_MATCH4           "0100011100"
 CH0_CC_MATCH_MODE       "1"
+CH1_CC_MATCH_MODE       "1"
+CH2_CC_MATCH_MODE       "1"
+CH3_CC_MATCH_MODE       "1"
 CH0_CC_MIN_IPG          "3"
+CH1_CC_MIN_IPG          "3"
+CH2_CC_MIN_IPG          "3"
+CH3_CC_MIN_IPG          "3"
 CCHMARK                 "9"
 CCLMARK                 "7"
 CH0_SSLB                "DISABLED"
+CH1_SSLB                "DISABLED"
+CH2_SSLB                "DISABLED"
+CH3_SSLB                "DISABLED"
 CH0_SPLBPORTS           "DISABLED"
+CH1_SPLBPORTS           "DISABLED"
+CH2_SPLBPORTS           "DISABLED"
+CH3_SPLBPORTS           "DISABLED"
 CH0_PCSLBPORTS          "DISABLED"
+CH1_PCSLBPORTS          "DISABLED"
+CH2_PCSLBPORTS          "DISABLED"
+CH3_PCSLBPORTS          "DISABLED"
 INT_ALL                 "DISABLED"
 QD_REFCK2CORE           "ENABLED"
 
index 17cfd202fbcab9d5782e669ee659287bebe0bfa8..c5eaff89845272bd7c5a8709e0fd37e26ce7b3cc 100644 (file)
@@ -20,9 +20,9 @@ GENERIC(
 --  CONFIG_FILE : String  := "serdes_sync_downstream.txt";
 --  QUAD_MODE : String := "SINGLE";
 --  CH0_CDR_SRC   : String := "REFCLK_CORE";
---  CH1_CDR_SRC   : String := "REFCLK_EXT";
---  CH2_CDR_SRC   : String := "REFCLK_EXT";
---  CH3_CDR_SRC   : String := "REFCLK_EXT";
+--  CH1_CDR_SRC   : String := "REFCLK_CORE";
+--  CH2_CDR_SRC   : String := "REFCLK_CORE";
+--  CH3_CDR_SRC   : String := "REFCLK_CORE";
 --  PLL_SRC   : String := "REFCLK_CORE"
   );
 port (
@@ -1558,15 +1558,102 @@ entity serdes_sync_downstream is
     tx_pcs_rst_ch0_c    :   in std_logic;
     tx_pwrup_ch0_c    :   in std_logic;
     rx_pcs_rst_ch0_c    :   in std_logic;
-    rx_pwrup_ch0_c    :   in std_logic;
+    rx_pwr_ch0_c    :   in std_logic;
     rx_los_low_ch0_s   :   out std_logic;
     lsm_status_ch0_s   :   out std_logic;
     rx_cdr_lol_ch0_s   :   out std_logic;
     tx_div2_mode_ch0_c   : in std_logic;
     rx_div2_mode_ch0_c   : in std_logic;
 -- CH1 --
+    hdinp_ch1, hdinn_ch1    :   in std_logic;
+    hdoutp_ch1, hdoutn_ch1   :   out std_logic;
+    sci_sel_ch1    :   in std_logic;
+    txiclk_ch1    :   in std_logic;
+    rx_full_clk_ch1   :   out std_logic;
+    rx_half_clk_ch1   :   out std_logic;
+    tx_full_clk_ch1   :   out std_logic;
+    tx_half_clk_ch1   :   out std_logic;
+    fpga_rxrefclk_ch1    :   in std_logic;
+    txdata_ch1    :   in std_logic_vector (7 downto 0);
+    tx_k_ch1    :   in std_logic;
+    tx_force_disp_ch1    :   in std_logic;
+    tx_disp_sel_ch1    :   in std_logic;
+    rxdata_ch1   :   out std_logic_vector (7 downto 0);
+    rx_k_ch1   :   out std_logic;
+    rx_disp_err_ch1   :   out std_logic;
+    rx_cv_err_ch1   :   out std_logic;
+    rx_serdes_rst_ch1_c    :   in std_logic;
+    sb_felb_ch1_c    :   in std_logic;
+    sb_felb_rst_ch1_c    :   in std_logic;
+    tx_pcs_rst_ch1_c    :   in std_logic;
+    tx_pwrup_ch1_c    :   in std_logic;
+    rx_pcs_rst_ch1_c    :   in std_logic;
+    rx_pwr_ch1_c    :   in std_logic;
+    rx_los_low_ch1_s   :   out std_logic;
+    lsm_status_ch1_s   :   out std_logic;
+    rx_cdr_lol_ch1_s   :   out std_logic;
+    tx_div2_mode_ch1_c   : in std_logic;
+    rx_div2_mode_ch1_c   : in std_logic;
 -- CH2 --
+    hdinp_ch2, hdinn_ch2    :   in std_logic;
+    hdoutp_ch2, hdoutn_ch2   :   out std_logic;
+    sci_sel_ch2    :   in std_logic;
+    txiclk_ch2    :   in std_logic;
+    rx_full_clk_ch2   :   out std_logic;
+    rx_half_clk_ch2   :   out std_logic;
+    tx_full_clk_ch2   :   out std_logic;
+    tx_half_clk_ch2   :   out std_logic;
+    fpga_rxrefclk_ch2    :   in std_logic;
+    txdata_ch2    :   in std_logic_vector (7 downto 0);
+    tx_k_ch2    :   in std_logic;
+    tx_force_disp_ch2    :   in std_logic;
+    tx_disp_sel_ch2    :   in std_logic;
+    rxdata_ch2   :   out std_logic_vector (7 downto 0);
+    rx_k_ch2   :   out std_logic;
+    rx_disp_err_ch2   :   out std_logic;
+    rx_cv_err_ch2   :   out std_logic;
+    rx_serdes_rst_ch2_c    :   in std_logic;
+    sb_felb_ch2_c    :   in std_logic;
+    sb_felb_rst_ch2_c    :   in std_logic;
+    tx_pcs_rst_ch2_c    :   in std_logic;
+    tx_pwrup_ch2_c    :   in std_logic;
+    rx_pcs_rst_ch2_c    :   in std_logic;
+    rx_pwr_ch2_c    :   in std_logic;
+    rx_los_low_ch2_s   :   out std_logic;
+    lsm_status_ch2_s   :   out std_logic;
+    rx_cdr_lol_ch2_s   :   out std_logic;
+    tx_div2_mode_ch2_c   : in std_logic;
+    rx_div2_mode_ch2_c   : in std_logic;
 -- CH3 --
+    hdinp_ch3, hdinn_ch3    :   in std_logic;
+    hdoutp_ch3, hdoutn_ch3   :   out std_logic;
+    sci_sel_ch3    :   in std_logic;
+    txiclk_ch3    :   in std_logic;
+    rx_full_clk_ch3   :   out std_logic;
+    rx_half_clk_ch3   :   out std_logic;
+    tx_full_clk_ch3   :   out std_logic;
+    tx_half_clk_ch3   :   out std_logic;
+    fpga_rxrefclk_ch3    :   in std_logic;
+    txdata_ch3    :   in std_logic_vector (7 downto 0);
+    tx_k_ch3    :   in std_logic;
+    tx_force_disp_ch3    :   in std_logic;
+    tx_disp_sel_ch3    :   in std_logic;
+    rxdata_ch3   :   out std_logic_vector (7 downto 0);
+    rx_k_ch3   :   out std_logic;
+    rx_disp_err_ch3   :   out std_logic;
+    rx_cv_err_ch3   :   out std_logic;
+    rx_serdes_rst_ch3_c    :   in std_logic;
+    sb_felb_ch3_c    :   in std_logic;
+    sb_felb_rst_ch3_c    :   in std_logic;
+    tx_pcs_rst_ch3_c    :   in std_logic;
+    tx_pwrup_ch3_c    :   in std_logic;
+    rx_pcs_rst_ch3_c    :   in std_logic;
+    rx_pwr_ch3_c    :   in std_logic;
+    rx_los_low_ch3_s   :   out std_logic;
+    lsm_status_ch3_s   :   out std_logic;
+    rx_cdr_lol_ch3_s   :   out std_logic;
+    tx_div2_mode_ch3_c   : in std_logic;
+    rx_div2_mode_ch3_c   : in std_logic;
 ---- Miscillaneous ports
     sci_wrdata    :   in std_logic_vector (7 downto 0);
     sci_addr    :   in std_logic_vector (5 downto 0);
@@ -1577,6 +1664,7 @@ entity serdes_sync_downstream is
     fpga_txrefclk  :   in std_logic;
     tx_serdes_rst_c    :   in std_logic;
     tx_pll_lol_qd_s   :   out std_logic;
+    tx_sync_qd_c    :   in std_logic;
     rst_qd_c    :   in std_logic;
     refclk2fpga   :   out std_logic;
     serdes_rst_qd_c    :   in std_logic);
@@ -2104,22 +2192,28 @@ end component;
    attribute PLL_SRC of PCSD_INST : label is "REFCLK_CORE";
    attribute CH0_CDR_SRC: string;
    attribute CH0_CDR_SRC of PCSD_INST : label is "REFCLK_CORE";
+   attribute CH1_CDR_SRC: string;
+   attribute CH1_CDR_SRC of PCSD_INST : label is "REFCLK_CORE";
+   attribute CH2_CDR_SRC: string;
+   attribute CH2_CDR_SRC of PCSD_INST : label is "REFCLK_CORE";
+   attribute CH3_CDR_SRC: string;
+   attribute CH3_CDR_SRC of PCSD_INST : label is "REFCLK_CORE";
    attribute FREQUENCY_PIN_FF_RX_F_CLK_0: string;
    attribute FREQUENCY_PIN_FF_RX_F_CLK_0 of PCSD_INST : label is "200";
    attribute FREQUENCY_PIN_FF_RX_F_CLK_1: string;
-   attribute FREQUENCY_PIN_FF_RX_F_CLK_1 of PCSD_INST : label is "250.000";
+   attribute FREQUENCY_PIN_FF_RX_F_CLK_1 of PCSD_INST : label is "200";
    attribute FREQUENCY_PIN_FF_RX_F_CLK_2: string;
-   attribute FREQUENCY_PIN_FF_RX_F_CLK_2 of PCSD_INST : label is "250.000";
+   attribute FREQUENCY_PIN_FF_RX_F_CLK_2 of PCSD_INST : label is "200";
    attribute FREQUENCY_PIN_FF_RX_F_CLK_3: string;
-   attribute FREQUENCY_PIN_FF_RX_F_CLK_3 of PCSD_INST : label is "250.000";
+   attribute FREQUENCY_PIN_FF_RX_F_CLK_3 of PCSD_INST : label is "200";
    attribute FREQUENCY_PIN_FF_RX_H_CLK_0: string;
    attribute FREQUENCY_PIN_FF_RX_H_CLK_0 of PCSD_INST : label is "100";
    attribute FREQUENCY_PIN_FF_RX_H_CLK_1: string;
-   attribute FREQUENCY_PIN_FF_RX_H_CLK_1 of PCSD_INST : label is "125.000";
+   attribute FREQUENCY_PIN_FF_RX_H_CLK_1 of PCSD_INST : label is "100";
    attribute FREQUENCY_PIN_FF_RX_H_CLK_2: string;
-   attribute FREQUENCY_PIN_FF_RX_H_CLK_2 of PCSD_INST : label is "125.000";
+   attribute FREQUENCY_PIN_FF_RX_H_CLK_2 of PCSD_INST : label is "100";
    attribute FREQUENCY_PIN_FF_RX_H_CLK_3: string;
-   attribute FREQUENCY_PIN_FF_RX_H_CLK_3 of PCSD_INST : label is "125.000";
+   attribute FREQUENCY_PIN_FF_RX_H_CLK_3 of PCSD_INST : label is "100";
    attribute FREQUENCY_PIN_FF_TX_F_CLK_0: string;
    attribute FREQUENCY_PIN_FF_TX_F_CLK_0 of PCSD_INST : label is "200";
    attribute FREQUENCY_PIN_FF_TX_F_CLK_1: string;
@@ -2147,6 +2241,9 @@ signal fpsc_vhi : std_logic := '1';
 signal cin : std_logic_vector (11 downto 0) := "000000000000";
 signal cout : std_logic_vector (19 downto 0);
 signal    tx_full_clk_ch0_sig   :   std_logic;
+signal    tx_full_clk_ch1_sig   :   std_logic;
+signal    tx_full_clk_ch2_sig   :   std_logic;
+signal    tx_full_clk_ch3_sig   :   std_logic;
 
 signal    refclk2fpga_sig  :   std_logic;
 signal    tx_pll_lol_qd_sig  :   std_logic;
@@ -2170,9 +2267,18 @@ vhi_inst : VHI port map(Z => fpsc_vhi);
 
   refclk2fpga <= refclk2fpga_sig;
     rx_los_low_ch0_s <= rx_los_low_ch0_sig;
+    rx_los_low_ch1_s <= rx_los_low_ch1_sig;
+    rx_los_low_ch2_s <= rx_los_low_ch2_sig;
+    rx_los_low_ch3_s <= rx_los_low_ch3_sig;
     rx_cdr_lol_ch0_s <= rx_cdr_lol_ch0_sig;
+    rx_cdr_lol_ch1_s <= rx_cdr_lol_ch1_sig;
+    rx_cdr_lol_ch2_s <= rx_cdr_lol_ch2_sig;
+    rx_cdr_lol_ch3_s <= rx_cdr_lol_ch3_sig;
   tx_pll_lol_qd_s <= tx_pll_lol_qd_sig;
   tx_full_clk_ch0 <= tx_full_clk_ch0_sig;
+  tx_full_clk_ch1 <= tx_full_clk_ch1_sig;
+  tx_full_clk_ch2 <= tx_full_clk_ch2_sig;
+  tx_full_clk_ch3 <= tx_full_clk_ch3_sig;
 
 -- pcs_quad instance
 PCSD_INST : PCSD
@@ -2180,6 +2286,9 @@ PCSD_INST : PCSD
   generic map (CONFIG_FILE => USER_CONFIG_FILE,
                QUAD_MODE => "SINGLE",
                CH0_CDR_SRC => "REFCLK_CORE",
+               CH1_CDR_SRC => "REFCLK_CORE",
+               CH2_CDR_SRC => "REFCLK_CORE",
+               CH3_CDR_SRC => "REFCLK_CORE",
                PLL_SRC  => "REFCLK_CORE"
   )
 --synopsys translate_on
@@ -2271,7 +2380,7 @@ port map  (
   FFC_LANE_TX_RST_0 => tx_pcs_rst_ch0_c,
   FFC_TXPWDNB_0 => tx_pwrup_ch0_c,
   FFC_LANE_RX_RST_0 => rx_pcs_rst_ch0_c,
-  FFC_RXPWDNB_0 => rx_pwrup_ch0_c,
+  FFC_RXPWDNB_0 => rx_pwr_ch0_c,
   FFS_RLOS_LO_0 => rx_los_low_ch0_sig,
   FFS_RLOS_HI_0 => open,
   FFS_PCIE_CON_0 => open,
@@ -2294,10 +2403,10 @@ port map  (
   FFC_RATE_MODE_RX_0 => rx_div2_mode_ch0_c,
 
 ----- CH1 -----
-  HDOUTP1 => open,
-  HDOUTN1 => open,
-  HDINP1 => fpsc_vlo,
-  HDINN1 => fpsc_vlo,
+  HDOUTP1 => hdoutp_ch1,
+  HDOUTN1 => hdoutn_ch1,
+  HDINP1 => hdinp_ch1,
+  HDINN1 => hdinn_ch1,
   PCIE_TXDETRX_PR2TLB_1 => fpsc_vlo,
   PCIE_TXCOMPLIANCE_1 => fpsc_vlo,
   PCIE_RXPOLARITY_1 => fpsc_vlo,
@@ -2305,27 +2414,27 @@ port map  (
   PCIE_POWERDOWN_1_1 => fpsc_vlo,
   PCIE_RXVALID_1 => open,
   PCIE_PHYSTATUS_1 => open,
-  SCISELCH1 => fpsc_vlo,
-  SCIENCH1 => fpsc_vlo,
+  SCISELCH1 => sci_sel_ch1,
+  SCIENCH1 => fpsc_vhi,
   FF_RXI_CLK_1 => fpsc_vlo,
-  FF_TXI_CLK_1 => fpsc_vlo,
+  FF_TXI_CLK_1 => txiclk_ch1,
   FF_EBRD_CLK_1 => fpsc_vlo,
-  FF_RX_F_CLK_1 => open,
-  FF_RX_H_CLK_1 => open,
-  FF_TX_F_CLK_1 => open,
-  FF_TX_H_CLK_1 => open,
-  FFC_CK_CORE_RX_1 => fpsc_vlo,
-  FF_TX_D_1_0 => fpsc_vlo,
-  FF_TX_D_1_1 => fpsc_vlo,
-  FF_TX_D_1_2 => fpsc_vlo,
-  FF_TX_D_1_3 => fpsc_vlo,
-  FF_TX_D_1_4 => fpsc_vlo,
-  FF_TX_D_1_5 => fpsc_vlo,
-  FF_TX_D_1_6 => fpsc_vlo,
-  FF_TX_D_1_7 => fpsc_vlo,
-  FF_TX_D_1_8 => fpsc_vlo,
-  FF_TX_D_1_9 => fpsc_vlo,
-  FF_TX_D_1_10 => fpsc_vlo,
+  FF_RX_F_CLK_1 => rx_full_clk_ch1,
+  FF_RX_H_CLK_1 => rx_half_clk_ch1,
+  FF_TX_F_CLK_1 => tx_full_clk_ch1_sig,
+  FF_TX_H_CLK_1 => tx_half_clk_ch1,
+  FFC_CK_CORE_RX_1 => fpga_rxrefclk_ch1,
+  FF_TX_D_1_0 => txdata_ch1(0),
+  FF_TX_D_1_1 => txdata_ch1(1),
+  FF_TX_D_1_2 => txdata_ch1(2),
+  FF_TX_D_1_3 => txdata_ch1(3),
+  FF_TX_D_1_4 => txdata_ch1(4),
+  FF_TX_D_1_5 => txdata_ch1(5),
+  FF_TX_D_1_6 => txdata_ch1(6),
+  FF_TX_D_1_7 => txdata_ch1(7),
+  FF_TX_D_1_8 => tx_k_ch1,
+  FF_TX_D_1_9 => tx_force_disp_ch1,
+  FF_TX_D_1_10 => tx_disp_sel_ch1,
   FF_TX_D_1_11 => fpsc_vlo,
   FF_TX_D_1_12 => fpsc_vlo,
   FF_TX_D_1_13 => fpsc_vlo,
@@ -2339,17 +2448,17 @@ port map  (
   FF_TX_D_1_21 => fpsc_vlo,
   FF_TX_D_1_22 => fpsc_vlo,
   FF_TX_D_1_23 => fpsc_vlo,
-  FF_RX_D_1_0 => open,
-  FF_RX_D_1_1 => open,
-  FF_RX_D_1_2 => open,
-  FF_RX_D_1_3 => open,
-  FF_RX_D_1_4 => open,
-  FF_RX_D_1_5 => open,
-  FF_RX_D_1_6 => open,
-  FF_RX_D_1_7 => open,
-  FF_RX_D_1_8 => open,
-  FF_RX_D_1_9 => open,
-  FF_RX_D_1_10 => open,
+  FF_RX_D_1_0 => rxdata_ch1(0),
+  FF_RX_D_1_1 => rxdata_ch1(1),
+  FF_RX_D_1_2 => rxdata_ch1(2),
+  FF_RX_D_1_3 => rxdata_ch1(3),
+  FF_RX_D_1_4 => rxdata_ch1(4),
+  FF_RX_D_1_5 => rxdata_ch1(5),
+  FF_RX_D_1_6 => rxdata_ch1(6),
+  FF_RX_D_1_7 => rxdata_ch1(7),
+  FF_RX_D_1_8 => rx_k_ch1,
+  FF_RX_D_1_9 => rx_disp_err_ch1,
+  FF_RX_D_1_10 => rx_cv_err_ch1,
   FF_RX_D_1_11 => open,
   FF_RX_D_1_12 => open,
   FF_RX_D_1_13 => open,
@@ -2364,30 +2473,30 @@ port map  (
   FF_RX_D_1_22 => open,
   FF_RX_D_1_23 => open,
 
-  FFC_RRST_1 => fpsc_vlo,
+  FFC_RRST_1 => rx_serdes_rst_ch1_c,
   FFC_SIGNAL_DETECT_1 => fpsc_vlo,
-  FFC_SB_PFIFO_LP_1 => fpsc_vlo,
-  FFC_PFIFO_CLR_1 => fpsc_vlo,
+  FFC_SB_PFIFO_LP_1 => sb_felb_ch1_c,
+  FFC_PFIFO_CLR_1 => sb_felb_rst_ch1_c,
   FFC_SB_INV_RX_1 => fpsc_vlo,
   FFC_PCIE_CT_1 => fpsc_vlo,
   FFC_PCI_DET_EN_1 => fpsc_vlo,
   FFC_FB_LOOPBACK_1 => fpsc_vlo,
   FFC_ENABLE_CGALIGN_1 => fpsc_vlo,
   FFC_EI_EN_1 => fpsc_vlo,
-  FFC_LANE_TX_RST_1 => fpsc_vlo,
-  FFC_TXPWDNB_1 => fpsc_vlo,
-  FFC_LANE_RX_RST_1 => fpsc_vlo,
-  FFC_RXPWDNB_1 => fpsc_vlo,
-  FFS_RLOS_LO_1 => open,
+  FFC_LANE_TX_RST_1 => tx_pcs_rst_ch1_c,
+  FFC_TXPWDNB_1 => tx_pwrup_ch1_c,
+  FFC_LANE_RX_RST_1 => rx_pcs_rst_ch1_c,
+  FFC_RXPWDNB_1 => rx_pwr_ch1_c,
+  FFS_RLOS_LO_1 => rx_los_low_ch1_sig,
   FFS_RLOS_HI_1 => open,
   FFS_PCIE_CON_1 => open,
   FFS_PCIE_DONE_1 => open,
-  FFS_LS_SYNC_STATUS_1 => open,
+  FFS_LS_SYNC_STATUS_1 => lsm_status_ch1_s,
   FFS_CC_OVERRUN_1 => open,
   FFS_CC_UNDERRUN_1 => open,
   FFS_SKP_ADDED_1 => open,
   FFS_SKP_DELETED_1 => open,
-  FFS_RLOL_1 => open,
+  FFS_RLOL_1 => rx_cdr_lol_ch1_sig,
   FFS_RXFBFIFO_ERROR_1 => open,
   FFS_TXFBFIFO_ERROR_1 => open,
   LDR_CORE2TX_1 => fpsc_vlo,
@@ -2395,15 +2504,15 @@ port map  (
   LDR_RX2CORE_1 => open,
   FFS_CDR_TRAIN_DONE_1 => open,
   FFC_DIV11_MODE_TX_1 => fpsc_vlo,
-  FFC_RATE_MODE_TX_1 => fpsc_vlo,
+  FFC_RATE_MODE_TX_1 => tx_div2_mode_ch1_c,
   FFC_DIV11_MODE_RX_1 => fpsc_vlo,
-  FFC_RATE_MODE_RX_1 => fpsc_vlo,
+  FFC_RATE_MODE_RX_1 => rx_div2_mode_ch1_c,
 
 ----- CH2 -----
-  HDOUTP2 => open,
-  HDOUTN2 => open,
-  HDINP2 => fpsc_vlo,
-  HDINN2 => fpsc_vlo,
+  HDOUTP2 => hdoutp_ch2,
+  HDOUTN2 => hdoutn_ch2,
+  HDINP2 => hdinp_ch2,
+  HDINN2 => hdinn_ch2,
   PCIE_TXDETRX_PR2TLB_2 => fpsc_vlo,
   PCIE_TXCOMPLIANCE_2 => fpsc_vlo,
   PCIE_RXPOLARITY_2 => fpsc_vlo,
@@ -2411,27 +2520,27 @@ port map  (
   PCIE_POWERDOWN_2_1 => fpsc_vlo,
   PCIE_RXVALID_2 => open,
   PCIE_PHYSTATUS_2 => open,
-  SCISELCH2 => fpsc_vlo,
-  SCIENCH2 => fpsc_vlo,
+  SCISELCH2 => sci_sel_ch2,
+  SCIENCH2 => fpsc_vhi,
   FF_RXI_CLK_2 => fpsc_vlo,
-  FF_TXI_CLK_2 => fpsc_vlo,
+  FF_TXI_CLK_2 => txiclk_ch2,
   FF_EBRD_CLK_2 => fpsc_vlo,
-  FF_RX_F_CLK_2 => open,
-  FF_RX_H_CLK_2 => open,
-  FF_TX_F_CLK_2 => open,
-  FF_TX_H_CLK_2 => open,
-  FFC_CK_CORE_RX_2 => fpsc_vlo,
-  FF_TX_D_2_0 => fpsc_vlo,
-  FF_TX_D_2_1 => fpsc_vlo,
-  FF_TX_D_2_2 => fpsc_vlo,
-  FF_TX_D_2_3 => fpsc_vlo,
-  FF_TX_D_2_4 => fpsc_vlo,
-  FF_TX_D_2_5 => fpsc_vlo,
-  FF_TX_D_2_6 => fpsc_vlo,
-  FF_TX_D_2_7 => fpsc_vlo,
-  FF_TX_D_2_8 => fpsc_vlo,
-  FF_TX_D_2_9 => fpsc_vlo,
-  FF_TX_D_2_10 => fpsc_vlo,
+  FF_RX_F_CLK_2 => rx_full_clk_ch2,
+  FF_RX_H_CLK_2 => rx_half_clk_ch2,
+  FF_TX_F_CLK_2 => tx_full_clk_ch2_sig,
+  FF_TX_H_CLK_2 => tx_half_clk_ch2,
+  FFC_CK_CORE_RX_2 => fpga_rxrefclk_ch2,
+  FF_TX_D_2_0 => txdata_ch2(0),
+  FF_TX_D_2_1 => txdata_ch2(1),
+  FF_TX_D_2_2 => txdata_ch2(2),
+  FF_TX_D_2_3 => txdata_ch2(3),
+  FF_TX_D_2_4 => txdata_ch2(4),
+  FF_TX_D_2_5 => txdata_ch2(5),
+  FF_TX_D_2_6 => txdata_ch2(6),
+  FF_TX_D_2_7 => txdata_ch2(7),
+  FF_TX_D_2_8 => tx_k_ch2,
+  FF_TX_D_2_9 => tx_force_disp_ch2,
+  FF_TX_D_2_10 => tx_disp_sel_ch2,
   FF_TX_D_2_11 => fpsc_vlo,
   FF_TX_D_2_12 => fpsc_vlo,
   FF_TX_D_2_13 => fpsc_vlo,
@@ -2445,17 +2554,17 @@ port map  (
   FF_TX_D_2_21 => fpsc_vlo,
   FF_TX_D_2_22 => fpsc_vlo,
   FF_TX_D_2_23 => fpsc_vlo,
-  FF_RX_D_2_0 => open,
-  FF_RX_D_2_1 => open,
-  FF_RX_D_2_2 => open,
-  FF_RX_D_2_3 => open,
-  FF_RX_D_2_4 => open,
-  FF_RX_D_2_5 => open,
-  FF_RX_D_2_6 => open,
-  FF_RX_D_2_7 => open,
-  FF_RX_D_2_8 => open,
-  FF_RX_D_2_9 => open,
-  FF_RX_D_2_10 => open,
+  FF_RX_D_2_0 => rxdata_ch2(0),
+  FF_RX_D_2_1 => rxdata_ch2(1),
+  FF_RX_D_2_2 => rxdata_ch2(2),
+  FF_RX_D_2_3 => rxdata_ch2(3),
+  FF_RX_D_2_4 => rxdata_ch2(4),
+  FF_RX_D_2_5 => rxdata_ch2(5),
+  FF_RX_D_2_6 => rxdata_ch2(6),
+  FF_RX_D_2_7 => rxdata_ch2(7),
+  FF_RX_D_2_8 => rx_k_ch2,
+  FF_RX_D_2_9 => rx_disp_err_ch2,
+  FF_RX_D_2_10 => rx_cv_err_ch2,
   FF_RX_D_2_11 => open,
   FF_RX_D_2_12 => open,
   FF_RX_D_2_13 => open,
@@ -2470,30 +2579,30 @@ port map  (
   FF_RX_D_2_22 => open,
   FF_RX_D_2_23 => open,
 
-  FFC_RRST_2 => fpsc_vlo,
+  FFC_RRST_2 => rx_serdes_rst_ch2_c,
   FFC_SIGNAL_DETECT_2 => fpsc_vlo,
-  FFC_SB_PFIFO_LP_2 => fpsc_vlo,
-  FFC_PFIFO_CLR_2 => fpsc_vlo,
+  FFC_SB_PFIFO_LP_2 => sb_felb_ch2_c,
+  FFC_PFIFO_CLR_2 => sb_felb_rst_ch2_c,
   FFC_SB_INV_RX_2 => fpsc_vlo,
   FFC_PCIE_CT_2 => fpsc_vlo,
   FFC_PCI_DET_EN_2 => fpsc_vlo,
   FFC_FB_LOOPBACK_2 => fpsc_vlo,
   FFC_ENABLE_CGALIGN_2 => fpsc_vlo,
   FFC_EI_EN_2 => fpsc_vlo,
-  FFC_LANE_TX_RST_2 => fpsc_vlo,
-  FFC_TXPWDNB_2 => fpsc_vlo,
-  FFC_LANE_RX_RST_2 => fpsc_vlo,
-  FFC_RXPWDNB_2 => fpsc_vlo,
-  FFS_RLOS_LO_2 => open,
+  FFC_LANE_TX_RST_2 => tx_pcs_rst_ch2_c,
+  FFC_TXPWDNB_2 => tx_pwrup_ch2_c,
+  FFC_LANE_RX_RST_2 => rx_pcs_rst_ch2_c,
+  FFC_RXPWDNB_2 => rx_pwr_ch2_c,
+  FFS_RLOS_LO_2 => rx_los_low_ch2_sig,
   FFS_RLOS_HI_2 => open,
   FFS_PCIE_CON_2 => open,
   FFS_PCIE_DONE_2 => open,
-  FFS_LS_SYNC_STATUS_2 => open,
+  FFS_LS_SYNC_STATUS_2 => lsm_status_ch2_s,
   FFS_CC_OVERRUN_2 => open,
   FFS_CC_UNDERRUN_2 => open,
   FFS_SKP_ADDED_2 => open,
   FFS_SKP_DELETED_2 => open,
-  FFS_RLOL_2 => open,
+  FFS_RLOL_2 => rx_cdr_lol_ch2_sig,
   FFS_RXFBFIFO_ERROR_2 => open,
   FFS_TXFBFIFO_ERROR_2 => open,
   LDR_CORE2TX_2 => fpsc_vlo,
@@ -2501,15 +2610,15 @@ port map  (
   LDR_RX2CORE_2 => open,
   FFS_CDR_TRAIN_DONE_2 => open,
   FFC_DIV11_MODE_TX_2 => fpsc_vlo,
-  FFC_RATE_MODE_TX_2 => fpsc_vlo,
+  FFC_RATE_MODE_TX_2 => tx_div2_mode_ch2_c,
   FFC_DIV11_MODE_RX_2 => fpsc_vlo,
-  FFC_RATE_MODE_RX_2 => fpsc_vlo,
+  FFC_RATE_MODE_RX_2 => rx_div2_mode_ch2_c,
 
 ----- CH3 -----
-  HDOUTP3 => open,
-  HDOUTN3 => open,
-  HDINP3 => fpsc_vlo,
-  HDINN3 => fpsc_vlo,
+  HDOUTP3 => hdoutp_ch3,
+  HDOUTN3 => hdoutn_ch3,
+  HDINP3 => hdinp_ch3,
+  HDINN3 => hdinn_ch3,
   PCIE_TXDETRX_PR2TLB_3 => fpsc_vlo,
   PCIE_TXCOMPLIANCE_3 => fpsc_vlo,
   PCIE_RXPOLARITY_3 => fpsc_vlo,
@@ -2517,27 +2626,27 @@ port map  (
   PCIE_POWERDOWN_3_1 => fpsc_vlo,
   PCIE_RXVALID_3 => open,
   PCIE_PHYSTATUS_3 => open,
-  SCISELCH3 => fpsc_vlo,
-  SCIENCH3 => fpsc_vlo,
+  SCISELCH3 => sci_sel_ch3,
+  SCIENCH3 => fpsc_vhi,
   FF_RXI_CLK_3 => fpsc_vlo,
-  FF_TXI_CLK_3 => fpsc_vlo,
+  FF_TXI_CLK_3 => txiclk_ch3,
   FF_EBRD_CLK_3 => fpsc_vlo,
-  FF_RX_F_CLK_3 => open,
-  FF_RX_H_CLK_3 => open,
-  FF_TX_F_CLK_3 => open,
-  FF_TX_H_CLK_3 => open,
-  FFC_CK_CORE_RX_3 => fpsc_vlo,
-  FF_TX_D_3_0 => fpsc_vlo,
-  FF_TX_D_3_1 => fpsc_vlo,
-  FF_TX_D_3_2 => fpsc_vlo,
-  FF_TX_D_3_3 => fpsc_vlo,
-  FF_TX_D_3_4 => fpsc_vlo,
-  FF_TX_D_3_5 => fpsc_vlo,
-  FF_TX_D_3_6 => fpsc_vlo,
-  FF_TX_D_3_7 => fpsc_vlo,
-  FF_TX_D_3_8 => fpsc_vlo,
-  FF_TX_D_3_9 => fpsc_vlo,
-  FF_TX_D_3_10 => fpsc_vlo,
+  FF_RX_F_CLK_3 => rx_full_clk_ch3,
+  FF_RX_H_CLK_3 => rx_half_clk_ch3,
+  FF_TX_F_CLK_3 => tx_full_clk_ch3_sig,
+  FF_TX_H_CLK_3 => tx_half_clk_ch3,
+  FFC_CK_CORE_RX_3 => fpga_rxrefclk_ch3,
+  FF_TX_D_3_0 => txdata_ch3(0),
+  FF_TX_D_3_1 => txdata_ch3(1),
+  FF_TX_D_3_2 => txdata_ch3(2),
+  FF_TX_D_3_3 => txdata_ch3(3),
+  FF_TX_D_3_4 => txdata_ch3(4),
+  FF_TX_D_3_5 => txdata_ch3(5),
+  FF_TX_D_3_6 => txdata_ch3(6),
+  FF_TX_D_3_7 => txdata_ch3(7),
+  FF_TX_D_3_8 => tx_k_ch3,
+  FF_TX_D_3_9 => tx_force_disp_ch3,
+  FF_TX_D_3_10 => tx_disp_sel_ch3,
   FF_TX_D_3_11 => fpsc_vlo,
   FF_TX_D_3_12 => fpsc_vlo,
   FF_TX_D_3_13 => fpsc_vlo,
@@ -2551,17 +2660,17 @@ port map  (
   FF_TX_D_3_21 => fpsc_vlo,
   FF_TX_D_3_22 => fpsc_vlo,
   FF_TX_D_3_23 => fpsc_vlo,
-  FF_RX_D_3_0 => open,
-  FF_RX_D_3_1 => open,
-  FF_RX_D_3_2 => open,
-  FF_RX_D_3_3 => open,
-  FF_RX_D_3_4 => open,
-  FF_RX_D_3_5 => open,
-  FF_RX_D_3_6 => open,
-  FF_RX_D_3_7 => open,
-  FF_RX_D_3_8 => open,
-  FF_RX_D_3_9 => open,
-  FF_RX_D_3_10 => open,
+  FF_RX_D_3_0 => rxdata_ch3(0),
+  FF_RX_D_3_1 => rxdata_ch3(1),
+  FF_RX_D_3_2 => rxdata_ch3(2),
+  FF_RX_D_3_3 => rxdata_ch3(3),
+  FF_RX_D_3_4 => rxdata_ch3(4),
+  FF_RX_D_3_5 => rxdata_ch3(5),
+  FF_RX_D_3_6 => rxdata_ch3(6),
+  FF_RX_D_3_7 => rxdata_ch3(7),
+  FF_RX_D_3_8 => rx_k_ch3,
+  FF_RX_D_3_9 => rx_disp_err_ch3,
+  FF_RX_D_3_10 => rx_cv_err_ch3,
   FF_RX_D_3_11 => open,
   FF_RX_D_3_12 => open,
   FF_RX_D_3_13 => open,
@@ -2576,30 +2685,30 @@ port map  (
   FF_RX_D_3_22 => open,
   FF_RX_D_3_23 => open,
 
-  FFC_RRST_3 => fpsc_vlo,
+  FFC_RRST_3 => rx_serdes_rst_ch3_c,
   FFC_SIGNAL_DETECT_3 => fpsc_vlo,
-  FFC_SB_PFIFO_LP_3 => fpsc_vlo,
-  FFC_PFIFO_CLR_3 => fpsc_vlo,
+  FFC_SB_PFIFO_LP_3 => sb_felb_ch3_c,
+  FFC_PFIFO_CLR_3 => sb_felb_rst_ch3_c,
   FFC_SB_INV_RX_3 => fpsc_vlo,
   FFC_PCIE_CT_3 => fpsc_vlo,
   FFC_PCI_DET_EN_3 => fpsc_vlo,
   FFC_FB_LOOPBACK_3 => fpsc_vlo,
   FFC_ENABLE_CGALIGN_3 => fpsc_vlo,
   FFC_EI_EN_3 => fpsc_vlo,
-  FFC_LANE_TX_RST_3 => fpsc_vlo,
-  FFC_TXPWDNB_3 => fpsc_vlo,
-  FFC_LANE_RX_RST_3 => fpsc_vlo,
-  FFC_RXPWDNB_3 => fpsc_vlo,
-  FFS_RLOS_LO_3 => open,
+  FFC_LANE_TX_RST_3 => tx_pcs_rst_ch3_c,
+  FFC_TXPWDNB_3 => tx_pwrup_ch3_c,
+  FFC_LANE_RX_RST_3 => rx_pcs_rst_ch3_c,
+  FFC_RXPWDNB_3 => rx_pwr_ch3_c,
+  FFS_RLOS_LO_3 => rx_los_low_ch3_sig,
   FFS_RLOS_HI_3 => open,
   FFS_PCIE_CON_3 => open,
   FFS_PCIE_DONE_3 => open,
-  FFS_LS_SYNC_STATUS_3 => open,
+  FFS_LS_SYNC_STATUS_3 => lsm_status_ch3_s,
   FFS_CC_OVERRUN_3 => open,
   FFS_CC_UNDERRUN_3 => open,
   FFS_SKP_ADDED_3 => open,
   FFS_SKP_DELETED_3 => open,
-  FFS_RLOL_3 => open,
+  FFS_RLOL_3 => rx_cdr_lol_ch3_sig,
   FFS_RXFBFIFO_ERROR_3 => open,
   FFS_TXFBFIFO_ERROR_3 => open,
   LDR_CORE2TX_3 => fpsc_vlo,
@@ -2607,9 +2716,9 @@ port map  (
   LDR_RX2CORE_3 => open,
   FFS_CDR_TRAIN_DONE_3 => open,
   FFC_DIV11_MODE_TX_3 => fpsc_vlo,
-  FFC_RATE_MODE_TX_3 => fpsc_vlo,
+  FFC_RATE_MODE_TX_3 => tx_div2_mode_ch3_c,
   FFC_DIV11_MODE_RX_3 => fpsc_vlo,
-  FFC_RATE_MODE_RX_3 => fpsc_vlo,
+  FFC_RATE_MODE_RX_3 => rx_div2_mode_ch3_c,
 
 ----- Auxilliary ----
   SCIWDATA7 => sci_wrdata(7),
@@ -2645,7 +2754,7 @@ port map  (
   FFC_QUAD_RST => rst_qd_c,
   FFC_TRST => tx_serdes_rst_c,
   FFS_PLOL => tx_pll_lol_qd_sig,
-  FFC_SYNC_TOGGLE => fpsc_vlo,
+  FFC_SYNC_TOGGLE => tx_sync_qd_c,
   REFCK2CORE => refclk2fpga_sig,
   CIN0 => fpsc_vlo,
   CIN1 => fpsc_vlo,
index 17c7119cbb9576ed62206f5eae4b8b1a7967fe51..1a5ec6cc242abce8cc889209779331407ad063a5 100644 (file)
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<DiamondModule name="serdes_sync_upstream" module="serdes_sync_upstream" VendorName="Lattice Semiconductor Corporation" generator="IPexpress" date="2014 01 16 15:35:13.845" version="8.1" type="Module" synthesis="synplify" source_format="VHDL">
+<DiamondModule name="serdes_sync_upstream" module="serdes_sync_upstream" VendorName="Lattice Semiconductor Corporation" generator="IPexpress" date="2014 02 05 09:13:24.083" version="8.1" type="Module" synthesis="synplify" source_format="VHDL">
   <Package>
-               <File name="serdes_sync_upstream.lpc" type="lpc" modified="2014 01 16 15:35:12.000"/>
-               <File name="serdes_sync_upstream.pp" type="pp" modified="2014 01 16 15:35:12.000"/>
-               <File name="serdes_sync_upstream.sym" type="sym" modified="2014 01 16 15:35:12.000"/>
-               <File name="serdes_sync_upstream.tft" type="tft" modified="2014 01 16 15:34:47.000"/>
-               <File name="serdes_sync_upstream.txt" type="pcs_module" modified="2014 01 16 15:35:12.000"/>
-               <File name="serdes_sync_upstream.vhd" type="top_level_vhdl" modified="2014 01 16 15:34:47.000"/>
+               <File name="serdes_sync_upstream.lpc" type="lpc" modified="2014 02 05 09:13:21.000"/>
+               <File name="serdes_sync_upstream.pp" type="pp" modified="2014 02 05 09:13:21.000"/>
+               <File name="serdes_sync_upstream.sym" type="sym" modified="2014 02 05 09:13:21.000"/>
+               <File name="serdes_sync_upstream.tft" type="tft" modified="2014 02 05 09:13:21.000"/>
+               <File name="serdes_sync_upstream.txt" type="pcs_module" modified="2014 02 05 09:13:21.000"/>
+               <File name="serdes_sync_upstream.vhd" type="top_level_vhdl" modified="2014 02 05 09:13:21.000"/>
   </Package>
 </DiamondModule>
index df0331cba62450540b588344515a6558525aa4fe..872bc8c6494fb2c3bda4534ec236ff4ac8247970 100644 (file)
@@ -16,8 +16,8 @@ CoreRevision=8.1
 ModuleName=serdes_sync_upstream
 SourceFormat=VHDL
 ParameterFileVersion=1.0
-Date=01/16/2014
-Time=15:35:12
+Date=02/05/2014
+Time=09:13:21
 
 [Parameters]
 Verilog=0
@@ -27,10 +27,10 @@ Destination=Synplicity
 Expression=BusA(0 to 7)
 Order=Big Endian [MSB:LSB]
 IO=0
-_mode0=RXTX
+_mode0=DISABLED
 _mode1=DISABLED
 _mode2=DISABLED
-_mode3=DISABLED
+_mode3=RXTX
 _protocol0=G8B10B
 _protocol1=G8B10B
 _protocol2=G8B10B
@@ -43,10 +43,10 @@ _datarange=2.0
 _pll_txsrc=INTERNAL
 _refclk_mult=10X
 _refclk_rate=200.0
-_tx_protocol0=G8B10B
+_tx_protocol0=DISABLED
 _tx_protocol1=DISABLED
 _tx_protocol2=DISABLED
-_tx_protocol3=DISABLED
+_tx_protocol3=G8B10B
 _tx_data_rate0=FULL
 _tx_data_rate1=FULL
 _tx_data_rate2=FULL
@@ -66,7 +66,7 @@ _tx_ficlk_rate3=200.0
 _pll_rxsrc0=INTERNAL
 _pll_rxsrc1=EXTERNAL
 _pll_rxsrc2=EXTERNAL
-_pll_rxsrc3=EXTERNAL
+_pll_rxsrc3=INTERNAL
 Multiplier0=
 Multiplier1=
 Multiplier2=
@@ -74,11 +74,11 @@ Multiplier3=
 _rx_datarange0=2.0
 _rx_datarange1=2.5
 _rx_datarange2=2.5
-_rx_datarange3=2.5
-_rx_protocol0=G8B10B
+_rx_datarange3=2
+_rx_protocol0=DISABLED
 _rx_protocol1=DISABLED
 _rx_protocol2=DISABLED
-_rx_protocol3=DISABLED
+_rx_protocol3=G8B10B
 _rx_data_rate0=FULL
 _rx_data_rate1=FULL
 _rx_data_rate2=FULL
@@ -86,7 +86,7 @@ _rx_data_rate3=FULL
 _rxrefclk_rate0=200.0
 _rxrefclk_rate1=250.0
 _rxrefclk_rate2=250.0
-_rxrefclk_rate3=250.0
+_rxrefclk_rate3=200
 _rx_data_width0=8
 _rx_data_width1=8
 _rx_data_width2=8
@@ -94,11 +94,11 @@ _rx_data_width3=8
 _rx_fifo0=DISABLED
 _rx_fifo1=ENABLED
 _rx_fifo2=ENABLED
-_rx_fifo3=ENABLED
+_rx_fifo3=DISABLED
 _rx_ficlk_rate0=200.0
 _rx_ficlk_rate1=250.0
 _rx_ficlk_rate2=250.0
-_rx_ficlk_rate3=250.0
+_rx_ficlk_rate3=200
 _tdrv_ch0=0
 _tdrv_ch1=0
 _tdrv_ch2=0
@@ -122,7 +122,7 @@ _rterm_rx3=50
 _rx_dcc0=AC
 _rx_dcc1=AC
 _rx_dcc2=AC
-_rx_dcc3=AC
+_rx_dcc3=DC
 _los_threshold_mode0=LOS_E
 _los_threshold_mode1=LOS_E
 _los_threshold_mode2=LOS_E
@@ -192,8 +192,8 @@ _cc_match_mode2=1
 _cc_match_mode3=1
 _k00=01
 _k01=00
-_k02=00
-_k03=00
+_k02=01
+_k03=01
 _k10=00
 _k11=00
 _k12=00
@@ -208,8 +208,8 @@ _k32=01
 _k33=01
 _byten00=00011100
 _byten01=00000000
-_byten02=00000000
-_byten03=00000000
+_byten02=00011100
+_byten03=00011100
 _byten10=00000000
 _byten11=00000000
 _byten12=00000000
@@ -245,7 +245,7 @@ _rx_los_port3=Internal
 _sci_ports=ENABLED
 _sci_int_port=ENABLED
 _refck2core=DISABLED
-Regen=auto
+Regen=module
 PAR1=0
 PARTrace1=0
 PAR3=0
index 940e01a9f7ce44ace3facf6567a565473f0e620a..062baf6a732adece8d22dcfb2079b9f08eded8be 100644 (file)
@@ -4,54 +4,54 @@
 # end user to adjust the PCSD quad to the final design requirements.
 
 DEVICE_NAME "LFE3-150EA"
-CH0_PROTOCOL            "G8B10B"
-CH0_MODE                "RXTX"
+CH3_PROTOCOL            "G8B10B"
+CH0_MODE                "DISABLED"
 CH1_MODE                "DISABLED"
 CH2_MODE                "DISABLED"
-CH3_MODE                "DISABLED"
-CH0_CDR_SRC       "REFCLK_CORE"
+CH3_MODE                "RXTX"
+CH3_CDR_SRC       "REFCLK_CORE"
 PLL_SRC                 "REFCLK_CORE"
 TX_DATARATE_RANGE       "MEDHIGH"
-CH0_RX_DATARATE_RANGE   "MEDHIGH"
+CH3_RX_DATARATE_RANGE   "MEDHIGH"
 REFCK_MULT              "10X"
 #REFCLK_RATE            200.0
-CH0_RX_DATA_RATE        "FULL"
-CH0_TX_DATA_RATE        "FULL"
-CH0_TX_DATA_WIDTH       "8"
-CH0_RX_DATA_WIDTH        "8"
-CH0_TX_FIFO       "ENABLED"
-CH0_RX_FIFO        "DISABLED"
-CH0_TDRV      "0"
-#CH0_TX_FICLK_RATE      200.0
-#CH0_RXREFCLK_RATE        "200.0"
-#CH0_RX_FICLK_RATE      200.0
-CH0_TX_PRE              "DISABLED"
-CH0_RTERM_TX            "50"
-CH0_RX_EQ               "DISABLED"
-CH0_RTERM_RX            "50"
-CH0_RX_DCC              "AC"
-CH0_LOS_THRESHOLD_LO       "2"
+CH3_RX_DATA_RATE        "FULL"
+CH3_TX_DATA_RATE        "FULL"
+CH3_TX_DATA_WIDTH       "8"
+CH3_RX_DATA_WIDTH        "8"
+CH3_TX_FIFO       "ENABLED"
+CH3_RX_FIFO        "DISABLED"
+CH3_TDRV      "0"
+#CH3_TX_FICLK_RATE      200.0
+#CH3_RXREFCLK_RATE        "200"
+#CH3_RX_FICLK_RATE      200
+CH3_TX_PRE              "DISABLED"
+CH3_RTERM_TX            "50"
+CH3_RX_EQ               "DISABLED"
+CH3_RTERM_RX            "50"
+CH3_RX_DCC              "DC"
+CH3_LOS_THRESHOLD_LO       "2"
 PLL_TERM                "50"
 PLL_DCC                 "AC"
 PLL_LOL_SET             "0"
-CH0_TX_SB               "DISABLED"
-CH0_RX_SB               "DISABLED"
-CH0_TX_8B10B            "ENABLED"
-CH0_RX_8B10B            "ENABLED"
-CH0_COMMA_A             "1100000101"
-CH0_COMMA_B             "0011111010"
-CH0_COMMA_M             "1111111100"
-CH0_RXWA                "ENABLED"
-CH0_ILSM                "ENABLED"
-CH0_CTC                 "DISABLED"
-CH0_CC_MATCH4           "0100011100"
-CH0_CC_MATCH_MODE       "1"
-CH0_CC_MIN_IPG          "3"
+CH3_TX_SB               "DISABLED"
+CH3_RX_SB               "DISABLED"
+CH3_TX_8B10B            "ENABLED"
+CH3_RX_8B10B            "ENABLED"
+CH3_COMMA_A             "1100000101"
+CH3_COMMA_B             "0011111010"
+CH3_COMMA_M             "1111111100"
+CH3_RXWA                "ENABLED"
+CH3_ILSM                "ENABLED"
+CH3_CTC                 "DISABLED"
+CH3_CC_MATCH4           "0100011100"
+CH3_CC_MATCH_MODE       "1"
+CH3_CC_MIN_IPG          "3"
 CCHMARK                 "9"
 CCLMARK                 "7"
-CH0_SSLB                "DISABLED"
-CH0_SPLBPORTS           "DISABLED"
-CH0_PCSLBPORTS          "DISABLED"
+CH3_SSLB                "DISABLED"
+CH3_SPLBPORTS           "DISABLED"
+CH3_PCSLBPORTS          "DISABLED"
 INT_ALL                 "ENABLED"
 QD_REFCK2CORE           "DISABLED"
 
index 02b4eba5c5e07688eb55cf8cdd4d8d209cfb5c25..e1a71a56730000cd7efccb4c2bff41cde1121b5a 100644 (file)
@@ -22,7 +22,7 @@ GENERIC(
 --  CH0_CDR_SRC   : String := "REFCLK_CORE";
 --  CH1_CDR_SRC   : String := "REFCLK_EXT";
 --  CH2_CDR_SRC   : String := "REFCLK_EXT";
---  CH3_CDR_SRC   : String := "REFCLK_EXT";
+--  CH3_CDR_SRC   : String := "REFCLK_CORE";
 --  PLL_SRC   : String := "REFCLK_CORE"
   );
 port (
@@ -1535,38 +1535,38 @@ entity serdes_sync_upstream is
  port (
 ------------------
 -- CH0 --
-    hdinp_ch0, hdinn_ch0    :   in std_logic;
-    hdoutp_ch0, hdoutn_ch0   :   out std_logic;
-    sci_sel_ch0    :   in std_logic;
-    txiclk_ch0    :   in std_logic;
-    rx_full_clk_ch0   :   out std_logic;
-    rx_half_clk_ch0   :   out std_logic;
-    tx_full_clk_ch0   :   out std_logic;
-    tx_half_clk_ch0   :   out std_logic;
-    fpga_rxrefclk_ch0    :   in std_logic;
-    txdata_ch0    :   in std_logic_vector (7 downto 0);
-    tx_k_ch0    :   in std_logic;
-    tx_force_disp_ch0    :   in std_logic;
-    tx_disp_sel_ch0    :   in std_logic;
-    rxdata_ch0   :   out std_logic_vector (7 downto 0);
-    rx_k_ch0   :   out std_logic;
-    rx_disp_err_ch0   :   out std_logic;
-    rx_cv_err_ch0   :   out std_logic;
-    rx_serdes_rst_ch0_c    :   in std_logic;
-    sb_felb_ch0_c    :   in std_logic;
-    sb_felb_rst_ch0_c    :   in std_logic;
-    tx_pcs_rst_ch0_c    :   in std_logic;
-    tx_pwrup_ch0_c    :   in std_logic;
-    rx_pcs_rst_ch0_c    :   in std_logic;
-    rx_pwrup_ch0_c    :   in std_logic;
-    rx_los_low_ch0_s   :   out std_logic;
-    lsm_status_ch0_s   :   out std_logic;
-    rx_cdr_lol_ch0_s   :   out std_logic;
-    tx_div2_mode_ch0_c   : in std_logic;
-    rx_div2_mode_ch0_c   : in std_logic;
 -- CH1 --
 -- CH2 --
 -- CH3 --
+    hdinp_ch3, hdinn_ch3    :   in std_logic;
+    hdoutp_ch3, hdoutn_ch3   :   out std_logic;
+    sci_sel_ch3    :   in std_logic;
+    txiclk_ch3    :   in std_logic;
+    rx_full_clk_ch3   :   out std_logic;
+    rx_half_clk_ch3   :   out std_logic;
+    tx_full_clk_ch3   :   out std_logic;
+    tx_half_clk_ch3   :   out std_logic;
+    fpga_rxrefclk_ch3    :   in std_logic;
+    txdata_ch3    :   in std_logic_vector (7 downto 0);
+    tx_k_ch3    :   in std_logic;
+    tx_force_disp_ch3    :   in std_logic;
+    tx_disp_sel_ch3    :   in std_logic;
+    rxdata_ch3   :   out std_logic_vector (7 downto 0);
+    rx_k_ch3   :   out std_logic;
+    rx_disp_err_ch3   :   out std_logic;
+    rx_cv_err_ch3   :   out std_logic;
+    rx_serdes_rst_ch3_c    :   in std_logic;
+    sb_felb_ch3_c    :   in std_logic;
+    sb_felb_rst_ch3_c    :   in std_logic;
+    tx_pcs_rst_ch3_c    :   in std_logic;
+    tx_pwrup_ch3_c    :   in std_logic;
+    rx_pcs_rst_ch3_c    :   in std_logic;
+    rx_pwrup_ch3_c    :   in std_logic;
+    rx_los_low_ch3_s   :   out std_logic;
+    lsm_status_ch3_s   :   out std_logic;
+    rx_cdr_lol_ch3_s   :   out std_logic;
+    tx_div2_mode_ch3_c   : in std_logic;
+    rx_div2_mode_ch3_c   : in std_logic;
 ---- Miscillaneous ports
     sci_wrdata    :   in std_logic_vector (7 downto 0);
     sci_addr    :   in std_logic_vector (5 downto 0);
@@ -2102,8 +2102,8 @@ end component;
    attribute QUAD_MODE of PCSD_INST : label is "SINGLE";
    attribute PLL_SRC: string;
    attribute PLL_SRC of PCSD_INST : label is "REFCLK_CORE";
-   attribute CH0_CDR_SRC: string;
-   attribute CH0_CDR_SRC of PCSD_INST : label is "REFCLK_CORE";
+   attribute CH3_CDR_SRC: string;
+   attribute CH3_CDR_SRC of PCSD_INST : label is "REFCLK_CORE";
    attribute FREQUENCY_PIN_FF_RX_F_CLK_0: string;
    attribute FREQUENCY_PIN_FF_RX_F_CLK_0 of PCSD_INST : label is "200.000";
    attribute FREQUENCY_PIN_FF_RX_F_CLK_1: string;
@@ -2111,7 +2111,7 @@ end component;
    attribute FREQUENCY_PIN_FF_RX_F_CLK_2: string;
    attribute FREQUENCY_PIN_FF_RX_F_CLK_2 of PCSD_INST : label is "250.000";
    attribute FREQUENCY_PIN_FF_RX_F_CLK_3: string;
-   attribute FREQUENCY_PIN_FF_RX_F_CLK_3 of PCSD_INST : label is "250.000";
+   attribute FREQUENCY_PIN_FF_RX_F_CLK_3 of PCSD_INST : label is "200";
    attribute FREQUENCY_PIN_FF_RX_H_CLK_0: string;
    attribute FREQUENCY_PIN_FF_RX_H_CLK_0 of PCSD_INST : label is "100.000";
    attribute FREQUENCY_PIN_FF_RX_H_CLK_1: string;
@@ -2119,7 +2119,7 @@ end component;
    attribute FREQUENCY_PIN_FF_RX_H_CLK_2: string;
    attribute FREQUENCY_PIN_FF_RX_H_CLK_2 of PCSD_INST : label is "125.000";
    attribute FREQUENCY_PIN_FF_RX_H_CLK_3: string;
-   attribute FREQUENCY_PIN_FF_RX_H_CLK_3 of PCSD_INST : label is "125.000";
+   attribute FREQUENCY_PIN_FF_RX_H_CLK_3 of PCSD_INST : label is "100";
    attribute FREQUENCY_PIN_FF_TX_F_CLK_0: string;
    attribute FREQUENCY_PIN_FF_TX_F_CLK_0 of PCSD_INST : label is "200.000";
    attribute FREQUENCY_PIN_FF_TX_F_CLK_1: string;
@@ -2144,7 +2144,7 @@ signal fpsc_vlo : std_logic := '0';
 signal fpsc_vhi : std_logic := '1';
 signal cin : std_logic_vector (11 downto 0) := "000000000000";
 signal cout : std_logic_vector (19 downto 0);
-signal    tx_full_clk_ch0_sig   :   std_logic;
+signal    tx_full_clk_ch3_sig   :   std_logic;
 
 signal    refclk2fpga_sig  :   std_logic;
 signal    tx_pll_lol_qd_sig  :   std_logic;
@@ -2166,17 +2166,17 @@ begin
 vlo_inst : VLO port map(Z => fpsc_vlo);
 vhi_inst : VHI port map(Z => fpsc_vhi);
 
-    rx_los_low_ch0_s <= rx_los_low_ch0_sig;
-    rx_cdr_lol_ch0_s <= rx_cdr_lol_ch0_sig;
+    rx_los_low_ch3_s <= rx_los_low_ch3_sig;
+    rx_cdr_lol_ch3_s <= rx_cdr_lol_ch3_sig;
   tx_pll_lol_qd_s <= tx_pll_lol_qd_sig;
-  tx_full_clk_ch0 <= tx_full_clk_ch0_sig;
+  tx_full_clk_ch3 <= tx_full_clk_ch3_sig;
 
 -- pcs_quad instance
 PCSD_INST : PCSD
 --synopsys translate_off
   generic map (CONFIG_FILE => USER_CONFIG_FILE,
                QUAD_MODE => "SINGLE",
-               CH0_CDR_SRC => "REFCLK_CORE",
+               CH3_CDR_SRC => "REFCLK_CORE",
                PLL_SRC  => "REFCLK_CORE"
   )
 --synopsys translate_on
@@ -2185,10 +2185,10 @@ port map  (
   REFCLKN => fpsc_vlo,
 
 ----- CH0 -----
-  HDOUTP0 => hdoutp_ch0,
-  HDOUTN0 => hdoutn_ch0,
-  HDINP0 => hdinp_ch0,
-  HDINN0 => hdinn_ch0,
+  HDOUTP0 => open,
+  HDOUTN0 => open,
+  HDINP0 => fpsc_vlo,
+  HDINN0 => fpsc_vlo,
   PCIE_TXDETRX_PR2TLB_0 => fpsc_vlo,
   PCIE_TXCOMPLIANCE_0 => fpsc_vlo,
   PCIE_RXPOLARITY_0 => fpsc_vlo,
@@ -2196,27 +2196,27 @@ port map  (
   PCIE_POWERDOWN_0_1 => fpsc_vlo,
   PCIE_RXVALID_0 => open,
   PCIE_PHYSTATUS_0 => open,
-  SCISELCH0 => sci_sel_ch0,
-  SCIENCH0 => fpsc_vhi,
+  SCISELCH0 => fpsc_vlo,
+  SCIENCH0 => fpsc_vlo,
   FF_RXI_CLK_0 => fpsc_vlo,
-  FF_TXI_CLK_0 => txiclk_ch0,
+  FF_TXI_CLK_0 => fpsc_vlo,
   FF_EBRD_CLK_0 => fpsc_vlo,
-  FF_RX_F_CLK_0 => rx_full_clk_ch0,
-  FF_RX_H_CLK_0 => rx_half_clk_ch0,
-  FF_TX_F_CLK_0 => tx_full_clk_ch0_sig,
-  FF_TX_H_CLK_0 => tx_half_clk_ch0,
-  FFC_CK_CORE_RX_0 => fpga_rxrefclk_ch0,
-  FF_TX_D_0_0 => txdata_ch0(0),
-  FF_TX_D_0_1 => txdata_ch0(1),
-  FF_TX_D_0_2 => txdata_ch0(2),
-  FF_TX_D_0_3 => txdata_ch0(3),
-  FF_TX_D_0_4 => txdata_ch0(4),
-  FF_TX_D_0_5 => txdata_ch0(5),
-  FF_TX_D_0_6 => txdata_ch0(6),
-  FF_TX_D_0_7 => txdata_ch0(7),
-  FF_TX_D_0_8 => tx_k_ch0,
-  FF_TX_D_0_9 => tx_force_disp_ch0,
-  FF_TX_D_0_10 => tx_disp_sel_ch0,
+  FF_RX_F_CLK_0 => open,
+  FF_RX_H_CLK_0 => open,
+  FF_TX_F_CLK_0 => open,
+  FF_TX_H_CLK_0 => open,
+  FFC_CK_CORE_RX_0 => fpsc_vlo,
+  FF_TX_D_0_0 => fpsc_vlo,
+  FF_TX_D_0_1 => fpsc_vlo,
+  FF_TX_D_0_2 => fpsc_vlo,
+  FF_TX_D_0_3 => fpsc_vlo,
+  FF_TX_D_0_4 => fpsc_vlo,
+  FF_TX_D_0_5 => fpsc_vlo,
+  FF_TX_D_0_6 => fpsc_vlo,
+  FF_TX_D_0_7 => fpsc_vlo,
+  FF_TX_D_0_8 => fpsc_vlo,
+  FF_TX_D_0_9 => fpsc_vlo,
+  FF_TX_D_0_10 => fpsc_vlo,
   FF_TX_D_0_11 => fpsc_vlo,
   FF_TX_D_0_12 => fpsc_vlo,
   FF_TX_D_0_13 => fpsc_vlo,
@@ -2230,17 +2230,17 @@ port map  (
   FF_TX_D_0_21 => fpsc_vlo,
   FF_TX_D_0_22 => fpsc_vlo,
   FF_TX_D_0_23 => fpsc_vlo,
-  FF_RX_D_0_0 => rxdata_ch0(0),
-  FF_RX_D_0_1 => rxdata_ch0(1),
-  FF_RX_D_0_2 => rxdata_ch0(2),
-  FF_RX_D_0_3 => rxdata_ch0(3),
-  FF_RX_D_0_4 => rxdata_ch0(4),
-  FF_RX_D_0_5 => rxdata_ch0(5),
-  FF_RX_D_0_6 => rxdata_ch0(6),
-  FF_RX_D_0_7 => rxdata_ch0(7),
-  FF_RX_D_0_8 => rx_k_ch0,
-  FF_RX_D_0_9 => rx_disp_err_ch0,
-  FF_RX_D_0_10 => rx_cv_err_ch0,
+  FF_RX_D_0_0 => open,
+  FF_RX_D_0_1 => open,
+  FF_RX_D_0_2 => open,
+  FF_RX_D_0_3 => open,
+  FF_RX_D_0_4 => open,
+  FF_RX_D_0_5 => open,
+  FF_RX_D_0_6 => open,
+  FF_RX_D_0_7 => open,
+  FF_RX_D_0_8 => open,
+  FF_RX_D_0_9 => open,
+  FF_RX_D_0_10 => open,
   FF_RX_D_0_11 => open,
   FF_RX_D_0_12 => open,
   FF_RX_D_0_13 => open,
@@ -2255,30 +2255,30 @@ port map  (
   FF_RX_D_0_22 => open,
   FF_RX_D_0_23 => open,
 
-  FFC_RRST_0 => rx_serdes_rst_ch0_c,
+  FFC_RRST_0 => fpsc_vlo,
   FFC_SIGNAL_DETECT_0 => fpsc_vlo,
-  FFC_SB_PFIFO_LP_0 => sb_felb_ch0_c,
-  FFC_PFIFO_CLR_0 => sb_felb_rst_ch0_c,
+  FFC_SB_PFIFO_LP_0 => fpsc_vlo,
+  FFC_PFIFO_CLR_0 => fpsc_vlo,
   FFC_SB_INV_RX_0 => fpsc_vlo,
   FFC_PCIE_CT_0 => fpsc_vlo,
   FFC_PCI_DET_EN_0 => fpsc_vlo,
   FFC_FB_LOOPBACK_0 => fpsc_vlo,
   FFC_ENABLE_CGALIGN_0 => fpsc_vlo,
   FFC_EI_EN_0 => fpsc_vlo,
-  FFC_LANE_TX_RST_0 => tx_pcs_rst_ch0_c,
-  FFC_TXPWDNB_0 => tx_pwrup_ch0_c,
-  FFC_LANE_RX_RST_0 => rx_pcs_rst_ch0_c,
-  FFC_RXPWDNB_0 => rx_pwrup_ch0_c,
-  FFS_RLOS_LO_0 => rx_los_low_ch0_sig,
+  FFC_LANE_TX_RST_0 => fpsc_vlo,
+  FFC_TXPWDNB_0 => fpsc_vlo,
+  FFC_LANE_RX_RST_0 => fpsc_vlo,
+  FFC_RXPWDNB_0 => fpsc_vlo,
+  FFS_RLOS_LO_0 => open,
   FFS_RLOS_HI_0 => open,
   FFS_PCIE_CON_0 => open,
   FFS_PCIE_DONE_0 => open,
-  FFS_LS_SYNC_STATUS_0 => lsm_status_ch0_s,
+  FFS_LS_SYNC_STATUS_0 => open,
   FFS_CC_OVERRUN_0 => open,
   FFS_CC_UNDERRUN_0 => open,
   FFS_SKP_ADDED_0 => open,
   FFS_SKP_DELETED_0 => open,
-  FFS_RLOL_0 => rx_cdr_lol_ch0_sig,
+  FFS_RLOL_0 => open,
   FFS_RXFBFIFO_ERROR_0 => open,
   FFS_TXFBFIFO_ERROR_0 => open,
   LDR_CORE2TX_0 => fpsc_vlo,
@@ -2286,9 +2286,9 @@ port map  (
   LDR_RX2CORE_0 => open,
   FFS_CDR_TRAIN_DONE_0 => open,
   FFC_DIV11_MODE_TX_0 => fpsc_vlo,
-  FFC_RATE_MODE_TX_0 => tx_div2_mode_ch0_c,
+  FFC_RATE_MODE_TX_0 => fpsc_vlo,
   FFC_DIV11_MODE_RX_0 => fpsc_vlo,
-  FFC_RATE_MODE_RX_0 => rx_div2_mode_ch0_c,
+  FFC_RATE_MODE_RX_0 => fpsc_vlo,
 
 ----- CH1 -----
   HDOUTP1 => open,
@@ -2503,10 +2503,10 @@ port map  (
   FFC_RATE_MODE_RX_2 => fpsc_vlo,
 
 ----- CH3 -----
-  HDOUTP3 => open,
-  HDOUTN3 => open,
-  HDINP3 => fpsc_vlo,
-  HDINN3 => fpsc_vlo,
+  HDOUTP3 => hdoutp_ch3,
+  HDOUTN3 => hdoutn_ch3,
+  HDINP3 => hdinp_ch3,
+  HDINN3 => hdinn_ch3,
   PCIE_TXDETRX_PR2TLB_3 => fpsc_vlo,
   PCIE_TXCOMPLIANCE_3 => fpsc_vlo,
   PCIE_RXPOLARITY_3 => fpsc_vlo,
@@ -2514,27 +2514,27 @@ port map  (
   PCIE_POWERDOWN_3_1 => fpsc_vlo,
   PCIE_RXVALID_3 => open,
   PCIE_PHYSTATUS_3 => open,
-  SCISELCH3 => fpsc_vlo,
-  SCIENCH3 => fpsc_vlo,
+  SCISELCH3 => sci_sel_ch3,
+  SCIENCH3 => fpsc_vhi,
   FF_RXI_CLK_3 => fpsc_vlo,
-  FF_TXI_CLK_3 => fpsc_vlo,
+  FF_TXI_CLK_3 => txiclk_ch3,
   FF_EBRD_CLK_3 => fpsc_vlo,
-  FF_RX_F_CLK_3 => open,
-  FF_RX_H_CLK_3 => open,
-  FF_TX_F_CLK_3 => open,
-  FF_TX_H_CLK_3 => open,
-  FFC_CK_CORE_RX_3 => fpsc_vlo,
-  FF_TX_D_3_0 => fpsc_vlo,
-  FF_TX_D_3_1 => fpsc_vlo,
-  FF_TX_D_3_2 => fpsc_vlo,
-  FF_TX_D_3_3 => fpsc_vlo,
-  FF_TX_D_3_4 => fpsc_vlo,
-  FF_TX_D_3_5 => fpsc_vlo,
-  FF_TX_D_3_6 => fpsc_vlo,
-  FF_TX_D_3_7 => fpsc_vlo,
-  FF_TX_D_3_8 => fpsc_vlo,
-  FF_TX_D_3_9 => fpsc_vlo,
-  FF_TX_D_3_10 => fpsc_vlo,
+  FF_RX_F_CLK_3 => rx_full_clk_ch3,
+  FF_RX_H_CLK_3 => rx_half_clk_ch3,
+  FF_TX_F_CLK_3 => tx_full_clk_ch3_sig,
+  FF_TX_H_CLK_3 => tx_half_clk_ch3,
+  FFC_CK_CORE_RX_3 => fpga_rxrefclk_ch3,
+  FF_TX_D_3_0 => txdata_ch3(0),
+  FF_TX_D_3_1 => txdata_ch3(1),
+  FF_TX_D_3_2 => txdata_ch3(2),
+  FF_TX_D_3_3 => txdata_ch3(3),
+  FF_TX_D_3_4 => txdata_ch3(4),
+  FF_TX_D_3_5 => txdata_ch3(5),
+  FF_TX_D_3_6 => txdata_ch3(6),
+  FF_TX_D_3_7 => txdata_ch3(7),
+  FF_TX_D_3_8 => tx_k_ch3,
+  FF_TX_D_3_9 => tx_force_disp_ch3,
+  FF_TX_D_3_10 => tx_disp_sel_ch3,
   FF_TX_D_3_11 => fpsc_vlo,
   FF_TX_D_3_12 => fpsc_vlo,
   FF_TX_D_3_13 => fpsc_vlo,
@@ -2548,17 +2548,17 @@ port map  (
   FF_TX_D_3_21 => fpsc_vlo,
   FF_TX_D_3_22 => fpsc_vlo,
   FF_TX_D_3_23 => fpsc_vlo,
-  FF_RX_D_3_0 => open,
-  FF_RX_D_3_1 => open,
-  FF_RX_D_3_2 => open,
-  FF_RX_D_3_3 => open,
-  FF_RX_D_3_4 => open,
-  FF_RX_D_3_5 => open,
-  FF_RX_D_3_6 => open,
-  FF_RX_D_3_7 => open,
-  FF_RX_D_3_8 => open,
-  FF_RX_D_3_9 => open,
-  FF_RX_D_3_10 => open,
+  FF_RX_D_3_0 => rxdata_ch3(0),
+  FF_RX_D_3_1 => rxdata_ch3(1),
+  FF_RX_D_3_2 => rxdata_ch3(2),
+  FF_RX_D_3_3 => rxdata_ch3(3),
+  FF_RX_D_3_4 => rxdata_ch3(4),
+  FF_RX_D_3_5 => rxdata_ch3(5),
+  FF_RX_D_3_6 => rxdata_ch3(6),
+  FF_RX_D_3_7 => rxdata_ch3(7),
+  FF_RX_D_3_8 => rx_k_ch3,
+  FF_RX_D_3_9 => rx_disp_err_ch3,
+  FF_RX_D_3_10 => rx_cv_err_ch3,
   FF_RX_D_3_11 => open,
   FF_RX_D_3_12 => open,
   FF_RX_D_3_13 => open,
@@ -2573,30 +2573,30 @@ port map  (
   FF_RX_D_3_22 => open,
   FF_RX_D_3_23 => open,
 
-  FFC_RRST_3 => fpsc_vlo,
+  FFC_RRST_3 => rx_serdes_rst_ch3_c,
   FFC_SIGNAL_DETECT_3 => fpsc_vlo,
-  FFC_SB_PFIFO_LP_3 => fpsc_vlo,
-  FFC_PFIFO_CLR_3 => fpsc_vlo,
+  FFC_SB_PFIFO_LP_3 => sb_felb_ch3_c,
+  FFC_PFIFO_CLR_3 => sb_felb_rst_ch3_c,
   FFC_SB_INV_RX_3 => fpsc_vlo,
   FFC_PCIE_CT_3 => fpsc_vlo,
   FFC_PCI_DET_EN_3 => fpsc_vlo,
   FFC_FB_LOOPBACK_3 => fpsc_vlo,
   FFC_ENABLE_CGALIGN_3 => fpsc_vlo,
   FFC_EI_EN_3 => fpsc_vlo,
-  FFC_LANE_TX_RST_3 => fpsc_vlo,
-  FFC_TXPWDNB_3 => fpsc_vlo,
-  FFC_LANE_RX_RST_3 => fpsc_vlo,
-  FFC_RXPWDNB_3 => fpsc_vlo,
-  FFS_RLOS_LO_3 => open,
+  FFC_LANE_TX_RST_3 => tx_pcs_rst_ch3_c,
+  FFC_TXPWDNB_3 => tx_pwrup_ch3_c,
+  FFC_LANE_RX_RST_3 => rx_pcs_rst_ch3_c,
+  FFC_RXPWDNB_3 => rx_pwrup_ch3_c,
+  FFS_RLOS_LO_3 => rx_los_low_ch3_sig,
   FFS_RLOS_HI_3 => open,
   FFS_PCIE_CON_3 => open,
   FFS_PCIE_DONE_3 => open,
-  FFS_LS_SYNC_STATUS_3 => open,
+  FFS_LS_SYNC_STATUS_3 => lsm_status_ch3_s,
   FFS_CC_OVERRUN_3 => open,
   FFS_CC_UNDERRUN_3 => open,
   FFS_SKP_ADDED_3 => open,
   FFS_SKP_DELETED_3 => open,
-  FFS_RLOL_3 => open,
+  FFS_RLOL_3 => rx_cdr_lol_ch3_sig,
   FFS_RXFBFIFO_ERROR_3 => open,
   FFS_TXFBFIFO_ERROR_3 => open,
   LDR_CORE2TX_3 => fpsc_vlo,
@@ -2604,9 +2604,9 @@ port map  (
   LDR_RX2CORE_3 => open,
   FFS_CDR_TRAIN_DONE_3 => open,
   FFC_DIV11_MODE_TX_3 => fpsc_vlo,
-  FFC_RATE_MODE_TX_3 => fpsc_vlo,
+  FFC_RATE_MODE_TX_3 => tx_div2_mode_ch3_c,
   FFC_DIV11_MODE_RX_3 => fpsc_vlo,
-  FFC_RATE_MODE_RX_3 => fpsc_vlo,
+  FFC_RATE_MODE_RX_3 => rx_div2_mode_ch3_c,
 
 ----- Auxilliary ----
   SCIWDATA7 => sci_wrdata(7),
index 7eb7bb863d33676e21b0cfb93499833003c3e6b2..cb2acc55215c7c9949a0917b6cbb1471816f2ad2 100644 (file)
@@ -24,8 +24,6 @@ end soda_cmd_window_generator;
 
 architecture Behavioral of soda_cmd_window_generator is
 
-       constant        cWINDOW_delay                           : std_logic_vector(7 downto 0)  := conv_std_logic_vector(28, 8);                                                                                                        -- in clock-cycles
-       constant        cCLOCKS_PER_WINDOW              : std_logic_vector(15 downto 0) := conv_std_logic_vector((COMMAND_WINDOS_SIZE / CLOCK_PERIOD) - 1, 16); -- in clock-cycles
 
        signal  window_delay_counter_S  : std_logic_vector(7 downto 0)  := (others => '0');             -- 
        signal  window_size_counter_S   : std_logic_vector(15 downto 0) := (others => '0');             -- 
index c831beef367da148b717bbedc7d9e964027befe1..180f201b3402da230d392eebb41c69ed9b35b743 100644 (file)
@@ -1,11 +1,12 @@
 library ieee;
 use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;\r
+use ieee.numeric_std.all;
+use IEEE.STD_LOGIC_ARITH.ALL;
 
 library work;
-use work.trb_net_std.all;\r
+use work.trb_net_std.all;
 use work.trb_net_components.all;
-use work.trb_net16_hub_func.all; \r
+use work.trb_net16_hub_func.all; 
 
 
 package soda_components is
@@ -13,26 +14,35 @@ package soda_components is
        attribute syn_useioff                                   : boolean;
        attribute syn_keep                                              : boolean;
        attribute syn_preserve                                  : boolean;
-\r
+
        constant        c_PHASE_L                                               : std_logic     := '0';                                 -- byt2word allignment of soda
        constant        c_PHASE_H                                               : std_logic     := '1';                                 -- byt2word allignment of soda
-       constant        c_HUB_CHILDREN                                  : natural range 1 to 4 := 2;            -- number of children per soda-hub\r
+       constant        c_HUB_CHILDREN                                  : natural range 1 to 4 := 2;            -- number of children per soda-hub
        constant        cSODA_CLOCK_PERIOD                      : natural range 1 to 20 := 5;           -- soda clock-period in ns
-       constant        cBURST_PERIOD                                   : natural := 2400;                                              -- particle-beam burst-period in ns\r
+       constant        cBURST_PERIOD                                   : natural := 2400;                                              -- particle-beam burst-period in ns
        constant        cSODA_COMMAND_WINDOS_SIZE       : natural range 1 to 65535 := 5000; -- size of the window in which soda-cmds are allowed after a superburst-pulse in ns
 
+       constant        cWINDOW_delay                                   : std_logic_vector(7 downto 0)  := conv_std_logic_vector(28, 8);                                                                                                        -- in clock-cycles
+       constant        cCLOCKS_PER_WINDOW                      : std_logic_vector(15 downto 0) := conv_std_logic_vector((cSODA_COMMAND_WINDOS_SIZE / cSODA_CLOCK_PERIOD) - 1, 16);     -- in clock-cycles
+
 
-       type            t_HUB_DLM                               is array(c_HUB_CHILDREN-1 downto 0) of std_logic;\r
+       type            t_HUB_DLM                               is array(c_HUB_CHILDREN-1 downto 0) of std_logic;
        type            t_HUB_DLM_BYTE                  is array(c_HUB_CHILDREN-1 downto 0) of std_logic_vector(7 downto 0);
        type            t_HUB_DLM_WORD                  is array(c_HUB_CHILDREN-1 downto 0) of std_logic_vector(15 downto 0);
        type            t_HUB_DLM_LWORD         is array(c_HUB_CHILDREN-1 downto 0) of std_logic_vector(31 downto 0);
        type            t_PACKET_TYPE_SENT      is (c_NO_PACKET, c_CMD_PACKET, c_BST_PACKET);
        type            t_PACKET_TYPE_ARRAY     is array(c_HUB_CHILDREN-1 downto 0) of t_PACKET_TYPE_SENT;
-       type            t_HUB_BIT_ARRAY         is array(c_HUB_CHILDREN-1 downto 0) of std_logic;\r
+       type            t_HUB_BIT_ARRAY         is array(c_HUB_CHILDREN-1 downto 0) of std_logic;
        type            t_HUB_BYTE_ARRAY                is array(c_HUB_CHILDREN-1 downto 0) of std_logic_vector(7 downto 0);
        type            t_HUB_WORD_ARRAY                is array(c_HUB_CHILDREN-1 downto 0) of std_logic_vector(15 downto 0);
        type            t_HUB_LWORD_ARRAY               is array(c_HUB_CHILDREN-1 downto 0) of std_logic_vector(31 downto 0);
-\r
+
+       type            t_QUAD_BIT                              is array(3 downto 0) of std_logic;
+       type            t_QUAD_NIBL                             is array(3 downto 0) of std_logic_vector(3 downto 0);
+       type            t_QUAD_BYTE                             is array(3 downto 0) of std_logic_vector(7 downto 0);
+       type            t_QUAD_9WORD                    is array(3 downto 0) of std_logic_vector(8 downto 0);
+       type            t_QUAD_WORD                             is array(3 downto 0) of std_logic_vector(15 downto 0);
+       type            t_QUAD_LWORD                    is array(3 downto 0) of std_logic_vector(31 downto 0);
 
        component soda_superburst_generator
                generic(
@@ -44,7 +54,8 @@ package soda_components is
                        --Internal Connection
                        SODA_BURST_PULSE_IN                     : in    std_logic := '0';       -- 
                        START_OF_SUPERBURST_OUT         : out   std_logic := '0';
-                       SUPER_BURST_NR_OUT                      : out   std_logic_vector(30 downto 0) := (others => '0')
+                       SUPER_BURST_NR_OUT                      : out   std_logic_vector(30 downto 0) := (others => '0');
+                       SODA_CMD_WINDOW_OUT             : out   std_logic := '0'
                        );
        end component;
 
@@ -75,20 +86,18 @@ package soda_components is
                        --Internal Connection
                        START_OF_SUPERBURST_OUT         : out std_logic := '0';
                        SUPER_BURST_NR_OUT                      : out std_logic_vector(30 downto 0) := (others => '0');
+                       START_OF_CALIBRATION_OUT        : out std_logic := '0';
                        SODA_CMD_VALID_OUT                      : out std_logic := '0';
                        SODA_CMD_WORD_OUT                               : out std_logic_vector(30 downto 0) := (others => '0');
---                     EXPECTED_REPLY_OUT                      : out   std_logic_vector(7 downto 0) := (others => '0');
---                     CRC_VALID_OUT                                   : out std_logic := '0';\r
---                     CRC_DATA_OUT                                    : out std_logic_vector(7 downto 0) := (others => '0');
                        RX_DLM_IN                                               : in std_logic;
                        RX_DLM_WORD_IN                                  : in    std_logic_vector(7 downto 0) := (others => '0')
                );
        end component;
-\r
+
        component soda_d8crc8           -- crc-calculator/checker
                port( 
                        CLOCK                           : in std_logic; 
-                       RESET                           : in std_logic; 
+                       RESET                           : in std_logic;
                        SOC_IN                  : in std_logic; 
                        DATA_IN                 : in std_logic_vector(7 downto 0); 
                        DATA_VALID_IN   : in std_logic; 
@@ -96,8 +105,8 @@ package soda_components is
                        CRC_OUT                 : out std_logic_vector(7 downto 0); 
                        CRC_VALID_OUT   : out std_logic 
                );
-       end component;\r
-       \r
+       end component;
+       
        component soda_source   -- box containing soda_source components
                port(
                        SYSCLK                                  : in    std_logic; -- fabric clock
@@ -122,8 +131,8 @@ package soda_components is
                        SODA_ACK_OUT                    : out   std_logic := '0';
                        LEDS_OUT         : out std_logic_vector(3 downto 0)
                        );
-       end component;\r
-\r
+       end component;
+
        component soda_hub
        port(
                SYSCLK                                  : in    std_logic; -- fabric clock
@@ -183,25 +192,25 @@ package soda_components is
                        LEDS_OUT         : out std_logic_vector(3 downto 0);
                        LINK_DEBUG_IN                   : in    std_logic_vector(31 downto 0)   := (others => '0')
                );
-       end component;\r
+       end component;
        
-       component soda_reply_pkt_builder\r
-               port(\r
-                       SODACLK                                 : in    std_logic; -- fabric clock\r
-                       RESET                                           : in    std_logic; -- synchronous reset\r
-                       CLEAR                                           : in    std_logic; -- asynchronous reset\r
-                       CLK_EN                                  : in    std_logic;\r
-                       --Internal Connection\r
+       component soda_reply_pkt_builder
+               port(
+                       SODACLK                                 : in    std_logic; -- fabric clock
+                       RESET                                           : in    std_logic; -- synchronous reset
+                       CLEAR                                           : in    std_logic; -- asynchronous reset
+                       CLK_EN                                  : in    std_logic;
+                       --Internal Connection
                        LINK_PHASE_IN                   : in    std_logic := '0';       --_vector(1 downto 0) := (others => '0');
-                       START_OF_SUPERBURST     : in    std_logic := '0';\r
-                       SUPER_BURST_NR_IN               : in    std_logic_vector(30 downto 0) := (others => '0');\r
-                       SODA_CMD_STROBE_IN      : in    std_logic := '0';       -- \r
-                       SODA_CMD_WORD_IN                : in    std_logic_vector(30 downto 0) := (others => '0');               --REGIO_CTRL_REG in trbnet handler is 32 bit\r
+                       START_OF_SUPERBURST     : in    std_logic := '0';
+                       SUPER_BURST_NR_IN               : in    std_logic_vector(30 downto 0) := (others => '0');
+                       SODA_CMD_STROBE_IN      : in    std_logic := '0';       -- 
+                       SODA_CMD_WORD_IN                : in    std_logic_vector(30 downto 0) := (others => '0');               --REGIO_CTRL_REG in trbnet handler is 32 bit
                        TX_DLM_PREVIEW_OUT      : out   std_logic := '0';
                        TX_DLM_OUT                              : out   std_logic := '0';       -- 
-                       TX_DLM_WORD_OUT         : out   std_logic_vector(7 downto 0) := (others => '0')\r
-               );\r
-       end component;\r
+                       TX_DLM_WORD_OUT         : out   std_logic_vector(7 downto 0) := (others => '0')
+               );
+       end component;
 
        component soda_reply_handler
                port(
@@ -219,20 +228,20 @@ package soda_components is
                );
        end component;
 
-       component soda_calibration_timer\r
-               port(\r
-                       SODACLK                                         : in    std_logic; -- fabric clock\r
-                       RESET                                                   : in    std_logic; -- synchronous reset\r
-                       CLEAR                                                   : in    std_logic; -- asynchronous reset\r
-                       CLK_EN                                          : in    std_logic; \r
-                       --Internal Connection\r
-                       START_CALIBRATION                       : in    std_logic := '0';\r
-                       END_CALIBRATION                 : in    std_logic := '0';\r
+       component soda_calibration_timer
+               port(
+                       SODACLK                                         : in    std_logic; -- fabric clock
+                       RESET                                                   : in    std_logic; -- synchronous reset
+                       CLEAR                                                   : in    std_logic; -- asynchronous reset
+                       CLK_EN                                          : in    std_logic; 
+                       --Internal Connection
+                       START_CALIBRATION                       : in    std_logic := '0';
+                       END_CALIBRATION                 : in    std_logic := '0';
                        CALIB_VALID_OUT                 : out   std_logic := '0';       -- 
-                       CALIB_TIME_OUT                          : out   std_logic_vector(15 downto 0) := (others => '0')\r
-               );\r
-       end component;\r
-\r
+                       CALIB_TIME_OUT                          : out   std_logic_vector(15 downto 0) := (others => '0')
+               );
+       end component;
+
        component spi_flash_and_fpga_reload
                port(
                        CLK_IN : in std_logic;
@@ -310,20 +319,20 @@ component med_ecp3_sfp_sync_down is
                RX_DLM                                  : out std_logic := '0';
                RX_DLM_WORD                             : out std_logic_vector(7 downto 0) := x"00";
                TX_DLM                                  : in std_logic := '0';
-               TX_DLM_WORD                             : in std_logic_vector(7 downto 0) := x"00";\r
-               TX_DLM_PREVIEW_IN               : in std_logic := '0'; --PL!\r
+               TX_DLM_WORD                             : in std_logic_vector(7 downto 0) := x"00";
+               TX_DLM_PREVIEW_IN               : in std_logic := '0'; --PL!
                LINK_PHASE_OUT                  : out std_logic := '0'; --PL!
 
                --SFP Connection
-               SD_RXD_P_IN                             : in std_logic;
-               SD_RXD_N_IN                             : in std_logic;
-               SD_TXD_P_OUT                    : out std_logic;
-               SD_TXD_N_OUT                    : out std_logic;
-               SD_REFCLK_P_IN                  : in std_logic; --not used
-               SD_REFCLK_N_IN                  : in std_logic; --not used
-               SD_PRSNT_N_IN                   : in std_logic; -- SFP Present ('0' = SFP in place, '1' = no SFP mounted)
-               SD_LOS_IN                               : in std_logic; -- SFP Loss Of Signal ('0' = OK, '1' = no signal)
-               SD_TXDIS_OUT                    : out std_logic := '0'; -- SFP disable
+               SD_RXD_P_IN                             : in    t_QUAD_BIT;
+               SD_RXD_N_IN                             : in    t_QUAD_BIT;
+               SD_TXD_P_OUT                    : out   t_QUAD_BIT;
+               SD_TXD_N_OUT                    : out   t_QUAD_BIT;
+               SD_REFCLK_P_IN                  : in    t_QUAD_BIT; --not used
+               SD_REFCLK_N_IN                  : in    t_QUAD_BIT; --not used
+               SD_PRSNT_N_IN                   : in    t_QUAD_BIT; -- SFP Present ('0' = SFP in place, '1' = no SFP mounted)
+               SD_LOS_IN                               : in    t_QUAD_BIT; -- SFP Loss Of Signal ('0' = OK, '1' = no signal)
+               SD_TXDIS_OUT                    : out   t_QUAD_BIT := (others => '0'); -- SFP disable
                --Control Interface
                SCI_DATA_IN                             : in std_logic_vector(7 downto 0) := (others => '0');
                SCI_DATA_OUT                    : out std_logic_vector(7 downto 0) := (others => '0');
@@ -396,7 +405,7 @@ component med_ecp3_sfp_sync_up is
                CTRL_DEBUG                              : in std_logic_vector (63 downto 0) := (others => '0')
        );
 end component;
-\r
+
 component soda_tx_control
  port(
  CLK_200                                                                       : in std_logic;
@@ -429,8 +438,8 @@ component soda_tx_control
  DEBUG_OUT                                                             : out std_logic_vector(31 downto 0);
  STAT_REG_OUT                                                  : out std_logic_vector(31 downto 0)
  );
-end component;\r
-\r
+end component;
+
 component soda_cmd_window_generator
        generic(                CLOCK_PERIOD                    : natural range 1 to 20 := cSODA_CLOCK_PERIOD;                          -- clock-period in ns
                                        COMMAND_WINDOS_SIZE     : natural range 1 to 65335 := cSODA_COMMAND_WINDOS_SIZE         -- command window size in ns 
@@ -442,5 +451,5 @@ component soda_cmd_window_generator
                SODA_CMD_WINDOW_OUT             : out   std_logic := '0'
                );
 end component;
-\r
-end package;
+
+end package;
\ No newline at end of file
index 461295ee31b33680ef74db97b95f6b8a4835d980..dec3e5205c9d6295545a118e6e1ed31d51f5b200 100644 (file)
@@ -58,18 +58,19 @@ architecture Behavioral of soda_hub is
        type STATES is (SLEEP,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);
        signal CURRENT_STATE, NEXT_STATE: STATES;
 
-       signal last_packet_sent_S                       : t_PACKET_TYPE_SENT;
-       signal expected_reply_S                         : std_logic_vector(7 downto 0);
-       signal reply_valid_S                                    : t_HUB_BIT_ARRAY;
-       signal reply_OK_S                                               : t_HUB_BIT_ARRAY;
-       signal start_calibration_S                      : std_logic;
-       signal calibration_valid_S                      : t_HUB_BIT_ARRAY;
-       signal calibration_time_S                       : t_HUB_WORD_ARRAY;
-       signal calib_register_s                         : t_HUB_LWORD_ARRAY;
+       signal last_packet_sent_S                               : t_PACKET_TYPE_SENT;
+       signal expected_reply_S                                 : std_logic_vector(7 downto 0);
+       signal reply_valid_S                                            : t_HUB_BIT_ARRAY;
+       signal reply_OK_S                                                       : t_HUB_BIT_ARRAY;
+       signal start_of_calibration_S                   : std_logic := '0';
+       signal start_calibration_S                              : t_HUB_BIT_ARRAY;
+       signal calibration_valid_S                              : t_HUB_BIT_ARRAY;
+       signal calibration_time_S                               : t_HUB_WORD_ARRAY;
+       signal calib_register_s                                 : t_HUB_LWORD_ARRAY;
 \r
-       signal dead_channels_S                          : t_HUB_BIT_ARRAY;
-       signal channel_status_S                         : t_HUB_BIT_ARRAY;\r
-       signal status_register                          : std_logic_vector(31 downto 0) := (others => '0');
+       signal dead_channels_S                                  : t_HUB_BIT_ARRAY;
+       signal channel_status_S                                 : t_HUB_BIT_ARRAY;\r
+       signal status_register                                  : std_logic_vector(31 downto 0) := (others => '0');
 \r
 -- slave bus signals
        signal bus_ack_x                                : std_logic;
@@ -99,13 +100,14 @@ begin
                        CLK_EN                                                  =>      '1',
                        --Internal Connection
                        START_OF_SUPERBURST_OUT         => start_of_superburst_S,
+                       START_OF_CALIBRATION_OUT        => start_of_calibration_S,
                        SUPER_BURST_NR_OUT                      => super_burst_nr_S,
                        SODA_CMD_VALID_OUT                      => soda_cmd_valid_S,
                        SODA_CMD_WORD_OUT                               => soda_cmd_word_S,
                        RX_DLM_IN                                               => RXUP_DLM_IN,
                        RX_DLM_WORD_IN                                  => RXUP_DLM_WORD_IN
                );
-
+\r
        hub_reply_packet_builder : soda_reply_pkt_builder               \r
                port map(
                        SODACLK                                 =>      SODACLK,
@@ -125,6 +127,8 @@ begin
 \r
        channel :for i in c_HUB_CHILDREN-1 downto 0 generate
                        
+               start_calibration_S(i)  <= start_of_calibration_S;\r
+\r
                packet_builder : soda_packet_builder
                        port map(
                                SODACLK                                 =>      SODACLK,
@@ -135,7 +139,7 @@ begin
                                SUPER_BURST_NR_IN               => super_burst_nr_S,
                                SODA_CMD_WORD_IN                => soda_cmd_word_S,
                                EXPECTED_REPLY_OUT      => open,
-                               TIME_CAL_OUT                    =>      start_calibration_S,
+                               TIME_CAL_OUT                    =>      open, --start_calibration_S(i),
                                TX_DLM_OUT                              => TXDN_DLM_OUT(i),
                                TX_DLM_WORD_OUT         => TXDN_DLM_WORD_OUT(i)
                        );
@@ -162,7 +166,7 @@ begin
                        CLEAR                                                   =>      '0',
                        CLK_EN                                          =>      '1',
                        --Internal Connection
-                       START_CALIBRATION                       =>      start_calibration_S,
+                       START_CALIBRATION                       =>      start_calibration_S(i),
                        END_CALIBRATION                 =>      reply_valid_S(i),
                        CALIB_VALID_OUT                 =>      calibration_valid_S(i),
                        CALIB_TIME_OUT                          =>      calibration_time_S(i)
index c070bc1b1bcae6716b63daf96d4c8ac1efde80bf..f294bf07551fd074f4b944046177c2d48b3f85ce 100644 (file)
@@ -17,11 +17,9 @@ entity soda_packet_handler is
                --Internal Connection
                START_OF_SUPERBURST_OUT         : out std_logic := '0';
                SUPER_BURST_NR_OUT                      : out std_logic_vector(30 downto 0) := (others => '0');
+               START_OF_CALIBRATION_OUT        : out std_logic := '0';
                SODA_CMD_VALID_OUT                      : out std_logic := '0';
                SODA_CMD_WORD_OUT                               : out std_logic_vector(30 downto 0) := (others => '0');
---             EXPECTED_REPLY_OUT                      : out   std_logic_vector(7 downto 0) := (others => '0');
-               CRC_VALID_OUT                                   : out std_logic := '0';\r
-               CRC_DATA_OUT                                    : out std_logic_vector(7 downto 0) := (others => '0');
                RX_DLM_IN                                               : in std_logic;
                RX_DLM_WORD_IN                                  : in    std_logic_vector(7 downto 0) := (others => '0')
        );
@@ -37,15 +35,6 @@ architecture Behavioral of soda_packet_handler is
                                                                                                c_SODA_PKT5, c_SODA_PKT6, c_SODA_PKT7, c_SODA_PKT8
                                                                                        );
        signal  packet_state_S                          :       packet_state_type := c_IDLE;
--- crc-checker signals --
---     signal  soc_S                                                   : std_logic;\r
---     signal  eoc_S                                                   : std_logic;\r
---     signal  crc_valid_in_s                          : std_logic;\r
---     signal  crc_datain_S                            : std_logic_vector(7 downto 0)  := (others => '0');\r
---     signal  crc_tmp_S                                       : std_logic_vector(7 downto 0)  := (others => '0');\r
---     signal  crc_out_S                                       : std_logic_vector(7 downto 0)  := (others => '0');\r
---     signal  crc_valid_out_S                 : std_logic;\r
---     signal  crc_check_ok_s                          : std_logic;\r
 
 begin
 
@@ -126,24 +115,27 @@ begin
                end if;
        end process;
 
-       soda_packet_collector_proc : process(SODACLK, packet_state_S)
+       soda_packet_interpreter_proc : process(SODACLK, packet_state_S)
        begin
                if rising_edge(SODACLK) then
                        case packet_state_S is
                                        when c_RST      =>
                                                START_OF_SUPERBURST_OUT                         <= '0';
+                                               START_OF_CALIBRATION_OUT                        <=      '0';
                                                SODA_CMD_VALID_OUT                                      <= '0';
                                                soda_pkt_valid_S                                                <= '0';
                                                soda_pkt_word_S                                         <= (others=>'0');
                                        when c_IDLE     =>
                                                START_OF_SUPERBURST_OUT                         <= '0';
+                                               START_OF_CALIBRATION_OUT                        <=      '0';
                                                SODA_CMD_VALID_OUT                                      <= '0';
                                                soda_pkt_valid_S                                                <= '0';
                                                soda_pkt_word_S                                         <= (others=>'0');
                                        when c_SODA_PKT1        =>
                                                START_OF_SUPERBURST_OUT                         <= '0';
+                                               START_OF_CALIBRATION_OUT                        <=      '0';
                                                SODA_CMD_VALID_OUT                                      <= '0';
-                                               soda_pkt_word_S(31 downto 24)           <=      RX_DLM_WORD_IN;
+                                               soda_pkt_word_S(31 downto 24)           <=      RX_DLM_WORD_IN;\r
                                        when c_SODA_PKT2        =>
                                                -- do nothing -- disregard K28.7
                                        when c_SODA_PKT3        =>
@@ -163,10 +155,14 @@ begin
                                                        SUPER_BURST_NR_OUT                              <= soda_pkt_word_S(30 downto 0);
                                                else
                                                        SODA_CMD_VALID_OUT                              <= '1';
-                                                       SODA_CMD_WORD_OUT                                       <= soda_pkt_word_S(30 downto 0);
+                                                       SODA_CMD_WORD_OUT                                       <= soda_pkt_word_S(30 downto 0);\r
+                                                       if soda_pkt_word_S(30)='1' then\r
+                                                               START_OF_CALIBRATION_OUT        <=      '1';\r
+                                                       end if;
                                                end if;
                                        when others     =>
-                                               START_OF_SUPERBURST_OUT                         <= '0';
+                                               START_OF_SUPERBURST_OUT                         <= '0';
+                                               START_OF_CALIBRATION_OUT                        <=      '0';
                                                soda_pkt_valid_S                                                <= '0';
                                                soda_pkt_word_S                                         <= (others=>'0');
                                                SODA_CMD_VALID_OUT                                      <= '0';
@@ -176,75 +172,5 @@ begin
                end if;
        end process;
 
-       --crc_check_proc : process(SODACLK, packet_state_S)
-       --begin
-               --if rising_edge(SODACLK) then
-                       --case packet_state_S is
-                               --when c_RST=>
-                                       --CRC_VALID_OUT <= '0';
-                                       --CRC_DATA_OUT<= (others => '0');
-                                       --soc_S <= '1';
-                                       --eoc_S <= '0';
-                                       --CRC_VALID_OUT <= '0';
-                               --when c_IDLE =>
-                                       --CRC_VALID_OUT <= '0';
-                                       --CRC_DATA_OUT<= (others => '0');
-                                       --crc_valid_in_S<= '0';
-                                       --crc_datain_S<= (others=>'0');
-                                       --soc_S <= '1';
-                                       --eoc_S <= '0';
-                               --when c_SODA_PKT1=>
-                                       --crc_valid_in_S<= '1';
-                                       --crc_datain_S<=RX_DLM_WORD_IN;
-                                       --if (RX_DLM_WORD_IN(7)='0') then -- only calculate crc if it's a command packet
-                                               --soc_S <= '0';
-                                       --end if;
-                               --when c_SODA_PKT2=>
-                                       --crc_valid_in_S<= '0';
-                                       --crc_datain_S<= (others=>'0');
-                               --when c_SODA_PKT3=>
-                                       --crc_valid_in_S<= '1';
-                                       --crc_datain_S<= RX_DLM_WORD_IN;
-                               --when c_SODA_PKT4=>
-                                       --crc_valid_in_S<= '0';
-                                       --crc_datain_S<= (others=>'0');
-                               --when c_SODA_PKT5=>
-                                       --crc_valid_in_S<= '1';
-                                       --crc_datain_S<= RX_DLM_WORD_IN;
-                                       --if (soc_S='0') then -- only terminate crc calculation if it is running
-                                               --eoc_S <= '1';
-                                       --end if;
-                               --when c_SODA_PKT6=>
-                                       --crc_valid_in_S<= '0';
-                                       --crc_datain_S<= (others=>'0');
-                                       --eoc_S <= '0';
-                               --when c_SODA_PKT7=>
-                                       --crc_valid_in_S<= '0';
-                                       --crc_datain_S<= (others=>'0');
-                                       --if ((crc_valid_out_S = '1') and (crc_out_S = RX_DLM_WORD_IN)) then
-                                               --crc_check_ok_S<= '1';
-                                       --else
-                                               --crc_check_ok_S<= '0';
-                                       --end if;
-                                       --CRC_VALID_OUT <= '1';
-                               --when c_SODA_PKT8=>
-                                               --CRC_VALID_OUT <= crc_valid_out_S;
-                                               --CRC_DATA_OUT<= crc_out_S;
-                                               --crc_valid_in_S<= '0';
-                                               --crc_datain_S<= (others=>'0');
-                                               --eoc_S <= '0';
-                                               --crc_check_ok_S<= '0';
-                                               --CRC_VALID_OUT <= '0';
-                               --when others =>
-                                       --CRC_VALID_OUT <= '0';
-                                       --CRC_DATA_OUT<= (others => '0');
-                                       --crc_valid_in_S<= '0';
-                                       --crc_datain_S<= (others=>'0');
-                                       --soc_S <= '0';
-                                       --eoc_S <= '0';
-                                       --CRC_VALID_OUT <= '0';
-                       --end case;
-               --end if;
-       --end process;
 
 end architecture;
\ No newline at end of file
index 47ad048355bbf40c31b6e688bc749041c00fb50e..9a202452cc1ac583fbcbbe17296f8c14881c47db 100644 (file)
@@ -34,7 +34,7 @@ architecture Behavioral of soda_reply_pkt_builder is
                                                                                                );
        signal  packet_state_S                          :       packet_state_type := c_IDLE;\r
 \r
-signal soda_dlm_preview_S              : std_logic;
+       signal  soda_dlm_preview_S              : std_logic;
 \r
 begin\r
        
@@ -105,47 +105,6 @@ reply_fsm_proc : process(SODACLK)
                end if;
        end process;
 \r
---reply_fsm_proc : process(SODACLK)
---     begin
---             if rising_edge(SODACLK) then\r
---                     if (RESET='1') then
---                             packet_state_S          <= c_IDLE;
---                     else
---                             case packet_state_S is\r
---                                     when c_IDLE     =>\r
---                                             if (START_OF_SUPERBURST='1') or (SODA_CMD_STROBE_IN='1') then\r
---                                                     packet_state_S  <= c_PKT1;\r
---                                             end if;
---                                     when c_PKT1 =>
---                                             packet_state_S  <= c_PKT2;\r
---                                     when c_PKT2 =>
---                                             packet_state_S  <= c_IDLE;\r
---                                     when others =>
---                                             packet_state_S  <= c_IDLE;
---                             end case;
---                     end if;\r
---             end if;
---     end process;
-
---     collect_reply_proc : process(SODACLK)
---     begin
---             if rising_edge(SODACLK) then\r
---                     if (RESET='1') then
---                             TX_DLM_OUT                      <= '0';\r
---                             TX_DLM_WORD_OUT <= (others=>'0');
---                     elsif (START_OF_SUPERBURST='1') then\r
---                             TX_DLM_OUT                      <= '1';\r
---                             TX_DLM_WORD_OUT <= SUPER_BURST_NR_IN(7 downto 0);\r
---                     elsif (SODA_CMD_STROBE_IN='1') then\r
---                             TX_DLM_OUT                      <= '1';\r
---                             TX_DLM_WORD_OUT <= SODA_CMD_WORD_IN(7 downto 0);
---                     elsif (packet_state_S=c_PKT1) then
---                             TX_DLM_OUT                      <= '0';\r
---                     elsif (packet_state_S=c_PKT2) then
---                             TX_DLM_WORD_OUT <= (others=>'0');
---                     end if;\r
---             end if;
---     end process;
        \r
 \r
 end architecture;
\ No newline at end of file
index f89e144e783c44d9e9d2914efa88f8fa6a685a3a..5f1b2230c72804c02068035b0f008f605c1d061e 100644 (file)
@@ -40,8 +40,11 @@ architecture Behavioral of soda_source is
        signal soda_cmd_word_S                          : std_logic_vector(30 downto 0) := (others => '0');
        signal soda_cmd_strobe_S                        : std_logic := '0';
        signal soda_cmd_strobe_sodaclk_S        : std_logic := '0';     
+       signal soda_cmd_pending_S                       : std_logic := '0';     
+       signal soda_send_cmd_S                          : std_logic := '0';     
        signal start_of_superburst_S            : std_logic := '0';
        signal super_burst_nr_S                         : std_logic_vector(30 downto 0) := (others => '0');             -- from super-burst-nr-generator
+       signal soda_cmd_window_S                        : std_logic := '0';
        
 -- Signals
        type t_STATES is (SLEEP,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);
@@ -81,7 +84,8 @@ begin
                        --Internal Connection
                        SODA_BURST_PULSE_IN             =>      SODA_BURST_PULSE_IN,
                        START_OF_SUPERBURST_OUT =>      start_of_superburst_S,
-                       SUPER_BURST_NR_OUT              =>      super_burst_nr_S
+                       SUPER_BURST_NR_OUT              =>      super_burst_nr_S,\r
+                       SODA_CMD_WINDOW_OUT             => soda_cmd_window_S
                );
 
        packet_builder : soda_packet_builder
@@ -90,7 +94,7 @@ begin
                        RESET                                           =>      RESET,
                        --Internal Connection
                        LINK_PHASE_IN                   =>      LINK_PHASE_IN,          --link_phase_S, PL!
-                       SODA_CMD_STROBE_IN      => soda_cmd_strobe_sodaclk_S,
+                       SODA_CMD_STROBE_IN      => soda_send_cmd_S,
                        START_OF_SUPERBURST     => start_of_superburst_S,
                        SUPER_BURST_NR_IN               => super_burst_nr_S,
                        SODA_CMD_WORD_IN                => soda_cmd_word_S,
@@ -213,7 +217,24 @@ soda_cmd_strobe_posedge_to_pulse: posedge_to_pulse
                SIGNAL_IN       => soda_cmd_strobe_S,
                PULSE_OUT       => soda_cmd_strobe_sodaclk_S
        );
-
+\r
+       SODA_CMD_FLOWCTRL : process(SODACLK)\r
+       begin\r
+               if( rising_edge(SODACLK) ) then
+                       if( RESET = '1' ) then\r
+                               soda_cmd_pending_S      <= '0';\r
+                               soda_send_cmd_S         <= '0';\r
+                       elsif soda_cmd_strobe_sodaclk_S = '1' then\r
+                               soda_cmd_pending_S      <= '1';\r
+                       elsif soda_cmd_window_S = '1' and soda_cmd_pending_S = '1' then\r
+                               soda_send_cmd_S         <= '1';
+                               soda_cmd_pending_S      <= '0';\r
+                       else 
+                               soda_cmd_pending_S      <= '0';
+                               soda_send_cmd_S         <= '0';
+                       end if;\r
+               end if;
+       end process SODA_CMD_FLOWCTRL;
 ---------------------------------------------------------
 -- data handling                                       --
 ---------------------------------------------------------
index 518fe60285793e63f28c2c6211e5f74848c8ee15..79fe7a10d9e8eb7fb73a2872c01d08f8141db84f 100644 (file)
@@ -12,7 +12,7 @@ use work.soda_components.all;
 
 entity soda_superburst_generator is
        generic(
-               BURST_COUNT : natural range 1 to 256 := 16   -- number of bursts to be counted between super-bursts
+               BURST_COUNT : natural range 4 to 256 := 16   -- number of bursts to be counted between super-bursts
                );
        port(
                SODACLK                                         : in    std_logic; -- fabric clock
@@ -20,7 +20,8 @@ entity soda_superburst_generator is
                --Internal Connection
                SODA_BURST_PULSE_IN             : in    std_logic := '0';       -- 
                START_OF_SUPERBURST_OUT : out   std_logic := '0';
-               SUPER_BURST_NR_OUT              : out   std_logic_vector(30 downto 0) := (others => '0')
+               SUPER_BURST_NR_OUT              : out   std_logic_vector(30 downto 0) := (others => '0');
+               SODA_CMD_WINDOW_OUT             : out   std_logic := '0'
                );
 end soda_superburst_generator;
 
@@ -60,5 +61,18 @@ begin
                        end if;
                end if;
        end process;
+\r
+       soda_cmd_window_proc : process(SODACLK)
+       begin
+               if rising_edge(SODACLK) then
+                       if (RESET='1') then
+                               SODA_CMD_WINDOW_OUT             <= '0';
+                       elsif (burst_counter_S = (cBURST_COUNT - 1)) then\r
+                               SODA_CMD_WINDOW_OUT             <= '1';
+                       elsif (burst_counter_S = 2) then
+                               SODA_CMD_WINDOW_OUT             <= '0';
+                       end if;
+               end if;
+       end process;\r
 
 end Behavioral;