... | @@ -3,18 +3,22 @@ |
... | @@ -3,18 +3,22 @@ |
|
- **Tx Streamer** transfers **data words** that are of width (n \* 16)
|
|
- **Tx Streamer** transfers **data words** that are of width (n \* 16)
|
|
bits where the upper limit of the word size is the size of Ethernet
|
|
bits where the upper limit of the word size is the size of Ethernet
|
|
frame payload (minus overhead for WR Streamers header/CRC) . The
|
|
frame payload (minus overhead for WR Streamers header/CRC) . The
|
|
width is defined by generic `data_width` (in `g_tx_streamer_params`
|
|
width is defined by generic `data_width` (in the respective
|
|
and `g_rx_streamer_params`) that must be identical for the Tx
|
|
configuration records `g_tx_streamer_params` and
|
|
Streamer of the sending node and Rx Streamer of the receiving node
|
|
`g_rx_streamer_params`) that must be identical for the Tx Streamer
|
|
(i.e. the the parameters can be different on the same node). For
|
|
of the sending node and Rx Streamer of the receiving node (i.e. the
|
|
example, the **data word** width in the
|
|
parameters can be different on the same node). For example, the
|
|
|
|
**data word** width in the
|
|
[BTrain-over-WhiteRabbit](https://gitlab.cern.ch/BTrain-TEAM/Btrain-over-WhiteRabbit/wikis/home)
|
|
[BTrain-over-WhiteRabbit](https://gitlab.cern.ch/BTrain-TEAM/Btrain-over-WhiteRabbit/wikis/home)
|
|
project is **208 bits** while the data width in the
|
|
project is **208 bits** while the data width in the
|
|
[streamers-on-spec\_trigger-distribution](https://www.ohwr.org/project/wr-cores/wikis/wr-streamers-simulation)
|
|
[streamers-on-spec\_trigger-distribution](https://www.ohwr.org/project/wr-cores/wikis/wr-streamers-simulation)
|
|
example is **80 buts**.
|
|
example is **80 buts**.
|
|
- **Data words** can be grouped in **blocks** of any size with upper
|
|
- **Data words** can be grouped in **blocks** of any size with upper
|
|
limit defined by `max_words_per_frame` (in `g_tx_streamer_params`) ,
|
|
limit defined by `max_words_per_frame` (in the record
|
|
each **block** has independent sequence number and CRC.
|
|
`g_tx_streamer_params`) , each **block** has independent sequence
|
|
|
|
number and CRC so that the sanity of a record can be evaluated and
|
|
|
|
the data used even before the entire Ethernet Frame is received.
|
|
|
|
This is to decrease transmission latency.
|
|
- A stream of **data words** arranged in one or more **blocks** is
|
|
- A stream of **data words** arranged in one or more **blocks** is
|
|
encapsulated into an Ethernet Frame. At transmission, the frame is
|
|
encapsulated into an Ethernet Frame. At transmission, the frame is
|
|
timestamped and the timestamp included in the frame.
|
|
timestamped and the timestamp included in the frame.
|
... | @@ -22,10 +26,10 @@ |
... | @@ -22,10 +26,10 @@ |
|
- A complete **block** was written to the buffer of the Tx
|
|
- A complete **block** was written to the buffer of the Tx
|
|
Streamer, and the number of **data words** waiting for
|
|
Streamer, and the number of **data words** waiting for
|
|
transmission exceeds the number defined by generic
|
|
transmission exceeds the number defined by generic
|
|
`g_tx_threshold` (in `g_tx_streamer_params`),
|
|
`g_tx_threshold` (in the record `g_tx_streamer_params`),
|
|
- There are **data words** in the buffer of the Tx Streamer, and
|
|
- There are **data words** in the buffer of the Tx Streamer, and
|
|
the time elapsed from the latest write to Tx Streamer exceeded
|
|
the time elapsed from the latest write to Tx Streamer exceeded
|
|
timeout defined by generic `timeout` (in
|
|
timeout defined by generic `timeout` (in the record
|
|
`g_tx_streamer_params`),
|
|
`g_tx_streamer_params`),
|
|
- The user asserts `tx_flush_i` to explicitly request transmission
|
|
- The user asserts `tx_flush_i` to explicitly request transmission
|
|
of the data that has been written to the buffer of the Tx
|
|
of the data that has been written to the buffer of the Tx
|
... | @@ -41,7 +45,10 @@ practice. |
... | @@ -41,7 +45,10 @@ practice. |
|
|
|
|
|
The number of **data words** grouped into **blocks** is specified by the
|
|
The number of **data words** grouped into **blocks** is specified by the
|
|
user who indicates the last **data word**. Inside the frame, each
|
|
user who indicates the last **data word**. Inside the frame, each
|
|
*block** ends with a CRC and an *escape code* (`0xCAFE`).
|
|
*block** ends with a CRC and an *escape code* (`0xCAFE`). If such
|
|
|
|
*escape code* happens to be in transmitted data, another `0xCAFE` is
|
|
|
|
inserted during transmission. Two consecutive *escape codes* indicate to
|
|
|
|
the receiver that the received data included `0xCAFE`.
|
|
The Streamer Frame consists of a transmission timestamp and a collection
|
|
The Streamer Frame consists of a transmission timestamp and a collection
|
|
of **blocks**, it is sent in the payload of an Ethernet Frame, as
|
|
of **blocks**, it is sent in the payload of an Ethernet Frame, as
|
|
depicted in the figure below.
|
|
depicted in the figure below.
|
... | @@ -50,8 +57,12 @@ Each **block** starts with an ID number |
... | @@ -50,8 +57,12 @@ Each **block** starts with an ID number |
|
- the ID number of the **block** that immediately follows the Ethernet
|
|
- the ID number of the **block** that immediately follows the Ethernet
|
|
Header, is the sequence number of the frame
|
|
Header, is the sequence number of the frame
|
|
- the ID number of the subsequent **blocks**, is the inter-frame
|
|
- the ID number of the subsequent **blocks**, is the inter-frame
|
|
sequence number of the
|
|
sequence number of the **block**
|
|
*block**
|
|
|
|
|
|
In the figure, grey text indicates sizes in case the Ethernet Frame
|
|
|
|
includes [VLAN tag](https://en.wikipedia.org/wikis/IEEE_802.1Q). Click
|
|
|
|
the figure to
|
|
|
|
enlarge.
|
|
|
|
|
|
[![](/uploads/e9f6b568d102f612b4e1e034378629bb/Streamer-frame.v2.jpg)](/uploads/fe4c7b7ed7f46451f6cb0c5f49c7037d/Streamer-frame.v2-large.jpg)
|
|
[![](/uploads/e9f6b568d102f612b4e1e034378629bb/Streamer-frame.v2.jpg)](/uploads/fe4c7b7ed7f46451f6cb0c5f49c7037d/Streamer-frame.v2-large.jpg)
|
|
|
|
|
... | | ... | |