Telemetry Receiver

1. Overview

The receiver assembles an 8-bit ATB stream into probe-ID and counter messages. Software reads completed messages through a 32-bit AXI4-Lite register interface and explicitly pops each message. The core defaults to eight queued messages and four counters per message; these are elaboration parameters, not software settings. Threshold and missing-last-packet interrupts report service needs.

Reception does not stop when the message queue fills: a new message replaces the oldest one, including while software is reading it through several registers. The Telemetry Receiver section of the Programmer’s Guide gives the buffer, flush and interrupt procedures. The receiver does not use atid_i to maintain separate source contexts; producers sharing a receiver must serialize complete messages.

1.1. Message Format

Eight little-endian ATB beats form a 64-bit packet. One or more packets form a message that ends when last_packet is set.

Table 1 defines the fields carried in each telemetry packet.

Table 1. Telemetry packet fields
Field Width Location

last_packet

1 bit

Bit 63 of each packet

probe_id

5 bits

Bits [60:56] of the first packet

block

9 bits

Seven per packet: 1-bit valid + 8-bit data

counter

32 bits

Four consecutive blocks, most-significant byte first

A counter is valid only when all four of its blocks are valid. The number of counters per message is parameterized (default 4); the field layout is fixed.

2. Architecture

The receiver has two stores: a byte assembly buffer for the incoming message and a queue of decoded messages for software. Neither is a second independently configurable telemetry channel.

2.1. Assembly and Decode

An accepted beat (atvalid_i && atready_o) writes one assembly byte. Eight beats form a packet, least-significant byte first. Bit 63 marks the last packet; the first packet carries the probe ID at bits [60:56]. Counter decoding starts at block 1 of the first packet, continues across packet boundaries, and assembles each counter most-significant byte first. All four block-valid bits must be set for a counter to be valid; otherwise its decoded value is zero.

The assembly capacity is derived from MAX_NUM_COUNTERS_PER_MESSAGE. Reaching that capacity without a last-packet marker raises MISSING_LAST and resets the write pointer. A last-packet marker also resets the pointer and queues the decoded message. The core accepts beats except during a receiver-flush pulse; message-queue fullness does not apply backpressure.

Every configured counter position is decoded, including positions beyond the last packet received. A short message following a longer one can therefore inherit trailing values and validity bits. Producers must overwrite the complete configured message footprint and mark unused counter blocks invalid. Receiver flush resets the pointer but leaves assembly bytes intact; only reset clears that storage.

2.2. Message Queue and Readout

The queue exposes its oldest message in TELEMETRY_PROBE_ID, TELEMETRY_COUNTER_VLDS and TELEMETRY_COUNTER[0..31]. Reads do not consume data; CTRL.BUFFER_POP advances the queue only when it is nonempty. Empty-queue reads return zero. Counter registers beyond the configured counter count also return zero and have cleared validity bits.

On arrival while full, hardware drops the oldest message and advances the read pointer. There is no snapshot across the separate software reads: overflow can change the visible message mid-read. Arrange sufficient buffering/service rate, or quiesce the producer, when a coherent software snapshot is required. STATUS reports empty/full, not a numeric occupancy count or an overflow interrupt.

2.3. Interrupts

irq_o is the OR of the two status sources masked by their corresponding INTR_ENABLE bits. Masking an interrupt does not acknowledge its source.

Table 2. Telemetry interrupt conditions
Source Condition and clearing

MISSING_LAST

Sticky status when assembly capacity is reached without the last-packet marker. It latches even while disabled. Write one to the status bit to clear it; INTR_TEST.MISSING_LAST supplies a test pulse.

BUFFER_THRESHOLD

Read-only live status while occupancy is strictly greater than the effective threshold, or INTR_TEST.BUFFER_THRESHOLD is set. Drain to at most the threshold, raise the threshold, or clear the test bit as appropriate. Writing the status bit does not clear this source.

2.4. Reset and Flush

Reset clears assembly bytes, queue pointers and control/interrupt registers. Queue payload storage is not reset, but empty-queue reads return zero. Supply rst_ni with asynchronous assertion and deassertion synchronized to clk_i.

CTRL.TELEMETRY_RX_FLUSH is a pulse that discards queued messages and resets the assembly pointer. It does not erase either payload store or purge the wrapper’s upstream ATB crossing FIFO. Quiesce traffic when an empty receiver must remain empty after the pulse.

CTRL.TELEMETRY_TX_FLUSH requests a flush from the upstream transmitter through afvalid_o. Hardware clears the request after afvalid_o && afready_i. Completion depends on the producer’s acknowledgement; this is separate from a local receiver flush.

3. Interface

The Telemetry Receiver component provides AXI4-Lite register access and Advanced Trace Bus (ATB) telemetry data reception interfaces.

3.1. Configuration Parameters

The parameters and ports of telemetry_receiver are listed in telemetry_receiver.

The core has two elaboration parameters. BUFFER_DEPTH (default 8) sets the number of decoded messages the queue holds; it must be a power of two and at least 2. MAX_NUM_COUNTERS_PER_MESSAGE (default 4) sets the number of counters decoded from each message.

The ATB beat width (8 bits), packet width (64 bits), counter width (32 bits) and ATB ID width (7 bits) are package constants. The core register port has an 8-bit address and 32-bit data path.

3.3. Global Interface

The global interface provides fundamental clock and reset signals required for basic operation.

3.4. Clock and Reset

clk_i is the core clock and rst_ni its asynchronous, active-low reset; telemetry_receiver_wrap adds clk_telemetry_i / rst_telemetry_ni for the ATB side. Clock frequency, jitter, reset duration and physical timing constraints must come from the integration timing specification.

3.5. ATB Telemetry Interface

The ATB (Advanced Trace Bus) interface receives telemetry data using standard ATB protocol.

3.6. ATB Protocol Specifications

  • Data Width: 8 bits per beat

  • ID Width: 7 bits; the receiver ignores atid_i

  • Flow Control: Valid/ready handshaking for reliable data transfer

  • Flush Support: Bidirectional flush signaling for stream management

  • Back-pressure: Component can assert atready_o low to apply back-pressure

  • Latency: Zero-cycle latency when ready, immediate acceptance when atready_o is high

3.7. Interrupt Interface

The interrupt interface provides a single interrupt output for event notification.

3.8. Interrupt Specifications

  • Polarity: Active high (asserted when high)

  • Duration: Level-sensitive, remains asserted until cleared

  • Sources: Buffer threshold and error condition interrupts

  • Clearing: MISSING_LAST is write-one-to-clear. The read-only BUFFER_THRESHOLD source remains asserted while occupancy exceeds the configured threshold or its test bit is set; it cannot be cleared by writing status.

  • Latency: Interrupt assertion within 2 clock cycles of triggering condition

3.9. Subsystem Wrapper

telemetry_receiver_wrap defaults to three receivers. It configures their queue depth with TELEMETRY_RECEIVER_BUFFER_DEPTH (default 8) and counter counts with TELEMETRY_RECEIVER_MAX_NUM_COUNTERS_PER_MESSAGE (default 4 per receiver). Actual subsystem values and aperture assignments come from the integration.

The wrapper receives ATB traffic on clk_telemetry_i / rst_telemetry_ni and crosses it into clk_i / rst_ni through an eight-entry asynchronous FIFO per receiver. Its external ready signal reflects crossing-FIFO capacity. This does not turn the core’s decoded-message queue into a lossless backpressured queue. The wrapper also contains flush-handshake synchronizers and returns a decode error for register addresses outside its configured receiver apertures.

4. Memory Map and Register Reference

4.1. Memory Map

Each core occupies 256 bytes with 32-bit registers at four-byte offsets. Control, status, interrupt and message-header registers occupy 0x00–0x18; 32 counter registers occupy 0x80–0xFC. The wrapper map places each receiver in its integration-defined aperture. Reset values and field access types are specified below; reset and flush storage behavior is described in Architecture.

4.2. Detailed Register Map

Telemetry Receiver Address Map

Configuration, status, and data-buffer registers for a single telemetry receiver channel.

Register Arrays:

  • TELEMETRY_COUNTER[32]: 32 registers, base 0x80, stride 0x4

Register List:

Table 3. Telemetry Receiver Address Map register list
AddressNameAccessDescription
0x0CTRLRWControl Register
0x4STATUSRStatus Register
0x8INTR_STATUSRWInterrupt Status Register
0xCINTR_ENABLERWInterrupt Enable Register
0x10INTR_TESTRWInterrupt Test Register
0x14TELEMETRY_PROBE_IDRTelemetry Probe ID Register
0x18TELEMETRY_COUNTER_VLDSRTelemetry Counter Valid Bits Register
0x80 - 0xFCTELEMETRY_COUNTER[32]RTelemetry Counter Register

Register Details:

CTRL

Table 4. telemetry_receiver.CTRL fields
BitsFieldAccessResetDescription
31:24Reserved--Reserved
23:12BUFFER_THRESHOLDRW0x0Telemetry Message Buffer Threshold. The Telemetry Buffer Threshold Interrupt is
asserted when the number of entries in the buffer is greater than this value.
Only the low log2(queue depth)+1 bits are compared, so values alias modulo
twice the queue depth, and only values below the queue depth can assert the
interrupt.
11:9Reserved--Reserved
8TELEMETRY_TX_FLUSHRW0x0Telemetry Transmitter Flush. Writing `1` flushes all FIFOs in the telemetry
transmitter. The flushing is done via the ATB AF interface. This bit clears
itself after the flush completes.
7:5Reserved--Reserved
4TELEMETRY_RX_FLUSHW 1P0x0Telemetry Receiver Flush. Writing `1` discards queued messages and resets the assembly write
pointer. Stored payload bytes are not cleared. In particular, a later short
message can retain trailing counter values and validity from an earlier
message. This operation does not erase storage.
3:1Reserved--Reserved
0BUFFER_POPW 1P0x0Telemetry Message Buffer Pop. Effective only if `STATUS.BUFFER_EMPTY = 0`.
Writing `1` pops the buffer and thus updates the data in the
`TELEMETRY_PROBE_ID`, `TELEMETRY_COUNTER_VLDS`, and `TELEMETRY_COUNTER[32]`
registers.

STATUS

Table 5. telemetry_receiver.STATUS fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_FULLR0x0Telemetry Message Buffer Full.
3:1Reserved--Reserved
0BUFFER_EMPTYR0x1Telemetry Message Buffer Empty.

INTR_STATUS

Table 6. telemetry_receiver.INTR_STATUS fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_THRESHOLDR0x0Telemetry Message Buffer Threshold Interrupt. Asserted when the number of
telemetry messages in the Telemetry Message Buffer is greater than
`CTRL.BUFFER_THRESHOLD`.
3:1Reserved--Reserved
0MISSING_LASTRW1C0x0Last Packet Missing Interrupt. Asserted when the Telemetry Receiver has not
received a Last Packet flag when the maximum number of packets a message can
consist of has been received.

INTR_ENABLE

Table 7. telemetry_receiver.INTR_ENABLE fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_THRESHOLDRW0x0Telemetry Message Buffer Threshold Interrupt Enable.
3:1Reserved--Reserved
0MISSING_LASTRW0x0Last Packet Missing Interrupt Enable.

INTR_TEST

Table 8. telemetry_receiver.INTR_TEST fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_THRESHOLDRW0x0Telemetry Message Buffer Threshold Interrupt Test. Writing `1` forces the
interrupt and writing `0` releases it.
3:1Reserved--Reserved
0MISSING_LASTW 1P0x0Last Packet Missing Interrupt Test. Writing `1` forces the interrupt.

TELEMETRY_PROBE_ID

Table 9. telemetry_receiver.TELEMETRY_PROBE_ID fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4:0PROBE_IDR0x0Probe ID. Contains the Probe ID field of the telemetry message at the bottom of
the Telemetry Message Buffer.

TELEMETRY_COUNTER_VLDS

Table 10. telemetry_receiver.TELEMETRY_COUNTER_VLDS fields
BitsFieldAccessResetDescription
31:0COUNTER_VLDSR0x0Counter Valid Bits. Indicates which of the counter values in the telemetry
message at the bottom of the Telemetry Message Buffer are valid. Bit `i` is for
the `i`-th counter.

TELEMETRY_COUNTER[32]

Table 11. telemetry_receiver.TELEMETRY_COUNTER[32] fields
BitsFieldAccessResetDescription
31:0COUNTERR0x0Counter Value. Contains one of the 32 counter values in the telemetry message
at the bottom of the Telemetry Message Buffer.

Telemetry Receiver Wrapper Address Map

Wrapper address map instantiating the telemetry receiver channels.

Register Arrays:

  • telemetry_receiver[3].CTRL: 3 registers, base 0x0, stride 0x100
  • telemetry_receiver[3].STATUS: 3 registers, base 0x4, stride 0x100
  • telemetry_receiver[3].INTR_STATUS: 3 registers, base 0x8, stride 0x100
  • telemetry_receiver[3].INTR_ENABLE: 3 registers, base 0xC, stride 0x100
  • telemetry_receiver[3].INTR_TEST: 3 registers, base 0x10, stride 0x100
  • telemetry_receiver[3].TELEMETRY_PROBE_ID: 3 registers, base 0x14, stride 0x100
  • telemetry_receiver[3].TELEMETRY_COUNTER_VLDS: 3 registers, base 0x18, stride 0x100
  • telemetry_receiver[3].TELEMETRY_COUNTER[32]: 96 registers, base 0x80 (telemetry_receiver x3 stride 0x100, TELEMETRY_COUNTER x32 stride 0x4)

Register List:

Table 12. Telemetry Receiver Wrapper Address Map register list
AddressNameAccessDescription
0x0 - 0x200telemetry_receiver[3].CTRLRWControl Register
0x4 - 0x204telemetry_receiver[3].STATUSRStatus Register
0x8 - 0x208telemetry_receiver[3].INTR_STATUSRWInterrupt Status Register
0xC - 0x20Ctelemetry_receiver[3].INTR_ENABLERWInterrupt Enable Register
0x10 - 0x210telemetry_receiver[3].INTR_TESTRWInterrupt Test Register
0x14 - 0x214telemetry_receiver[3].TELEMETRY_PROBE_IDRTelemetry Probe ID Register
0x18 - 0x218telemetry_receiver[3].TELEMETRY_COUNTER_VLDSRTelemetry Counter Valid Bits Register
0x80 - 0x2FCtelemetry_receiver[3].TELEMETRY_COUNTER[32]RTelemetry Counter Register

Register Details:

telemetry_receiver[3].CTRL

Table 13. telemetry_receiver_wrap.telemetry_receiver[3].CTRL fields
BitsFieldAccessResetDescription
31:24Reserved--Reserved
23:12BUFFER_THRESHOLDRW0x0Telemetry Message Buffer Threshold. The Telemetry Buffer Threshold Interrupt is
asserted when the number of entries in the buffer is greater than this value.
Only the low log2(queue depth)+1 bits are compared, so values alias modulo
twice the queue depth, and only values below the queue depth can assert the
interrupt.
11:9Reserved--Reserved
8TELEMETRY_TX_FLUSHRW0x0Telemetry Transmitter Flush. Writing `1` flushes all FIFOs in the telemetry
transmitter. The flushing is done via the ATB AF interface. This bit clears
itself after the flush completes.
7:5Reserved--Reserved
4TELEMETRY_RX_FLUSHW 1P0x0Telemetry Receiver Flush. Writing `1` discards queued messages and resets the assembly write
pointer. Stored payload bytes are not cleared. In particular, a later short
message can retain trailing counter values and validity from an earlier
message. This operation does not erase storage.
3:1Reserved--Reserved
0BUFFER_POPW 1P0x0Telemetry Message Buffer Pop. Effective only if `STATUS.BUFFER_EMPTY = 0`.
Writing `1` pops the buffer and thus updates the data in the
`TELEMETRY_PROBE_ID`, `TELEMETRY_COUNTER_VLDS`, and `TELEMETRY_COUNTER[32]`
registers.

telemetry_receiver[3].STATUS

Table 14. telemetry_receiver_wrap.telemetry_receiver[3].STATUS fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_FULLR0x0Telemetry Message Buffer Full.
3:1Reserved--Reserved
0BUFFER_EMPTYR0x1Telemetry Message Buffer Empty.

telemetry_receiver[3].INTR_STATUS

Table 15. telemetry_receiver_wrap.telemetry_receiver[3].INTR_STATUS fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_THRESHOLDR0x0Telemetry Message Buffer Threshold Interrupt. Asserted when the number of
telemetry messages in the Telemetry Message Buffer is greater than
`CTRL.BUFFER_THRESHOLD`.
3:1Reserved--Reserved
0MISSING_LASTRW1C0x0Last Packet Missing Interrupt. Asserted when the Telemetry Receiver has not
received a Last Packet flag when the maximum number of packets a message can
consist of has been received.

telemetry_receiver[3].INTR_ENABLE

Table 16. telemetry_receiver_wrap.telemetry_receiver[3].INTR_ENABLE fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_THRESHOLDRW0x0Telemetry Message Buffer Threshold Interrupt Enable.
3:1Reserved--Reserved
0MISSING_LASTRW0x0Last Packet Missing Interrupt Enable.

telemetry_receiver[3].INTR_TEST

Table 17. telemetry_receiver_wrap.telemetry_receiver[3].INTR_TEST fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4BUFFER_THRESHOLDRW0x0Telemetry Message Buffer Threshold Interrupt Test. Writing `1` forces the
interrupt and writing `0` releases it.
3:1Reserved--Reserved
0MISSING_LASTW 1P0x0Last Packet Missing Interrupt Test. Writing `1` forces the interrupt.

telemetry_receiver[3].TELEMETRY_PROBE_ID

Table 18. telemetry_receiver_wrap.telemetry_receiver[3].TELEMETRY_PROBE_ID fields
BitsFieldAccessResetDescription
31:5Reserved--Reserved
4:0PROBE_IDR0x0Probe ID. Contains the Probe ID field of the telemetry message at the bottom of
the Telemetry Message Buffer.

telemetry_receiver[3].TELEMETRY_COUNTER_VLDS

Table 19. telemetry_receiver_wrap.telemetry_receiver[3].TELEMETRY_COUNTER_VLDS fields
BitsFieldAccessResetDescription
31:0COUNTER_VLDSR0x0Counter Valid Bits. Indicates which of the counter values in the telemetry
message at the bottom of the Telemetry Message Buffer are valid. Bit `i` is for
the `i`-th counter.

telemetry_receiver[3].TELEMETRY_COUNTER[32]

Table 20. telemetry_receiver_wrap.telemetry_receiver[3].TELEMETRY_COUNTER[32] fields
BitsFieldAccessResetDescription
31:0COUNTERR0x0Counter Value. Contains one of the 32 counter values in the telemetry message
at the bottom of the Telemetry Message Buffer.