From dd2061b86b2e6d12298d2f386c96ba6f4027c400 Mon Sep 17 00:00:00 2001 From: Michael Boehmer Date: Fri, 1 Jul 2022 13:00:53 +0200 Subject: [PATCH] LED ACT added --- .../base/gbe_med_interface_single.vhd | 46 +++++++++++++++---- gbe_trb_ecp5/base/gbe_wrapper_single.vhd | 1 - 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/gbe_trb_ecp5/base/gbe_med_interface_single.vhd b/gbe_trb_ecp5/base/gbe_med_interface_single.vhd index 7cb12e8..7a1f33e 100644 --- a/gbe_trb_ecp5/base/gbe_med_interface_single.vhd +++ b/gbe_trb_ecp5/base/gbe_med_interface_single.vhd @@ -222,6 +222,12 @@ architecture RTL of gbe_med_interface_single is signal delay_q : std_logic_vector(7 downto 0); signal pulse : std_logic; + signal led_timer : unsigned(19 downto 0); + signal led_timer_done_x : std_logic; + signal led_timer_done : std_logic; + signal led_activity_x : std_logic; + signal led_activity : std_logic_vector(1 downto 0); + begin -- We allow only one GbE in ECP5 for now @@ -350,14 +356,14 @@ begin ); -- Status signals - STATUS_OUT(0) <= link_tx_ready; -- SerDes TX channel operational - STATUS_OUT(1) <= link_rx_ready; -- SerDes Rx channel operational - STATUS_OUT(2) <= an_complete; -- GbE Autonegotiation completed - STATUS_OUT(3) <= pcs_tx_en; -- SerDes TX activity - STATUS_OUT(4) <= pcs_rx_en; -- SerDes RX activity - STATUS_OUT(5) <= '0'; - STATUS_OUT(6) <= '0'; STATUS_OUT(7) <= '0'; + STATUS_OUT(6) <= '0'; + STATUS_OUT(5) <= led_activity(1); -- long LED signal for activity + STATUS_OUT(4) <= pcs_rx_en; -- SerDes RX activity + STATUS_OUT(3) <= pcs_tx_en; -- SerDes TX activity + STATUS_OUT(2) <= an_complete; -- GbE Autonegotiation completed + STATUS_OUT(1) <= link_rx_ready; -- SerDes Rx channel operational + STATUS_OUT(0) <= link_tx_ready; -- SerDes TX channel operational -- SGMII core SGMII_GBE_PCS : sgmii_gbe_core @@ -509,5 +515,29 @@ begin -- Debug DEBUG_OUT => open ); - + + THE_LED_TIMER_PROC: process( CLK_125_IN ) + begin + if( rising_edge(CLK_125_IN) ) then + led_timer_done <= led_timer_done_x; + led_timer <= led_timer + 1; + end if; + end process THE_LED_TIMER_PROC; + + led_timer_done_x <= '1' when (std_logic_vector(led_timer) = x"fffff") else '0'; + + led_activity_x <= pcs_rx_en or pcs_tx_en; + + THE_LED_ACT_PROC: process( CLK_125_IN ) + begin + if( rising_edge(CLK_125_IN) ) then + if( led_activity_x = '1' ) then + led_activity(0) <= '1'; + end if; + if( led_timer_done = '1' ) then + led_activity <= led_activity(0) & '0'; + end if; + end if; + end process THE_LED_ACT_PROC; + end architecture RTL; diff --git a/gbe_trb_ecp5/base/gbe_wrapper_single.vhd b/gbe_trb_ecp5/base/gbe_wrapper_single.vhd index e065ab2..d9752f8 100644 --- a/gbe_trb_ecp5/base/gbe_wrapper_single.vhd +++ b/gbe_trb_ecp5/base/gbe_wrapper_single.vhd @@ -220,7 +220,6 @@ architecture RTL of gbe_wrapper_single is begin -- assert hits if condition in brackets is true, or overall condition is false --- assert not (dual_mode = 8) report "Note: DUAL with one slave port detected" severity note; assert not (NUMBER_OF_GBE_LINKS /= 1) report "Error: only one GbE link allowed" severity error; assert not (LINKS_ACTIVE /= b"0001") report "Error: no / wrong GbE interface selected" severity error; -- 2.43.0