CombinerV1

CombinerV1 combines individual Rogue stream frames into a Batcher v1 super-frame. It is the software inverse of SplitterV1. For conceptual guidance, see Batcher Protocol Combiner.

Protocol reference: https://confluence.slac.stanford.edu/x/th1SDg

Python binding

This C++ class is also exported into Python as rogue.protocols.batcher.CombinerV1.

Python API page: - CombinerV1

CombinerV1 objects in C++ are referenced by the following shared pointer typedef:

typedef std::shared_ptr<rogue::protocols::batcher::CombinerV1> rogue::protocols::batcher::CombinerV1Ptr
[header]

The class description is shown below:

class CombinerV1 : public rogue::interfaces::stream::Master, public rogue::interfaces::stream::Slave
[header]

Combines individual frames into a batcher v1 super-frame.

Protocol reference: https://confluence.slac.stanford.edu/x/th1SDg

CombinerV1 is the software inverse of SplitterV1. It collects individual Rogue stream frames and packs them into a single batcher v1 super-frame with the appropriate super-header and per-record tails.

The width parameter controls the AXI stream width encoding:

  • 0 = 16-bit (header=2, tail=8)

  • 1 = 32-bit (header=4, tail=8)

  • 2 = 64-bit (header=8, tail=8)

  • 3 = 128-bit (header=16, tail=16)

  • 4 = 256-bit (header=32, tail=32)

  • 5 = 512-bit (header=64, tail=64)

Threading model:

Public Functions

explicit CombinerV1(uint8_t width)
[header] [impl]

Constructs a CombinerV1 instance.

Creator.

Parameters:

width – AXI stream width encoding (0-5).

~CombinerV1()
[header] [impl]

Destroys the combiner.

Deconstructor.

virtual void acceptFrame(std::shared_ptr<rogue::interfaces::stream::Frame> frame)
[header] [impl]

Accepts a frame and immediately queues it for batching.

Accept a frame from master.

Parameters:

frame – Input frame to be included in the next batch.

void sendBatch()
[header] [impl]

Builds and sends a batcher v1 super-frame from all queued frames.

Build and send the batched super-frame.

If no frames are queued, this is a no-op. After sending, the queue is cleared and the sequence counter is incremented.

uint32_t getCount()
[header] [impl]

Returns the number of frames currently queued.

Return queue count.

Returns:

Queue depth.

Public Static Functions

static void setup_python()
[header] [impl]

Registers Python bindings for this class.

Setup class in python.

static std::shared_ptr<rogue::protocols::batcher::CombinerV1> create(uint8_t width)
[header] [impl]

Creates a CombinerV1 instance.

Class creation.

Company : SLAC National Accelerator Laboratory

Description : AXI Batcher V1 Combiner (SW Batcher) (https://confluence.slac.stanford.edu/x/th1SDg)

Builds a batcher v1 super-frame from individual frames. This is the software inverse of the SplitterV1 unbatcher.

Super-frame layout (same as FW batcher):

[Super Header][Record0 Data][Record0 Tail][Record1 Data][Record1 Tail]…

Super Header: Byte 0: Bits 3:0 = Version = 1 Bits 7:4 = Width = 2 * 2 ^ val Bytes Byte 1: Bits 15:8 = Sequence # for debug Rest of width padded with zeros

Frame Tail: Tail size is max(width, 8 bytes). Padded with zeros. Word 0: bits 31:0 = size (payload bytes) Word 1: bits 7:0 = Destination bits 15:8 = First user bits 23:16 = Last user bits 31:24 = Width (bits 3:0 = width encoding, bits 7:4 = 0)

This file is part of the rogue software platform. It is subject to the license terms in the LICENSE.txt file found in the top-level directory of this distribution and at: https://confluence.slac.stanford.edu/display/ppareg/LICENSE.html. No part of the rogue software platform, including this file, may be copied, modified, propagated, or distributed except according to the terms contained in the LICENSE.txt file.

Parameters:

width – AXI stream width encoding (0-5).

Returns:

Shared pointer to the created combiner.