... | ... | @@ -78,65 +78,90 @@ Each **block** starts with an ID number |
|
|
### **Transceiver configuration:**
|
|
|
|
|
|
- **Common to Tx and Rx**
|
|
|
- *g\_data\_width* - generic defines the width of input/output
|
|
|
data in multiples of 16 bits (n\*16). It must be identical for
|
|
|
the Tx and Rx Streamer.
|
|
|
- *g\_escape\_code\_disable* - generic, when it is TRUE, the
|
|
|
- `g_data_width` - Generic defines the width of input/output data
|
|
|
in multiples of 16 bits (n\*16). It must be identical for the Tx
|
|
|
and Rx Streamer.
|
|
|
- `g_escape_code_disable` - Generic, when it is `TRUE`, the
|
|
|
*escape code* is not used and only a single **block** can be
|
|
|
sent. Don't use it unless you know what you are doing.
|
|
|
sent. In this case, for the receiver to interpret such a frame
|
|
|
correctly, it needs to have this same generic set to true, in
|
|
|
addition to setting `g_expected_words_number` generic to the
|
|
|
expected number of words in the single block.
|
|
|
- `g_tx_buffer_size` / `g_rx_buffer_size` - Generic defines size
|
|
|
of Tx/Rx buffer, in data words. In the case of the Tx streamer,
|
|
|
it is recommended that this value exceeds 2\*g\_tx\_threshold
|
|
|
(Description to follow).
|
|
|
|
|
|
<!-- end list -->
|
|
|
|
|
|
- **Tx specific**
|
|
|
- *g\_tx\_threshold* - generic defines minimum number of data
|
|
|
words in the buffer of the Tx Streamer that will trigger
|
|
|
transmission of an Ethernet Frame.
|
|
|
- *g\_tx\_max\_words\_per\_frame* - generic defines maximum number
|
|
|
of data words in a single Ethernet Frame. It also defines the
|
|
|
- `g_tx_threshold` - Generic defines minimum number of data words
|
|
|
in the buffer of the Tx Streamer that will trigger transmission
|
|
|
of an Ethernet Frame.
|
|
|
- `g_tx_max_words_per_frame` - Generic defines maximum number of
|
|
|
data words in a single Ethernet Frame. It also defines the
|
|
|
maximum block size.
|
|
|
- *g\_tx\_timeout* - generic defines transmission timeout (in
|
|
|
- `g_tx_timeout` - Generic defines transmission timeout (in
|
|
|
clk\_sys\_i cycles), after which the content of the buffer in
|
|
|
the Tx Streamer is sent regardless of the amount of data that is
|
|
|
currently stored in the buffer, so that data in the buffer does
|
|
|
not get stuck.
|
|
|
- `g_simulation` and `g_sim_startup_cnt` - **Simulation specific**
|
|
|
generics. Used in order to avoid long simulation delays due to
|
|
|
external module startup.
|
|
|
|
|
|
<!-- end list -->
|
|
|
|
|
|
- **Rx specific**
|
|
|
- *g\_buffer\_size* - generic defines size of the buffer in the Rx
|
|
|
Streamer, in data words.
|
|
|
- *g\_expected\_words\_number* - generic defines the number of
|
|
|
words that is expected by the receiver. Don't use it unless you
|
|
|
know what you are doing.
|
|
|
- `g_expected_words_number` - generic defines the number of words
|
|
|
that is expected by the receiver. This is a legacy feature, when
|
|
|
only a fixed number of words is ever received. By setting it to
|
|
|
a non-zero value, and combined with setting the
|
|
|
`g_escape_code_disable` generic in both tx and rx to `TRUE`,
|
|
|
this feature can be enabled (Though **not recommended**).
|
|
|
|
|
|
### **Networking configuration (Tx and Rx Streamer):**
|
|
|
|
|
|
* cfg\_mac\_local\_i - local MAC address. Leave at 0 when using with
|
|
|
the WR MAC/Core, it will insert its own source MAC.
|
|
|
Information on network configuration is stored in VHDL records,
|
|
|
respectively `t_tx_streamer_cfg` and `t_rx_streamer_cfg`.
|
|
|
|
|
|
* cfg\_mac\_target\_i/ cfg\_mac\_remote\_i - Destination MAC address
|
|
|
on Tx module, source MAC address for Rx module.
|
|
|
The Tx record contains the following fields:
|
|
|
|
|
|
* cfg\_ethertype\_i - Ethertype of streamer frames. Default value is
|
|
|
accepted by the standard configuration of the [WR PTP
|
|
|
Core](/Wrpc-core).
|
|
|
* `mac_local` - local MAC address. Leave at 0 when using with the WR
|
|
|
MAC/Core, as it will insert its own source MAC.
|
|
|
|
|
|
* `mac_target` / `mac_remote` - Destination MAC address on Tx module,
|
|
|
source MAC address for Rx module.
|
|
|
|
|
|
* `ethertype` - Ethertype of streamer frames. Default value is
|
|
|
accepted by the standard configuration of the [WR PTP Core](/Wrpc-core).
|
|
|
|
|
|
* `qtag_ena` - Enables tagging with VLAN tags.
|
|
|
|
|
|
* `qtag_vid` - The ID of the VLAN used to tag.
|
|
|
|
|
|
* `qtag_prio` - Tagging
|
|
|
priority.
|
|
|
|
|
|
### **WR timing input (optional, to allow latency measurement, Tx and Rx Streamer):**
|
|
|
|
|
|
* clk\_ref\_i - White Rabbit reference clock
|
|
|
* `clk_ref_i` - White Rabbit reference clock.
|
|
|
|
|
|
* tm\_time\_valid\_i - Time valid flag
|
|
|
* `tm_time_valid_i` - Time valid flag.
|
|
|
|
|
|
* tm\_tai\_i - TAI seconds
|
|
|
* `tm_tai_i` - TAI seconds.
|
|
|
|
|
|
* tm\_cycles\_i - Fractional part of the second (in number of
|
|
|
clk\_ref\_i cycles)
|
|
|
* `tm_cycles_i` - Fractional part of the second (in number of
|
|
|
clk\_ref\_i cycles).
|
|
|
|
|
|
* `link_ok_i` - Status of the link, in principle the transmitter can
|
|
|
be done only if link is OK.
|
|
|
|
|
|
### **FIFO-like interface (Tx and Rx Streamer)**:
|
|
|
|
|
|
* the figure and tables below provide information on interfaces that
|
|
|
* The figure and tables below provide information on interfaces that
|
|
|
are used to write data words to the Tx Streamer and read data words from
|
|
|
the Rx Streamer
|
|
|
the Rx Streamer.
|
|
|
|
|
|
* These signal assertions are shown in a [waveform
|
|
|
example](https://www.ohwr.org/project/wr-cores/uploads/45936912d749480295414451e2e399f2/streamer_timing.jpg).
|
... | ... | @@ -145,45 +170,51 @@ example](https://www.ohwr.org/project/wr-cores/uploads/45936912d749480295414451e |
|
|
|
|
|
*Tx Streamer**
|
|
|
| \* I/F name **|** Description \*|
|
|
|
| tx\_data\_i | Input **data word** of generic width to be sent by the
|
|
|
| `tx_data_i` | Input **data word** of generic width to be sent by the
|
|
|
Tx Streamer|
|
|
|
| tx\_valid\_i | HIGH indicates that the tx\_data\_i contains a valid
|
|
|
| `tx_valid_i` | HIGH indicates that the tx\_data\_i contains a valid
|
|
|
*data word** |
|
|
|
| tx\_dreq\_o | Synchronous data request: HIGH indicates that the Tx
|
|
|
| `tx_dreq_o` | Synchronous data request: HIGH indicates that the Tx
|
|
|
Streamer can accommodate a **data word** in the following clock cycle
|
|
|
|
|
|
|
| tx\_last\_p1\_i | Last **data word** signal. Asserted for 1 clock
|
|
|
cycle and indicates the last data word in a **block** |
|
|
|
| tx\_flush\_p1\_i | Flush input. When asserted for 1 clock cycle, the
|
|
|
| `tx_last_p1_i` | Last **data word** signal. Asserted for 1 clock cycle
|
|
|
and indicates the last data word in a **block** |
|
|
|
| `tx_flush_p1_i` | Flush input. When asserted for 1 clock cycle, the
|
|
|
streamer will immediately send out all the data that is stored in its TX
|
|
|
buffer, ignoring g\_tx\_timeout. |
|
|
|
| tx\_reset\_seq\_i | Reset sequence number. When asserted, the internal
|
|
|
| `tx_reset_seq_i` | Reset sequence number. When asserted, the internal
|
|
|
sequence number generator used to detect loss of frames is reset to 0.
|
|
|
Advanced feature. |
|
|
|
| tx\_frame\_p1\_o | Asserted for one clock cycle to signify successful
|
|
|
| `tx_frame_p1_o` | Asserted for one clock cycle to signify successful
|
|
|
streamer frame transmission. |
|
|
|
|
|
|
*Rx Streamer**
|
|
|
| \* I/F name **|** Description \*|
|
|
|
| rx\_data\_o | Output **data word** of a generic width received by the
|
|
|
| `rx_dreq_i` | Synchronous data request input: when HIGH, the streamer
|
|
|
can output another data word in the subsequent clock cycle. |
|
|
|
| `rx_data_o` | Output **data word** of a generic width received by the
|
|
|
Rx Streamer |
|
|
|
| rx\_valid\_o | HIGH indicted that rx\_data\_o is outputting a valid
|
|
|
| `rx_valid_o` | HIGH indicted that rx\_data\_o is outputting a valid
|
|
|
*data word**. |
|
|
|
| rx\_dreq\_i | Synchronous data request input: when HIGH, the streamer
|
|
|
can output another data word in the subsequent clock cycle. |
|
|
|
| rx\_first\_p1\_o | HIGH indicates the 1st **data word** of the
|
|
|
| `rx_first_p1_o` | HIGH indicates the 1st **data word** of the
|
|
|
*block** on rx\_data\_o. |
|
|
|
| rx\_last\_p1\_o | HIGH indicates the last word of the data block on
|
|
|
| `rx_last_p1_o` | HIGH indicates the last word of the data block on
|
|
|
rx\_data\_o. |
|
|
|
| rx\_lost\_p1\_o | Lost output: HIGH indicates that one or more of
|
|
|
*blocks** have been lost. |
|
|
|
| rx\_latency\_o | Latency measurement output: indicates the transport
|
|
|
| `rx_frame_p1_o` | Asserted for one clock cycle to signify successful
|
|
|
streamer frame reception|
|
|
|
| `rx_lost_p1_o` | Lost output: HIGH indicates that one or more
|
|
|
*blocks** or **frames** have been lost. |
|
|
|
| `rx_lost_blocks_p1_o` | Indicates that one or more blocks within one
|
|
|
frame are missing |
|
|
|
| `rx_lost_frames_p1_o` | Indicates that one or more frames are missing,
|
|
|
the number of frames is provided |
|
|
|
| `rx_lost_frames_cnt_o` | The number of lost frames. 0xF...F means that
|
|
|
the counter overflowed |
|
|
|
| `rx_latency_o` | Latency measurement output: indicates the transport
|
|
|
latency (between the TX streamer in remote device and this streamer), in
|
|
|
clk\_ref\_i clock cycles. |
|
|
|
| rx\_latency\_valid\_o | HIGH when the latency on rx\_latency\_o is
|
|
|
`clk_ref_i` clock cycles. |
|
|
|
| `rx_latency_valid_o` | HIGH when the latency on rx\_latency\_o is
|
|
|
valid. |
|
|
|
| rx\_frame\_p1\_o | Asserted for one clock cycle to signify successful
|
|
|
streamer frame reception|
|
|
|
|
|
|
-----
|
|
|
|
... | ... | |