From c1a195102eb17e706881bfced326a07923e24009 Mon Sep 17 00:00:00 2001
From: Eric Kooistra <kooistra@astron.nl>
Date: Mon, 22 Aug 2022 10:30:42 +0200
Subject: [PATCH] Clarified c_min_nof_pps_interval.

---
 .../base/dp/tb/vhdl/tb_dp_bsn_source_v2.vhd   | 26 ++++++++++++++-----
 1 file changed, 19 insertions(+), 7 deletions(-)

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 c3ccfaac5d..c6ace124e0 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;
-- 
GitLab