Specification

The Fragment bundle is the concept of transmitting a “big” thing by using multiple “small” fragments. For examples :

  • A picture transmitted with width*height transaction on a Stream[Fragment[Pixel]]
  • An UART packet received from an controller without flow control could be transmitted on a Flow[Fragment[Bits]]
  • An AXI read burst could be carried by an Stream[Fragment[AxiReadResponse]]

Signals defined by the Fragment bundle are :

Signal Type Driver Description
fragment T Master The “payload” of the current transaction
last Bool Master High when the fragment is the last of the current packet

As you can see with this specification and precedent example, the Fragment concept doesn’t specify how transaction are transmitted (You can use Stream,Flow or any other communication protocol). It only add enough information (last) to know if the current transaction is the first one, the last one or one in the middle of a given packet.

Functions

For Stream[Fragment[T]] and Flow[Fragment[T]], following function are presents :

Syntax Return Description
x.first Bool Return True when the next or the current transaction is/would be the first of a packet
x.tail Bool Return True when the next or the current transaction is/would be not the first of a packet
x.isFirst Bool Return True when an transaction is present and is the first of a packet
x.isTail Bool Return True when an transaction is present and is the not the first/last of a packet
x.isLast Bool Return True when an transaction is present and is the last of a packet

For Stream[Fragment[T]], following function are also accessible :

Syntax Return Description
x.insertHeader(header : T) Stream[Fragment[T]] Add the header to each packet on x and return the resulting bus
Tags: