diff --git a/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd b/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd index c3ccfaac5de706539f24db523b09c9c2d4d5042a..c6ace124e0d2abd4500634a85ca50b75da766e2a 100644 --- a/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd +++ b/libraries/base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd @@ -59,15 +59,27 @@ END tb_dp_bsn_source_v2; ARCHITECTURE tb OF tb_dp_bsn_source_v2 IS - CONSTANT c_gcd : NATURAL := gcd(g_pps_interval, g_block_size); - CONSTANT c_min_nof_interval : NATURAL := g_block_size / c_gcd; - - -- choose c_nof_pps and c_nof_repeat > c_min_nof_interval, because the - -- fractional sync pattern will repeat every c_min_nof_interval number + -- The nof block per sync interval will be the same after every + -- c_min_nof_pps_interval. The c_gcd is the greatest common divider of + -- g_pps_interval and g_block_size, so g_block_size / c_gcd yields an + -- integer. When g_pps_interval and g_block_size are relative prime, + -- then c_gcd = 1, and then it takes g_block_size nof g_pps_interval + -- for the pattern of c_nof_block_per_sync_lo and c_nof_block_per_sync_hi + -- to repeat. If c_gcd = g_block_size, then c_nof_block_per_sync_lo = + -- c_nof_block_per_sync_hi, so then the nof block per sync interval is + -- the same in every pps interval. + CONSTANT c_gcd : NATURAL := gcd(g_pps_interval, g_block_size); + CONSTANT c_min_nof_pps_interval : NATURAL := g_block_size / c_gcd; + + CONSTANT c_nof_block_per_sync_lo : NATURAL := g_pps_interval / g_block_size; + CONSTANT c_nof_block_per_sync_hi : NATURAL := ceil_div(g_pps_interval, g_block_size); + + -- choose c_nof_pps and c_nof_repeat > c_min_nof_pps_interval, because the + -- fractional sync pattern will repeat every c_min_nof_pps_interval number -- of g_pps_intervals. CONSTANT c_factor : NATURAL := 3; - CONSTANT c_nof_pps : NATURAL := c_min_nof_interval * c_factor; - CONSTANT c_nof_repeat : NATURAL := c_min_nof_interval * c_factor; + CONSTANT c_nof_pps : NATURAL := c_min_nof_pps_interval * c_factor; + CONSTANT c_nof_repeat : NATURAL := c_min_nof_pps_interval * c_factor; CONSTANT c_clk_period : TIME := 10 ns; CONSTANT c_bsn_w : NATURAL := 31;