telemetry_receiver_wrap

Demux one AXI-Lite slave onto NUM_TELEMETRY_RECEIVERS with dual clocks.

Register accesses and the receivers use clk_i / rst_ni; ATB streams use clk_telemetry_i / rst_telemetry_ni. Receiver i decodes at TELEMETRY_RECEIVER_0__REG_MAP_BASE_ADDR plus i times TELEMETRY_RECEIVER_0__REG_MAP_SIZE; other addresses get DECERR with read data 0xBADCAB1E. The demux allows one outstanding transaction per channel. Each ATB stream crosses into clk_i through an 8-entry prim_fifo_async. afready_i passes through a 2-flop synchronizer clocked by clk_telemetry_i, and afvalid_o through one clocked by clk_i. Either reset clears both sides of every ATB FIFO; atready_o stays high while the write side is in reset, so beats offered then are dropped. NUM_TELEMETRY_RECEIVERS must be between 1 and MaxNumTelemetryReceivers. TELEMETRY_RECEIVER_BUFFER_DEPTH must be a power of two and greater than or equal to 2. NumRegMaps is NUM_TELEMETRY_RECEIVERS plus one for the error slave. Each receiver's debug nibble matches telemetry_receiver's four-bit debug bus.

Parameters

Table 1. Parameters
NameTypeDefaultDescription
NUM_TELEMETRY_RECEIVERSint unsigned3Receiver instance count.
TELEMETRY_RECEIVER_BUFFER_DEPTHint unsigned8Per-receiver message FIFO depth; must be a power of two and >= 2.
TELEMETRY_RECEIVER_MAX_NUM_COUNTERS_PER_MESSAGEint unsigned'{default: 4}Per-receiver max counters.
TELEMETRY_RECEIVER_0__REG_MAP_BASE_ADDRbit [telemetry_receiver_wrap_pkg::RegAddrWidth-1:0]0Instance 0 register-map byte base address.
TELEMETRY_RECEIVER_0__REG_MAP_SIZEbit [telemetry_receiver_wrap_pkg::RegAddrWidth-1:0]0Per-instance register-map size in bytes; instances are contiguous.
NumRegMapsint unsignedNUM_TELEMETRY_RECEIVERS + 1Decode targets: instances + error slave.
UndefinedRegMaptelemetry_receiver_wrap_reg_map_select_ttelemetry_receiver_wrap_reg_map_select_t'(NumRegMaps-1)Select index for the error slave.

Ports

Table 2. Ports
NameDirectionTypeDescription
clk_iinputlogicRegister-domain clock; also clocks the receivers.
rst_niinputlogicRegister-domain async reset, active-low.
clk_telemetry_iinputlogicATB-domain clock.
rst_telemetry_niinputlogicATB-domain async reset, active-low.
test_en_iinputlogicScan test mode, active-high; selects scan_rst_ni for the ATB FIFO resets.
scan_rst_niinputlogicScan reset, active-low.
axil_req_iinputtelemetry_receiver_wrap_pkg::axil_req_tShared AXI-Lite request.
axil_resp_ooutputtelemetry_receiver_wrap_pkg::axil_resp_tShared AXI-Lite response.
atdata_iinputtelemetry_receiver_pkg::telemetry_data_t [NUM_TELEMETRY_RECEIVERS-1:0]Per-receiver ATB data, in the clk_telemetry_i domain.
atid_iinputtelemetry_receiver_pkg::atb_id_t [NUM_TELEMETRY_RECEIVERS-1:0]Per-receiver ATB ID; crosses into clk_i but the receiver ignores it.
atready_ooutputlogic [NUM_TELEMETRY_RECEIVERS-1:0]Per-receiver ATB ready; high while the crossing FIFO has space.
atvalid_iinputlogic [NUM_TELEMETRY_RECEIVERS-1:0]Per-receiver ATB valid.
afvalid_ooutputlogic [NUM_TELEMETRY_RECEIVERS-1:0]Per-receiver ATB flush valid.
afready_iinputlogic [NUM_TELEMETRY_RECEIVERS-1:0]Per-receiver ATB flush ready.
telemetry_receiver_irq_ooutputlogic [NUM_TELEMETRY_RECEIVERS-1:0]Per-receiver interrupt.
telemetry_receiver_debug_ooutputlogic [NUM_TELEMETRY_RECEIVERS-1:0][3:0]Per-receiver debug nibble; see telemetry_receiver.