$THREADS Block

A thread (as introduced by the VDIF format) is a group of channels that are bundled together in the same data frames and hence must have a common origin (back-end) and destination (recorder). Some VDIF implementations will possibly populate only a single channel per thread (in which case there will be as many thread parameters as channel parameters), or will package polarization pairs together (half as many thread parameters as channel parameters), while others may bundle many channels per thread. This block description should handle all of these cases.

Parameter Field Description Type Allowed values Units CommentsSorted ascending
  (3) Data rate int   Mbps Aggregate data rate (not including framing overhead) of all threads
  2 Backend number int >= 1   Backend/formatter unit number
  (8) Auxiliary data ?     Could be used to populate the 'user data area' in the VDIF headers
  4 Data rate int >= 1 Mbps Data rate of this thread (not including framing overhead)
  (9) Bytes of data per packet int     For packet-based formats (e.g., VDIF), the number of bytes per packet of data. This number should not include the frame header, but should include unused space due to incomplete packing as might happen for 3 bit sampling in VDIF
  3 Channel number int >= 0   For VDIF, channel number within thread; otherwise, absolute channel number, as defined by recording format
  2 Thread number int >= 0   For VDIF, thread number; otherwise ignored
channel 1 'Chan_ID' linkword char     Link to 'Chan_ID' in selected $FREQ def
format 1 Name char     Name of format, e.g., VDIF
  6 Bits per sample int >= 1   Quantization bits
  3 Recorder number int >= 1   Recorder unit number (see note 10 below)
  (7) Format designator char     See note 8 below
  (2) Extended data format char     Sub-format qualifier (possibly used to identify situations such as legacy headers or complex sampling). In VDIF parlance, this is "Extended Data Format"
thread 1 Thread number int >= 0   To be referred to by a channel parameter
  5 Number of channels int >= 1   Total number of channels to allow in this thread's data stream

Notes:
  1. The $THREADS def blocks are to be referenced from within a $MODE block in lieu of $TRACKS blocks.
  2. Backend number and Recorder number can be omitted if the station is to determine how to allocate hardware
  3. VDIF requires the number of channels within a thread to be a power of 2. Future formats may not have this restriction.
  4. This block makes no attempt to describe the internal packing of bits within the format. This block thus only supports formats that uniquely determine the bit packing based on the available information, such as bits per sample, number of channels, ... Hence there is no ability to control data modulation or fan-in or fan-out.
  5. Multiple channel parameters can take data from the same 'Chan_ID'. A possible use for this capability is to define two threads, one with 1 bit per sample and one with 2 bits per sample and to, on a frame-by-frame basis, choose which frames to emit based on the capacity of an eVLBI data link.
  6. A thread that is referenced within in a channel parameter must have a corresponding thread parameter within the same $THREADS def block.
  7. This block could be used to represent Mark5B data in the restricted case that for 2-bit data the samples are always organized as consecutive sign/mag pairs (which I understand is the only way in which Mark5B has ever been used) and that no data modulation is applied. Note that both these are already restrictions imposed if Mark5A+ compatibility is to be used.
  8. See VDIF specification: http://www.vlbi.org/vsi/docs/VDIF%20specification%20Release%201.0%20ratified.pdf
  9. The auxiliary data parameter will require some thought.
  10. Unlike in the past, modern equipment may allow multiple backends feeding multiple recorders, thus breaking down the rack number terminology where it was assumed that one rack had one DAS/recorder and there was to be no inter-rack signal passing. This is the reason for referencing recorders and backends by number.

Example $THREADS def block

  
def VDIF-512-4-2+512-2-4; * Example with 2 threads covering 6 channels with mixed quantization
  format = VDIF : : 1024 ;
  thread = 0 : 1 : 1 : 512 : 4 : 2 : : : 8000 ;
  channel = &CH01 : 0 : 0 ;
  channel = &CH02 : 0 : 1 ;
  channel = &CH05 : 0 : 2 ;
  channel = &CH06 : 0 : 3 ;
  thread = 1 : 1 : 1 : 512 : 2 : 4 : : : 8000 ;
  channel = &CH03 : 1 : 0 ;
  channel = &CH04 : 1 : 1 ;
enddef;

-- WalterBrisken - 2009-11-17; updated 2011-01-02
Topic revision: r5 - 2011-01-02, WalterBrisken
This site is powered by FoswikiCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding NRAO Public Wiki? Send feedback