end generate;
gen_not_used : if (IS_MODE(i) = c_IS_UNUSED) generate
- powerup_ch(i) <= '0'; -- keep in power down
- rx_serdes_rst(i) <= '1'; -- keep in reset
- rx_pcs_rst(i) <= '1'; -- keep in reset
- wap_req_i(i) <= '0';
- rx_dlm_i(i) <= '0';
- MEDIA_MED2INT(i).dataready <= '0';
- MEDIA_MED2INT(i).tx_read <= '1';
- MEDIA_MED2INT(i).stat_op <= x"0007";
- cv_cnt(i) <= (others => '0');
- word_sync_i(i) <= '0';
+ powerup_ch(i) <= '0'; -- keep in power down
+ rx_serdes_rst(i) <= '1'; -- keep in reset
+ rx_pcs_rst(i) <= '1'; -- keep in reset
+ wap_req_i(i) <= '0';
+ rx_dlm_i(i) <= '0';
+ MEDIA_MED2INT(i).dataready <= '0';
+ MEDIA_MED2INT(i).tx_read <= '1';
+ MEDIA_MED2INT(i).stat_op <= x"0007";
+ cv_cnt(i) <= (others => '0');
+ word_sync_i(i) <= '0';
RX_DLM_WORD_OUT(i*8+7 downto i*8) <= (others => '0');
rx_rst_i(i) <= '0';
rx_rst_word_i(i*8+7 downto i*8) <= (others => '0');
+ debug_i(i*32+31 downto i*32) <= (others => '0');
end generate;
end generate;
architecture sci_reader_arch of sci_reader_RS is
type sci_ctrl is (IDLE, SCTRL, SCTRL_WAIT, SCTRL_WAIT2, SCTRL_FINISH, GET_WA, GET_WA_WAIT, GET_WA_WAIT2, GET_WA_FINISH,
- W_RL, W_RL_WAIT, W_RL_WAIT2, W_RL_FINISH, W_RLS, W_RLS_WAIT, W_RLS_WAIT2, W_RLS_FINISH);
---type sci_ctrl is (IDLE, SCTRL, SCTRL_WAIT, SCTRL_WAIT2, SCTRL_FINISH, GET_WA, GET_WA_WAIT, GET_WA_WAIT2, GET_WA_FINISH);
+ W_RL_DECIDE, W_RL, W_RL_WAIT, W_RL_WAIT2, W_RL_FINISH, W_RLS, W_RLS_WAIT, W_RLS_WAIT2, W_RLS_FINISH);
signal sci_state : sci_ctrl;
signal sci_timer : unsigned(16 downto 0) := (others => '0');
signal wa_position : std_logic_vector(15 downto 0);
signal next_sci_wr : std_logic;
+signal lb_onoff_i : std_logic;
+
begin
------------------------------------------------
----------------------------------------
----------------------------------------
elsif( LB_START_IN = '1' ) then
- next_sci_wr <= '1';
- if( LB_ONOFF_IN = '1' ) then
- sci_state <= W_RL;
- else
- sci_state <= W_RLS;
- end if;
+ lb_onoff_i <= LB_ONOFF_IN;
+ sci_state <= W_RL_DECIDE;
----------------------------------------
----------------------------------------
end if;
sci_state <= IDLE;
----------------------------------------
----------------------------------------
+ when W_RL_DECIDE =>
+ next_sci_wr <= '1';
+ if( lb_onoff_i = '1' ) then
+ sci_state <= W_RL;
+ else
+ sci_state <= W_RLS;
+ end if;
when W_RL =>
SCI_SEL <= '0' & LB_SEL_IN;
SCI_ADDR <= b"010001"; -- x"11" for ECP3
- if( LB_ONOFF_IN = '1' ) then
+ if( lb_onoff_i = '1' ) then
SCI_WRDATA <= x"21"; -- source of TX data is feedback
else
- SCI_WRDATA <= x"11"; -- source of TX data is normal
+ SCI_WRDATA <= x"01"; -- source of TX data is normal
end if;
SCI_RD <= '0';
sci_state <= W_RL_WAIT;
end if;
when W_RLS =>
SCI_ADDR <= b"010100"; -- x"14" for ECP3
- if( LB_ONOFF_IN = '1' ) then
+ if( lb_onoff_i = '1' ) then
SCI_WRDATA <= x"69"; -- enable feedback
else
SCI_WRDATA <= x"09"; -- disable feedback
-- TX control state machine\r
----------------------------------------------------------------------\r
\r
- THE_DATA_CONTROL_FSM: process( CLK_TXI, CLEAR, link_active_qtx )\r
+ THE_DATA_CONTROL_FSM: process( CLK_TXI, CLEAR )\r
begin\r
if( CLEAR = '1' ) then\r
current_state <= IDLE;\r
STAT_REG_OUT(3 downto 0) <= state_bits;\r
STAT_REG_OUT(7 downto 4) <= (others => '0');\r
STAT_REG_OUT(15 downto 8) <= std_logic_vector(ram_read_addr);\r
+ STAT_REG_OUT(16) <= '0';\r
STAT_REG_OUT(17) <= ram_empty;\r
STAT_REG_OUT(18) <= link_active_qsys;\r
STAT_REG_OUT(19) <= '0';\r