Radio over Ethernet Frame Structure
Out of Date - needs updating to reflect latest changes.
We propose to utilise the common RoE frame structure.
It is comprised of:
- Destination address [0xffffff - indicating broadcast]
- Source address
- RoE EtherType [0xFC3D]
Further, the common frame format contains an RoE header:
- subType, we propose to use the IEEE organizationally unique identifier (OUI). This field identifies the RoE payload structure as being structure aware DDS.
- flowID identifies the RF signal stream. Mappers and deMappers use an out of band method to enumerate and subscribe to each flowID. A single flowID can contain multiple RF signals.
- length field determines the RoE payload length
- orderInfo utilises a 32-bit sequence number that may be used by deMappers to identify out of sequence frame reception (lost or duplicate frames).
Our proposed format for structure aware DDS is a sequence of .dds words that contain the following fields:
- .dds.type - a 4-bit field.
- .dds.index - a 4-bit field.
- .dds.data - size is dependent on the .dds.type.
The .dds.type field identifies the contents and structure of the .dds.data field and its length. The length (.dds.length) includes 4 bits for .dds.type and 4 bits for .dds.index fields plus the size of the .dds.data field. The .dds.index can be used to address up to sixteen DDS subsystems contained within a single deMapper.
These DDS words can be categorised as follows:
- DDS Time words, contain a presentation time that specifies when subsequent .dds words, in the same RoE frame, must be applied by the deMapper.
- DDS Configuration words, necessary for initialisation and configuration of deMappers. Generally a deMapper must receive DDS Configuration words before acting on any DDS Control words.
- DDS Control words, adjust the DDS output frequency and Events (enable, disable and triggering).
DDS Time words that specify a presentation time have two varieties:
- Temps Atomique International (TAI) timestamp.
- RFtime timestamp, an epoch that is determined by the number of RF oscillations since an arbitrary TAI timestamp, it is only valid within a specific flowID.
It is assumed that all Mappers and deMappers have a method to determine, initialise and maintain TAI time. For example, by using PTP or HA-PTP (White Rabbit).
The presentation time transmitted with DDS Time words must be calculated by a Mapper. This presentation time must account for the worst case network latency that may be encountered, due to factors such as congestion and signal propagation delay. If an RoE frame is received with a presentation time that has already expired, subsequent DDS words linked to that presentation time must be discarded. If an RoE frame contains multiple presentation time fields, they must be in temporal order.
DDS Configuration words may be sent periodically, such that deMappers can join the Ethernet work and subscribe to a flowID to recreate RF signals dynamically. Therefore we do not anticipate structure aware DDS Mappers and deMappers transmitting or interpreting RoE control packets (With flowID = 0). The rate at which DDS Configuration words are broadcast is application specific.
DDS Control words are preceded by a DDS Time word. The presence of the presentation time allows a deMapper to determine when to apply the changes to its local DDS functions. Multiple DDS Control words may be transmitted in advance of the presentation time (providing there is sufficient buffering provided by the deMapper), to create a burst of changes that could not be supported in realtime.
Finally, there are two .dds.types that are reserved:
- .dds.type = 0x0, is reserved for padding to the minimum sized Ethernet and RoE payload frame.
- .dds.type = 0xF, can be used to extend the RF type field by an additional 4 bits. This makes the format extensible.
Structure aware DDS Protocol - DDS word properties
Time | .dds.type ID | Requires presentation time | .dds.length |
---|---|---|---|
TAI timestamp | 0x1 | N/A | 4 + 4 + 56 bits |
RFtime timestamp | 0x2 | N/A | 4 + 4 + 64 bits |
Configuration | .dds.type ID | Requires presentation time | .dds.length |
---|---|---|---|
Phase | 0x3 | Yes | 4 + 4 + 64 bits |
DDS Clock Frequency | 0x4 | No | 4 + 4 + 112 bits |
Control | .dds.type ID | Requires presentation time | .dds.length |
---|---|---|---|
Frequency Tuning Word (FTW) | 0x5 | Yes | 4 + 4 + 64 bits |
Maximum voltage | 0x6 | No | 4 + 4 + 16 bits |
Event without data | 0x7 | Yes | 4 + 4 + 40 bits |
Event with data | 0x8 | Yes | 4 + 4 + 112 bits |
Control/Status Flags | 0x9 | Yes | 4 + 4 + 32 bits |
Reserved | .dds.type ID | Requires presentation time | .dds.length |
---|---|---|---|
Padding | 0x0 | N/A | 4 bits |
Unused | 0xA-0xE | TBD | N/A |
Extended | 0xF | TBD | 4 bits |
TAI Timestamps
The TAI timestamp .dds.data.TAI contains three fields:
- 8 bits, least significant bits of seconds from epoch (.dds.data.TAI.sec).
- 32 bits, number of nanoseconds of TAI timestamp (.dds.data.TAI.nsec).
- 16 bits, fraction of a nanosecond, the unit is value x 2^(-16) ns (.dds.data.TAI.nsecFRAC).
RFtime Timestamps
The RFtime timestamp (.dds.data.RFtime) is a 64-bit unsigned number, it represents the number of RF oscillations since the beginning of the RFtime epoch.
Phase
The .dds.data.phase is a 64-bit unsigned number that represents the phase (normalised to 2π) of the RF signal at some future TAI or RFtime timestamp. At the presentation time, the value of NCO is set equal to this value. To convert between phase and the NCO value use the following equation.
Maximum voltage
The .dds.data.maxVoltage maximum voltage is a 16-bit unsigned number. It is the reference voltage level in mV. The default is 1000 mV (0x3e8 mV).
DDS Clock Frequency
This .dds word is used to describe the DDS clock frequency of the Mapper node. It is the frequency at which Frequency Tuning Word (FTW) values (.dds.data.FTW) are accumulated on the Mapper node. It is expressed through multiple fields:
- 48-bit unsigned number, integer DDS clock frequency in Hz (.dds.data.DDSclockFreq.integer). The default is 125 MHz.
- 32-bit unsigned number, fractional DDS clock frequency, numerator value (.dds.data.DDSclockFreq.numerator). The default is 0.
- 32-bit unsigned number, fractional DDS clock frequency, denominator value(.dds.data.DDSclockFreq.denominator). The default is 0.
A deMapper must compare its DDS clock frequency with that of the Mapper node. If they are different, the deMapper must subsequently scale any received FTW (.dds.data.FTW) appropriately. This may introduce rounding errors. Therefore it is highly desirable that users operate Mappers and deMappers at the same DDS clock frequency.
Frequency Tuning Word (FTW)
The FTW (.dds.data.FTW) is a 64-bit unsigned number that represents a change in phase (normalised to 2π) per DDS clock cycle. It must be preceded by an TAI or RFtime timestamp earlier in the RoE frame.
Events without Data
Events without data contain two fields:
- 8 bits represent the Event status (.dds.data.event.status).
- [0] - Event disabled (.dds.data.event.status.disabled).
- [1] - Event enabled (.dds.data.event.status.enabled).
- [2] - Event trigger (.dds.data.event.status.trigger).
- [7-3] - Undefined.
- 32-bit unsigned number that represents the Event identifer number (.dds.data.event.id).
Events identifiers are allocated to Mappers and deMappers using an out of band method. Event actions are not defined here, but is anticipated that when Events are triggered they will create output pulses or increment counters.
Events with Data
This DDS Control word is the same an Event without data but with an additional 64-bit data field to be utilised by the deMapper. The association and definition of the data field with the Event ID is application specific.
- 8 bits represent the Event status (.dds.data.event.status).
- [0] - Event disabled (.dds.data.event.status.disabled).
- [1] - Event enabled (.dds.data.event.status.enabled).
- [2] - Event force triggered (.dds.data.event.status.trigger).
- [7-3] - Undefined.
- 32-bit unsigned number that represents the Event identifer number (.dds.data.event.id).
- 64-bit value. It is application specific how this (.dds.data.event.data) is formatted and associated with the Event identifier.
Control and Status Flags
Control and status flags is a 32-bit value. It is hot-one encoded.
- [0] - deMappers NCO in reset (1), (0) normal operation (.dds.data.ctrl.NCOreset).
- [1] - Mapper has no input RF signal (1), (0) normal operation (.dds.data.control.RFpresent).
- [2] - Mapper unable to track input RF signal (1), (0) normal operation (.dds.data.control.RFtrack).
- [3] - deMappers RFtime in reset (1), (0) RFtime epoch has started (.dds.data.control.RFtime).
- [15-4] - Reserved.
- [31-16] - Application specific.
Padding
This .dds.type.padding (value = 0x0) is used repeatedly to pad an Ethernet frame to the minimum size or alternately pad the RoE payload to its minimum size (64 bytes).
Extended .dds.type
This .dds.type.extended (value = 0xF) is intended to create extensible .dds.types: 0xFn, 0xFFn, 0xFFFn etc, facilitating features not yet envisaged.