... | ... | @@ -14,6 +14,53 @@ to |
|
|
|
|
|
-----
|
|
|
|
|
|
## Streamers principles of data transfer
|
|
|
|
|
|
- **Tx Streamer** transfers **data words** that are of width (n \* 16)
|
|
|
bits. The width is defined by generic `data_width` (in
|
|
|
t\_tx\_streamer\_params and t\_rx\_streamer\_params) that must be
|
|
|
identical for the Tx and Rx Steamer.
|
|
|
- **Data words** can be grouped in **blocks** of any size with upper
|
|
|
limit defined by `max_words_per_frame` (in t\_tx\_streamer\_params)
|
|
|
, each **block** has independent sequence number and CRC.
|
|
|
- A stream of **data words** arranged in one or more **blocks** is
|
|
|
encapsulated into an Ethernet Frame. At transmission, the frame is
|
|
|
timestamped and the timestamp included in the frame.
|
|
|
- Ethernet Frame is sent when one of the following is true:
|
|
|
- a complete **block** was written to the buffer of the Tx
|
|
|
Streamer, and the number of **data words** waiting for
|
|
|
transmission exceeds the number defined by generic
|
|
|
`max_words_per_frame` (in t\_tx\_streamer\_params),
|
|
|
- there are **data words** in the buffer of the Tx Streamer, and
|
|
|
the time elapsed from the latest write to Tx Streamer exceeded
|
|
|
timeout defined by generic `timeout` (in
|
|
|
t\_tx\_streamer\_params),
|
|
|
- the user asserts `tx_flush_i` to explicitly request transmission
|
|
|
of the data that has been written to the buffer of the Tx
|
|
|
Streamer.
|
|
|
|
|
|
-----
|
|
|
|
|
|
## Encapsulation of **data words** and **blocks** into Ethernet Frame
|
|
|
|
|
|
The number of **data words** grouped into **blocks** is specified by the
|
|
|
user who indicates the last **data word**. Inside the frame, each
|
|
|
*block** ends with a CRC and an *escape code* (`0xCAFE`).
|
|
|
The Streamer Frame consists of a transmission timestamp and a collection
|
|
|
of **blocks**, it is sent in the payload of an Ethernet Frame, as
|
|
|
depicted in the figure below.
|
|
|
Each **block** starts with an ID number
|
|
|
|
|
|
- the ID number of the **block** that immediately follows the Ethernet
|
|
|
Header, is the sequence number of the frame
|
|
|
- the ID number of the subsequent **blocks**, is the inter-frame
|
|
|
sequence number of the
|
|
|
*block**
|
|
|
|
|
|
![](/uploads/e9f6b568d102f612b4e1e034378629bb/Streamer-frame.v2.jpg)
|
|
|
|
|
|
-----
|
|
|
|
|
|
## WR streamers module
|
|
|
|
|
|
The `xwr_streamers.vhd` module (located in modules/wr\_streamers folder
|
... | ... | @@ -46,14 +93,14 @@ WB registers (via PCI or VME). |
|
|
both TX and RX streamers (set to `TX_AND_RX`) or only one
|
|
|
of them. An application that only receives or only transmits might want
|
|
|
to use `RX_ONLY` or `TX_ONLY` mode in order to save resources.
|
|
|
* `g_tx_streamer_params` - Transmission defaults for Tx streamer.
|
|
|
Corresponds to the Tx streamer generics stored in one record, see
|
|
|
[Transceiver configuration](TxRx-Streamers#transceiver-configuration)
|
|
|
for details.
|
|
|
* `g_rx_streamer_params` - Reception defaults for Rx streamer.
|
|
|
Corresponds to the Rx streamer generics stored in one record, see
|
|
|
[Transceiver configuration](TxRx-Streamers#transceiver-configuration)
|
|
|
for details.
|
|
|
* `g_tx_streamer_params` - Tx streamer generics stored in one record:
|
|
|
data\_width, buffer\_size, threshold, max\_words\_per\_frame, timeout,
|
|
|
escape\_code\_disable; see [Transceiver
|
|
|
configuration](TxRx-Streamers#transceiver-configuration) for details.
|
|
|
* `g_rx_streamer_params` - Rx streamer generics stored in one record:
|
|
|
data\_width, buffer\_size, escape\_code\_disable,
|
|
|
expected\_words\_number; see [Transceiver
|
|
|
configuration](TxRx-Streamers#transceiver-configuration) for details.
|
|
|
* `g_stats_cnt_width` - Width of statistics counters: frame
|
|
|
rx/tx/lost, block lost, counter of accumuted latency (minimum 15 bits,
|
|
|
max 64).
|
... | ... | |