Skip to content
Snippets Groups Projects
Commit 41236949 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Wrote SDP design document on timing based on station2_sdp_firmware_design.txt....

Wrote SDP design document on timing based on station2_sdp_firmware_design.txt. Text snippets that were not yet used are kept in station2_tmp.txt. Hence station2_sdp_firmware_design.txt is now obsolete.
parent fb37c7ba
No related branches found
No related tags found
1 merge request!6Master
......@@ -95,13 +95,13 @@ and any M&C upon the data, because:
The actual resolution T_sub of the Station BSN in LOFAR2 depends on the ADC sample frequency and on the
subband filterbank:
N_blk T_adc T_sub T_sub_i
1024 * 5 ns = 5120 ns = 25600 [0.2 ns] for critical sampled filterbank at 200 MHz
1024 * 6.4 ns = 6553.6 ns = 32768 [0.2 ns] for critical sampled filterbank at 160 MHz
864 * 5 ns = 4320 ns = 21600 [0.2 ns] for oversampled filterbank R_os = 32/27 = 1.185 at 200 MHz
864 * 6.4 ns = 5529.6 ns = 27648 [0.2 ns] for oversampled filterbank R_os = 32/27 = 1.185 at 160 MHz
800 * 5 ns = 4000 ns = 20000 [0.2 ns] for oversampled filterbank R_os = 32/25 = 1.28 at 200 MHz
800 * 6.4 ns = 5120 ns = 25600 [0.2 ns] for oversampled filterbank R_os = 32/25 = 1.28 at 160 MHz
N_blk T_adc T_sub
1024 * 5 ns = 5120 ns for critical sampled filterbank at 200 MHz
1024 * 6.25 ns = 6400 ns for critical sampled filterbank at 160 MHz
864 * 5 ns = 4320 ns for oversampled filterbank R_os = 32/27 = 1.185 at 200 MHz
864 * 6.25 ns = 5400 ns for oversampled filterbank R_os = 32/27 = 1.185 at 160 MHz
800 * 5 ns = 4000 ns for oversampled filterbank R_os = 32/25 = 1.28 at 200 MHz
800 * 6.25 ns = 5000 ns for oversampled filterbank R_os = 32/25 = 1.28 at 160 MHz
In LOFAR2 the timestamp should be independent of:
......@@ -110,35 +110,39 @@ In LOFAR2 the timestamp should be independent of:
If T_sub was fixed then T_sub could be used as timestamp resolution (like in APERTIF). However T_sub depends
on the type of subband filterbank with a resolution of T_adc. If T_adc was fixed then T_adc could be used
as timestamp resolution. However T_adc depends on the sample clock rate. Therefore the timestamp resolution
needs to be as fine as the greatest common time resolution of T_adc = 5 ns and T_adc = 6.4 ns, which is 0.2 ns.
A 64 bit timestamp with 0.2 ns resolution can count 2**64 / (365.25 * 24 * 3600 / 0.2e-9) = 116 years. Hence
for t_epoch = 1970 this is until 2086, which is sufficient for the lifetime of LOFAR2.0. Internally in SDP
as timestamp resolution. However T_adc depends on the sample clock rate. At most the timestamp resolution
needs to be as fine as the greatest common time resolution of T_adc = 5 ns and T_adc = 6.25 ns, which is
0.25 ns. However typical R_os = p/q have p is a power of 2 and p <= 64, because N_FFT = 1024 = 2**10. Hence
N_FFT / p >= 16, so typical subband periods can always be expressed as a multiple of 16* 6.25 = 100 ns or
16 * 5 = 80 ns. Therefore the minimum required time stamp resolution is gcd(100, 80) = 20 ns. For human
readability choose 1 ns as timestamp resolution
A 64 bit unsigned timestamp with 1 ns resolution can count 2**64 / (365.25 * 24 * 3600 / 1e-9) = 584 years.
Hence for t_epoch = 1970 this is more than enough for the lifetime of LOFAR2.0. Internally in SDP
firmware use the BSN to count T_sub. Externally at the SDP interface use timestamp values with a resolution
of 0.2 ns such that they are:
of 1 ns such that they are:
* integer values, and
* independent of the sample period.
The actual timestamp in fractional seconds of 0.2 ns follows from:
The actual timestamp in units of 1 ns follows from:
timestamp = Station BSN * T_sub_i * 0.2 [ns].
timestamp = Station BSN * T_sub [ns].
The BSN and T_sub_i can be specified as:
The BSN and T_sub can be specified as:
- single 64 bit integer timestamp value of BSN * T_sub_i [0.2 ns]
- two separate fields with an incrementing BSN and resolution given by T_sub_i [0.2 ns]
- single 64 bit unsigned integer timestamp value of BSN * T_sub [ns]
- two separate fields with an incrementing BSN and resolution given by T_sub [ns]
To cover 116 years for a BSN with smallest T_sub = 4000 ns for R_os = 32/25 = 1.28 requires:
To cover 100 years for a BSN with smallest T_sub = 4000 ns for R_os = 32/25 = 1.28 requires:
log2( 116 * (365.25 * 24 * 3600 / 4000e-9) ) = 49.7, so 50 bits
log2( 100 * (365.25 * 24 * 3600 / 4000e-9) ) = 49.7, so 50 bits
Therefore allocate 64b in a packet header to send the BSN information. The BSN and timestamp are direcly
related via T_sub_i, but the advantage of providing the BSN separately is that it increments by 1 for
related via T_sub, but the advantage of providing the BSN separately is that it increments by 1 for
each block period T_sub, so it can be used as block index.
The range of T_sub is 4000 ns - 5120 ns, so the range of T_sub_i is 20000 - 25600. These T_sub_i values
can be covered in a 16 bit number. Alternatively T_sub_i can be derived from the four possible
The range of T_sub is 4000 ns - 5120 ns. These T_sub values
can be covered in a 16 bit number. Alternatively T_sub can be derived from the four possible
combinations of f_adc = 200M or 160M and R_os = 1 or 32/25, that can be represented with 2 bits.
......@@ -148,7 +152,8 @@ combinations of f_adc = 200M or 160M and R_os = 1 or 32/25, that can be represen
*******************************************************************************
Together the initial BSN, counting blocks and the order of the data within a block uniquely define the timing
of the data in a Station. However counting blocks is not sufficient to maintain the data timing, because:
of the data in a Station. However counting blocks is not sufficient to maintain the data timing, because
there can be gaps due to:
- The data flow at the SDP input may be stopped and restarted,
- at the external interfaces of the FPGAs in SDP it is possible that blocks of data get lost.
......@@ -172,7 +177,7 @@ FPGA in the SDP firmware has a BSN source, that all run synchronously within a S
Stations, because they have been started by the external PPS from the Timing Distributor (TD). The sync is a
periodic signal with period larger than the maximum latency of the data within the SDP, to ensure
that a sync at any FPGA refers to the same time instant. If somewhere in an FPGA the sync comes along, then
the BSN can be recreated by directly using the BSN that was held at the sync by the BSN source and start
the BSN can be recreated by directly using the BSN that was held at the sync by the local BSN source and start
continue counting blocks from there.
......
Remaining texts that have not been used yet in official SDP detailed design documents
*******************************************************************************
* From station2_sdp_timing
*******************************************************************************
- It is not necessary to represent fine group delays of digital filters or analogue electronics and
cables in the BSN, because these delays are all accounted for after calibration.
. Course group delays and cable delay differences can be compensated for in steps to T_adc via the signal
input buffer of every ADC input in SDP.
. Fine group delay differences within a Station can be calibrated via the subband calibration weights.
- Group delay differences between Stations need to be calibrated at CEP, and can be compensated at CEP or
at Station via the input buffers and the subband calibration weights.
Key ideas:
- Use Ethernet CRC and DP CRC to ensure detection of packet errors and to ensure error free blocks
within FPGA firmware
RCU2 Subband Ring
PFB
data data
data ------> BSN --------> Move, -------> Packet
PPSH ------> source sync DSP sync encoding
BSN .........> BSN ring
Ring BF, XC
data data data
Packet --------> Validate --> Validate --> BSN --------> Move, --------> Packet
decoding sync CRC BSN aligner sync DSP sync encoding
ring BSN .......................................................> BSN output
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment