axi_hang_detector

Detect stalled AXI traffic and raise a level interrupt when a hang persists.

Monitors an AXI bus via an internally instantiated prim_axi_snoop. Counts cycles with outstanding transactions and no completion; when the counter reaches the SW-programmable threshold, asserts irq_o. The threshold is loaded whenever the detector is disabled, the bus is idle or a transaction completes, so a new value takes effect at the next stall window, and a threshold of zero disables detection. irq_o is a direct combinational level with no status latch, gated by enable_i and irq_en_i. irq_test_i forces irq_o high for firmware bring-up without a real bus stall, while enable_i and irq_en_i are set. Configuration inputs are in the clk_i domain; in smc_base they come from the smc_base_config register block.

Parameters

Table 1. Parameters
NameTypeDefaultDescription
OUTSTANDING_TXint unsigned6Max outstanding tracked by the snoop.

Ports

Table 2. Ports
NameDirectionTypeDescription
clk_iinputlogicSystem clock.
rst_niinputlogicAsync reset, active-low.
snoop_aw_valid_iinputlogicSnooped AW valid (same as prim_axi_snoop).
snoop_aw_ready_iinputlogicSnooped AW ready.
snoop_w_valid_iinputlogicSnooped W valid.
snoop_b_valid_iinputlogicSnooped B valid.
snoop_b_ready_iinputlogicSnooped B ready.
snoop_ar_valid_iinputlogicSnooped AR valid.
snoop_ar_ready_iinputlogicSnooped AR ready.
snoop_r_valid_iinputlogicSnooped R valid.
snoop_r_ready_iinputlogicSnooped R ready.
snoop_r_last_iinputlogicSnooped R last.
enable_iinputlogicCTRL.enable; detector enable. Low reloads the counter and holds irq_o low.
irq_en_iinputlogicCTRL.irq_en; interrupt enable.
irq_test_iinputlogicCTRL.irq_test; forces irq_o while enable_i and irq_en_i are set.
threshold_iinputlogic [19:0]TIMEOUT_THRESHOLD.value; stalled clk_i cycles before irq_o asserts; zero disables detection.
bus_active_ooutputlogicPass-through bus_active from the snoop.
irq_ooutputlogicHang interrupt as a direct combinational level. Asserts when enable_i and irq_en_i are set and either the stall counter reaches threshold_i or irq_test_i is set.