diff --git a/libraries/base/dp/src/vhdl/dp_rsn_source.vhd b/libraries/base/dp/src/vhdl/dp_rsn_source.vhd index 61ec23f9dff8e62a108b7af363387a3f0a105d7f..db0835da04948d894bc2a559f62dc57f77d033d4 100644 --- a/libraries/base/dp/src/vhdl/dp_rsn_source.vhd +++ b/libraries/base/dp/src/vhdl/dp_rsn_source.vhd @@ -25,26 +25,38 @@ -- use the Raw sample Sequence Number (RSN) as rs_sosi.bsn according to the -- PPS and RSN grid defined in [1]. -- Description: --- The rs_sosi timing is derived from the input bs_sosi, but the rs_sosi +-- The BSN in the input bs_sosi counts blocks of g_bs_block_size samples +-- since t_epoch = 1 Jan 1970 [1]. The RSN can start at any BSN, using +-- RSN = BSN * g_bs_block_size as initial value. The block size +-- g_rs_block_size of the RSN is free to choose and will typically differ +-- from the BSN block size g_bs_block_size. Therefore counting back to +-- t_epoch the very first RSN block in the output rs_sosi will typically +-- not start at t_epoch. The RSN will start at 0 at t_epoch, because it +-- counts samples. Therefore choose to let the bsn field in the rs_sosi +-- record carry the RSN of the first sample in the block, instead of +-- counting blocks. The RSN thus increments by g_rs_block_size (instead of +-- by 1) for every block. +-- Features: +-- . The rs_sosi timing is derived from the input bs_sosi, but the rs_sosi -- uses RSN as rs_sosi.bsn and has its own block and sync intervals. --- Assumption is that every clk cycle carries valid data when the +-- . Assumption is that every clk cycle carries valid data when the -- bs_sosi.valid is '1', so no gaps in bs_sosi.valid. --- The bs_sosi can stop and restart. It (re)starts with bs_sosi.sync and +-- . The bs_sosi can stop and restart. It (re)starts with bs_sosi.sync and -- bs_sosi.sop when bs_sosi.valid becomes '1' and it stops when -- bs_sosi.valid becomes '0' immediately after a bs_sosi.eop. --- The rs_sosi block size is g_rs_block_size. --- The rs_sosi sync interval has g_nof_clk_per_sync. If g_nof_clk_per_sync +-- . The rs_sosi block size is g_rs_block_size. +-- . The rs_sosi sync interval has g_nof_clk_per_sync. If g_nof_clk_per_sync -- is not a multiple of g_rs_block_size, then the rs_sosi.sync will occur at -- the next start of block. --- The initial RSN in rs_sosi.bsn is bs_sosi.bsn * g_bs_block_size, where +-- . The initial RSN in rs_sosi.bsn is bs_sosi.bsn * g_bs_block_size, where -- g_bs_block_size is the input block size of bs_sosi. --- The rs_sosi starts when the bs_sosi starts, so when bs_sosi.sync = '1' +-- . The rs_sosi starts when the bs_sosi starts, so when bs_sosi.sync = '1' -- and bs_sosi.valid becomes '1'. --- The rs_sosi ends after the rs_sosi.eop, when the bs_sosi ends. There +-- . The rs_sosi ends after the rs_sosi.eop, when the bs_sosi ends. There -- may be undefined filler data in the last rs_sosi block to finish it -- after the rs_sosi.eop. -- Remark: --- * The bs_sosi typically comes from dp_bsn_source_v2.vhd +-- . The bs_sosi typically comes from dp_bsn_source_v2.vhd -- -- References: -- [1] https://support.astron.nl/confluence/display/L2M/L2+STAT+Decision%3A+Timing+in+Station