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
| Name | Type | Default | Description |
|---|---|---|---|
NUM_TELEMETRY_RECEIVERS | int unsigned | 3 | Receiver instance count. |
TELEMETRY_RECEIVER_BUFFER_DEPTH | int unsigned | 8 | Per-receiver message FIFO depth; must be a power of two and >= 2. |
TELEMETRY_RECEIVER_MAX_NUM_COUNTERS_PER_MESSAGE | int unsigned | '{default: 4} | Per-receiver max counters. |
TELEMETRY_RECEIVER_0__REG_MAP_BASE_ADDR | bit [telemetry_receiver_wrap_pkg::RegAddrWidth-1:0] | 0 | Instance 0 register-map byte base address. |
TELEMETRY_RECEIVER_0__REG_MAP_SIZE | bit [telemetry_receiver_wrap_pkg::RegAddrWidth-1:0] | 0 | Per-instance register-map size in bytes; instances are contiguous. |
NumRegMaps | int unsigned | NUM_TELEMETRY_RECEIVERS + 1 | Decode targets: instances + error slave. |
UndefinedRegMap | telemetry_receiver_wrap_reg_map_select_t | telemetry_receiver_wrap_reg_map_select_t'(NumRegMaps-1) | Select index for the error slave. |
Ports
| Name | Direction | Type | Description |
|---|---|---|---|
clk_i | input | logic | Register-domain clock; also clocks the receivers. |
rst_ni | input | logic | Register-domain async reset, active-low. |
clk_telemetry_i | input | logic | ATB-domain clock. |
rst_telemetry_ni | input | logic | ATB-domain async reset, active-low. |
test_en_i | input | logic | Scan test mode, active-high; selects scan_rst_ni for the ATB FIFO resets. |
scan_rst_ni | input | logic | Scan reset, active-low. |
axil_req_i | input | telemetry_receiver_wrap_pkg::axil_req_t | Shared AXI-Lite request. |
axil_resp_o | output | telemetry_receiver_wrap_pkg::axil_resp_t | Shared AXI-Lite response. |
atdata_i | input | telemetry_receiver_pkg::telemetry_data_t [NUM_TELEMETRY_RECEIVERS-1:0] | Per-receiver ATB data, in the clk_telemetry_i domain. |
atid_i | input | telemetry_receiver_pkg::atb_id_t [NUM_TELEMETRY_RECEIVERS-1:0] | Per-receiver ATB ID; crosses into clk_i but the receiver ignores it. |
atready_o | output | logic [NUM_TELEMETRY_RECEIVERS-1:0] | Per-receiver ATB ready; high while the crossing FIFO has space. |
atvalid_i | input | logic [NUM_TELEMETRY_RECEIVERS-1:0] | Per-receiver ATB valid. |
afvalid_o | output | logic [NUM_TELEMETRY_RECEIVERS-1:0] | Per-receiver ATB flush valid. |
afready_i | input | logic [NUM_TELEMETRY_RECEIVERS-1:0] | Per-receiver ATB flush ready. |
telemetry_receiver_irq_o | output | logic [NUM_TELEMETRY_RECEIVERS-1:0] | Per-receiver interrupt. |
telemetry_receiver_debug_o | output | logic [NUM_TELEMETRY_RECEIVERS-1:0][3:0] | Per-receiver debug nibble; see telemetry_receiver. |