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
);
-- 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
-- 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;