]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
added ecp5
authorIngo Froehlich <ingo@nomail.fake>
Thu, 1 Nov 2018 11:34:03 +0000 (12:34 +0100)
committerIngo Froehlich <ingo@nomail.fake>
Thu, 1 Nov 2018 11:34:03 +0000 (12:34 +0100)
media_interfaces/med_ecp3_sfp_sync_4.vhd
media_interfaces/med_ecp5_sfp_sync.vhd
media_interfaces/sync/med_sync_control.vhd
media_interfaces/sync/rx_control.vhd

index b0dd9419327e2d331639ac1bac2e61e04c9c684b..16b6831101b8ae5a2442849b59e9be53d05f1c1e 100644 (file)
@@ -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
index 109b4386f7171759e86d2d9878f7152a68bf5690..bb9cffc722438e93d7a44fb7efcfbe4f1798a2db 100644 (file)
@@ -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';
index 88d9ca7c742c06e80efa7cfee617c4f2bdc46c00..a3277594459badb5674f1011a1fb5e9e90aa2672 100644 (file)
@@ -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;
index e6513ffbcf74e2ef5c4180383c4207b21943a6fc..cbac893c9cd9215b4e352130323f20d34d8d9df6 100644 (file)
@@ -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');