From 33ecd1aa93b84e1b293cc6c1b0b2d125b9e078b7 Mon Sep 17 00:00:00 2001 From: Ingo Froehlich Date: Thu, 1 Nov 2018 12:34:03 +0100 Subject: [PATCH] added ecp5 --- media_interfaces/med_ecp3_sfp_sync_4.vhd | 1 - media_interfaces/med_ecp5_sfp_sync.vhd | 63 +++++++++++++++++++--- media_interfaces/sync/med_sync_control.vhd | 3 +- media_interfaces/sync/rx_control.vhd | 2 +- 4 files changed, 59 insertions(+), 10 deletions(-) diff --git a/media_interfaces/med_ecp3_sfp_sync_4.vhd b/media_interfaces/med_ecp3_sfp_sync_4.vhd index b0dd941..16b6831 100644 --- a/media_interfaces/med_ecp3_sfp_sync_4.vhd +++ b/media_interfaces/med_ecp3_sfp_sync_4.vhd @@ -15,7 +15,6 @@ entity med_ecp3_sfp_sync_4 is generic( IS_SYNC_SLAVE : int_array_t(0 to 3) := (c_NO, c_NO, c_NO, c_NO); --select slave mode IS_USED : int_array_t(0 to 3) := (c_YES,c_YES,c_YES,c_YES); - REG_OFFSET : std_logic_vector(7 downto 0) := x"00" ); port( CLK_REF_FULL : in std_logic; -- 200 MHz reference clock diff --git a/media_interfaces/med_ecp5_sfp_sync.vhd b/media_interfaces/med_ecp5_sfp_sync.vhd index 109b438..bb9cffc 100644 --- a/media_interfaces/med_ecp5_sfp_sync.vhd +++ b/media_interfaces/med_ecp5_sfp_sync.vhd @@ -36,6 +36,7 @@ entity med_ecp5_sfp_sync is 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 + --Control Interface BUS_RX : in CTRLBUS_RX; BUS_TX : out CTRLBUS_TX; @@ -105,6 +106,13 @@ attribute nopad of hdinp, hdinn, hdoutp, hdoutn : signal is "true"; signal stat_med : std_logic_vector(31 downto 0); +signal mii_tx_i : CTRLBUS_TX; +signal mii_rx_i : CTRLBUS_RX; + +signal loc_bus_rx : CTRLBUS_RX; +signal loc_bus_tx : CTRLBUS_TX; + + begin clk_200_ref <= CLK_REF_FULL; @@ -235,7 +243,10 @@ THE_MED_CONTROL : entity work.med_sync_control DEBUG_TX_CONTROL => debug_tx_control_i, DEBUG_RX_CONTROL => debug_rx_control_i, STAT_RESET => stat_fsm_reset_i, - DEBUG_OUT => debug_med_sync_control_i + DEBUG_OUT => debug_med_sync_control_i, + + BUS_RX => mii_rx_i, + BUS_TX => mii_tx_i ); THE_SCI_READER : entity work.sci_reader @@ -256,15 +267,53 @@ THE_SCI_READER : entity work.sci_reader --Slowcontrol BUS_RX => BUS_RX, BUS_TX => BUS_TX, - - MEDIA_STATUS_REG_IN(31 downto 0) => stat_rx_control_i, - MEDIA_STATUS_REG_IN(63 downto 32) => stat_tx_control_i, - MEDIA_STATUS_REG_IN(95 downto 64) => stat_fsm_reset_i, - MEDIA_STATUS_REG_IN(127 downto 96) => stat_med, - MEDIA_STATUS_REG_IN(255 downto 128) => (others => '0'), + + LOC_BUS_RX => loc_BUS_RX, + LOC_BUS_TX => loc_BUS_TX, + + --MEDIA_STATUS_REG_IN(31 downto 0) => stat_rx_control_i, + --MEDIA_STATUS_REG_IN(63 downto 32) => stat_tx_control_i, + --MEDIA_STATUS_REG_IN(95 downto 64) => stat_fsm_reset_i, + --MEDIA_STATUS_REG_IN(127 downto 96) => stat_med, + --MEDIA_STATUS_REG_IN(255 downto 128) => (others => '0'), DEBUG_OUT => open ); +BUS_WRITER : process + begin + wait until rising_edge(SYSCLK); + loc_BUS_TX.unknown <= '0'; + loc_BUS_TX.rack <= '0'; + loc_BUS_TX.wack <= '0'; + loc_BUS_TX.data <= x"00000000"; + loc_BUS_TX.ack <= '0'; + + mii_rx_i.data <= loc_BUS_RX.data; + mii_rx_i.addr <= loc_BUS_RX.addr; + mii_rx_i.read <= '0'; + mii_rx_i.write <= '0'; + + if loc_BUS_RX.addr(2) = '0' then + if loc_BUS_RX.read = '1' then + loc_BUS_TX.ack <= '1'; + case loc_BUS_RX.addr(4 downto 0) is + when "00000" => loc_BUS_TX.data <= stat_rx_control_i(31 downto 0); + when "00001" => loc_BUS_TX.data <= stat_tx_control_i(31 downto 0); + when "00010" => loc_BUS_TX.data <= stat_fsm_reset_i(31 downto 0); + end case; + end if; + else + if mii_tx_i.ack = '1' then + loc_BUS_TX.data <= mii_tx_i.data; + loc_BUS_TX.ack <= '1'; + loc_BUS_TX.unknown <= mii_tx_i.unknown; + end if; + mii_rx_i.read <= loc_BUS_RX.read; + mii_rx_i.write <= loc_BUS_RX.write; + end if; +end process; + + -- STAT_DEBUG(4 downto 0) <= debug_rx_control_i(4 downto 0); -- STAT_DEBUG(6 downto 5) <= stat_fsm_reset_i(9 downto 8); -- STAT_DEBUG(7) <= '0'; diff --git a/media_interfaces/sync/med_sync_control.vhd b/media_interfaces/sync/med_sync_control.vhd index 88d9ca7..a327759 100644 --- a/media_interfaces/sync/med_sync_control.vhd +++ b/media_interfaces/sync/med_sync_control.vhd @@ -259,7 +259,8 @@ PROC_REG : process begin case BUS_RX.addr(1 downto 0) is when "00" => BUS_TX.data <= x"00000" & "00" & tx_force_pak_error & tx_force_crc_error & crc_error_delay & "000" & force_crc_error; when "01" => BUS_TX.data <= request_retr_counter & start_retr_counter; - --when "11" => BUS_TX.data <= x"000000" & DEBUG_RX_CONTROL_i(31 downto 24); + --when "11" => BUS_TX.data <= x"000000" & DEBUG_RX_CONTROL_i(31 downto 24); + when "11" => BUS_TX.data <= x"deadface"; when others => BUS_TX.unknown <= '1'; end case; end if; diff --git a/media_interfaces/sync/rx_control.vhd b/media_interfaces/sync/rx_control.vhd index e6513ff..cbac893 100644 --- a/media_interfaces/sync/rx_control.vhd +++ b/media_interfaces/sync/rx_control.vhd @@ -573,7 +573,7 @@ STAT_REG_OUT(6) <= ct_fifo_empty; STAT_REG_OUT(7) <= ct_fifo_write; STAT_REG_OUT(15 downto 8) <= reg_rx_data_in when rising_edge(clk_100); --rx_data(7 downto 0); STAT_REG_OUT(16) <= rx_data(16); -STAT_REG_OUT(17) <= '0'; +STAT_REG_OUT(17) <= use_crc; STAT_REG_OUT(31 downto 18) <= (others => '0'); -- 2.43.0