diff --git a/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd b/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd
index e6894f64e14e00b7fed5826306882d7aeae971fe..39e21de98a90bb33568d11fbeed94e304dc52444 100644
--- a/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd
+++ b/libraries/io/ppsh/tb/vhdl/tb_mms_ppsh.vhd
@@ -35,37 +35,39 @@ ARCHITECTURE tb OF tb_mms_ppsh IS
   CONSTANT c_clk_freq     : NATURAL := 1000;                  -- clock frequency in Hz
   CONSTANT c_clk_period   : TIME    := 1000000 us / c_clk_freq;
   CONSTANT c_pps_period   : NATURAL := c_clk_freq;            -- 1 s takes c_clk_freq clk cycles
-  
+
   SIGNAL tb_end           : STD_LOGIC := '0';
   SIGNAL rst              : STD_LOGIC := '1';
   SIGNAL clk              : STD_LOGIC := '1';
-  
+
   -- DUT
   SIGNAL pps_ext          : STD_LOGIC;
   SIGNAL pps_sys          : STD_LOGIC;
-  
+
   SIGNAL reg_mosi         : t_mem_mosi := c_mem_mosi_rst;
   SIGNAL reg_miso         : t_mem_miso;
-  
+
   -- Verify
   SIGNAL bsn              : NATURAL;
   SIGNAL pps_toggle       : STD_LOGIC;
   SIGNAL pps_stable       : STD_LOGIC;
   SIGNAL capture_cnt      : NATURAL;
-  
+  SIGNAL offset_cnt       : NATURAL;
+  SIGNAL last_offset_cnt  : NATURAL;
+
 BEGIN
 
   -- Usage:
   -- > as 10
   -- > run -all
   -- p_verify assert when unexpected capture_cnt and pps_stable are read via MM
-  
+
   -----------------------------------------------------------------------------
   -- Stimuli
   -----------------------------------------------------------------------------
   rst <= '1', '0' AFTER 7*c_clk_period;
   clk <= NOT clk OR tb_end AFTER c_clk_period/2;
-  
+
   p_pps_ext : PROCESS
     VARIABLE v_pps_period : NATURAL := c_pps_period;
   BEGIN
@@ -85,42 +87,53 @@ BEGIN
       proc_common_wait_some_cycles(clk, 1);
       pps_ext <= '0';
     END LOOP;
-    
+
     WAIT;
   END PROCESS;
-  
+
   p_mm_stimuli : PROCESS
     VARIABLE v_word : STD_LOGIC_VECTOR(c_word_w-1 DOWNTO 0);
   BEGIN
     proc_common_wait_until_low(clk, rst);                      -- Wait until reset has finished
     proc_common_wait_some_cycles(clk, 10);                     -- Wait an additional amount of cycles
-    
+
     v_word := '0' & TO_UVEC(c_pps_period, 31);   -- capture_edge = '0' = at rising edge
                                                  -- expected_cnt = c_pps_period = 1000
     proc_mem_mm_bus_wr(1, v_word, clk, reg_mosi);
-    
+
+
     -- Simulate reading PPS status every 10 PPS periods
     proc_common_wait_some_cycles(clk, 10);
     FOR I IN 0 TO 9 LOOP
       proc_common_wait_some_cycles(clk, c_pps_period*10);
-    
+
       proc_mem_mm_bus_rd(0, clk, reg_mosi);
-      proc_common_wait_some_cycles(clk, 1);   
+      proc_common_wait_some_cycles(clk, 1);
       pps_toggle  <= reg_miso.rddata(31);
       pps_stable  <= reg_miso.rddata(30);
       capture_cnt <= TO_UINT(reg_miso.rddata(ceil_log2(c_clk_freq)-1 DOWNTO 0));
     END LOOP;
-    
+
+    -- Simulate reading PPS offset counter every 0.1 PPS periods
+    proc_common_wait_some_cycles(clk, 10);
+    FOR I IN 0 TO 4 LOOP
+      proc_common_wait_some_cycles(clk, c_pps_period/10);
+      last_offset_cnt <= offset_cnt;
+      proc_mem_mm_bus_rd(2, clk, reg_mosi);
+      proc_common_wait_some_cycles(clk, 1);
+      offset_cnt <= TO_UINT(reg_miso.rddata(ceil_log2(c_clk_freq)-1 DOWNTO 0));
+    END LOOP;
+
     proc_common_wait_some_cycles(clk, 100);
     tb_end <= '1';
     WAIT;
   END PROCESS;
-  
+
   p_verify : PROCESS
   BEGIN
     proc_common_wait_until_low(clk, rst);                      -- Wait until reset has finished
     proc_common_wait_some_cycles(clk, 10);                     -- Wait an additional amount of cycles
-    
+
     proc_common_wait_some_cycles(clk, c_pps_period/2);         -- Verification offset
     -- 1
     proc_common_wait_some_cycles(clk, c_pps_period*10);
@@ -158,14 +171,20 @@ BEGIN
     proc_common_wait_some_cycles(clk, c_pps_period*10);
     ASSERT pps_stable='1'   REPORT "9) Wrong pps_stable" SEVERITY ERROR;
     ASSERT capture_cnt=1000 REPORT "9) Wrong capture_cnt" SEVERITY ERROR;
+    -- 10
+    proc_common_wait_some_cycles(clk, c_pps_period/10);
+    ASSERT offset_cnt=last_offset_cnt REPORT "10) Wrong offset_cnt" SEVERITY ERROR;
+    -- 11
+    proc_common_wait_some_cycles(clk, c_pps_period/10);
+    ASSERT offset_cnt=last_offset_cnt REPORT "11) Wrong offset_cnt" SEVERITY ERROR;
     WAIT;
   END PROCESS;
-  
-  
+
+
   -----------------------------------------------------------------------------
   -- DUT: PPSH
   -----------------------------------------------------------------------------
-  
+
   dut : ENTITY work.mms_ppsh
   GENERIC MAP (
     g_st_clk_freq    => c_clk_freq
@@ -177,11 +196,11 @@ BEGIN
     st_rst           => rst,
     st_clk           => clk,
     pps_ext          => pps_ext,
-    
+
     -- Memory-mapped clock domain
     reg_mosi         => reg_mosi,
     reg_miso         => reg_miso,
-    
+
     -- Streaming clock domain
     pps_sys          => pps_sys
   );
diff --git a/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd b/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd
index e675a9c7843fe5cbc9e0eff93624025e0d373799..c77528573229ab1c1f0a02b4e6eb4f71530351b0 100644
--- a/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd
+++ b/libraries/io/ppsh/tb/vhdl/tb_ppsh.vhd
@@ -33,7 +33,7 @@ ARCHITECTURE tb OF tb_ppsh IS
   CONSTANT c_clk_period   : TIME    := 1000000 us / c_clk_freq;
   CONSTANT c_pps_default_period   : NATURAL := c_clk_freq;            -- 1 s takes c_clk_freq clk cycles
   CONSTANT c_pps_skew     : TIME    := 7*c_clk_period/10;
-  
+
   -- The state name tells what kind of test is being done
   TYPE t_state_enum IS (
     s_idle,
@@ -49,7 +49,7 @@ ARCHITECTURE tb OF tb_ppsh IS
   SIGNAL rst              : STD_LOGIC := '1';
   SIGNAL clk              : STD_LOGIC := '1';
   SIGNAL pps              : STD_LOGIC;
-  
+
   -- DUT
   SIGNAL pps_ext          : STD_LOGIC;
   SIGNAL pps_sys          : STD_LOGIC;
@@ -57,24 +57,24 @@ ARCHITECTURE tb OF tb_ppsh IS
   SIGNAL capture_edge     : STD_LOGIC;
   SIGNAL capture_cnt      : STD_LOGIC_VECTOR(ceil_log2(c_clk_freq)-1 DOWNTO 0);
   SIGNAL offset_cnt       : STD_LOGIC_VECTOR(ceil_log2(c_clk_freq)-1 DOWNTO 0);
-  
+
   -- Verify
-  
+
 BEGIN
 
   -- Usage: 'run -all', observe unsigned capture_cnt, there should occur no
   --        REPORT errors.
-  
+
   -----------------------------------------------------------------------------
   -- Stimuli
   -----------------------------------------------------------------------------
   rst <= '1', '0' AFTER 7*c_clk_period;
   clk <= NOT clk OR tb_end AFTER c_clk_period/2;
-  
+
   -- Verify that using the falling capture edge indeed does change timing by
   -- using a c_pps_skew that is > 0.5 c_clk_period and < c_clk_period
   capture_edge <= '0', '1' AFTER 5000 ms, '0' AFTER 7000 ms;
-  
+
   -- Verify the capture_cnt
   p_pps_default_period : PROCESS
   BEGIN
@@ -132,7 +132,7 @@ BEGIN
     END LOOP;
     -- Missing PPS pulses
     tb_state <= s_missing_pps;
-    
+
     -- End
     tb_state <= s_end;
     WAIT FOR c_pps_default_period*c_clk_period;
@@ -140,14 +140,14 @@ BEGIN
     WAIT;
   END PROCESS;
 
-  -- Apply some PPS to CLK skew  
+  -- Apply some PPS to CLK skew
   pps_ext <= TRANSPORT pps AFTER c_pps_skew;
-  
-  
+
+
   -----------------------------------------------------------------------------
   -- DUT: PPSH
   -----------------------------------------------------------------------------
-  
+
   dut : ENTITY work.ppsh
   GENERIC MAP (
     g_clk_freq    => c_clk_freq
@@ -168,7 +168,7 @@ BEGIN
   -----------------------------------------------------------------------------
   -- Verify capture_cnt
   -----------------------------------------------------------------------------
-  
+
   -- Simple verify scheme that matches the stimuli from p_pps_default_period
   p_verify : PROCESS(clk)
   BEGIN
@@ -181,69 +181,85 @@ BEGIN
          UNSIGNED(capture_cnt)/=2**capture_cnt'LENGTH-1 THEN
         REPORT "PPSH : Unexpected capture count value." SEVERITY ERROR;
       END IF;
-      
+
       -- Verify influence of PPS capture edge selection
       IF (NOW > 6000 ms) AND (NOW <= 6000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq+1 THEN
           REPORT "PPSH : Unexpected capture count value at 6 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       IF (NOW > 7000 ms) AND (NOW <= 7000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq THEN
           REPORT "PPSH : Unexpected capture count value at 7 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       IF (NOW > 8000 ms) AND (NOW <= 8000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq-1 THEN
           REPORT "PPSH : Unexpected capture count value at 8 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       -- Verify external PPS period fluctuations at specific stimuli moments
       IF (NOW > 10000 ms) AND (NOW <= 10000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq THEN
           REPORT "PPSH : Unexpected capture count value at 10 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       IF (NOW > 22000 ms) AND (NOW <= 22000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq-1 THEN
           REPORT "PPSH : Unexpected capture count value at 22 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       IF (NOW > 25000 ms) AND (NOW <= 25000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq THEN
           REPORT "PPSH : Unexpected capture count value at 25 s." SEVERITY ERROR;
         END IF;
       END IF;
-    
+
       IF (NOW > 28000 ms) AND (NOW <= 28000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq+1 THEN
           REPORT "PPSH : Unexpected capture count value at 28 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       IF (NOW > 30000 ms) AND (NOW <= 30000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=c_clk_freq THEN
           REPORT "PPSH : Unexpected capture count value at 30 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       IF (NOW > 35000 ms) AND (NOW <= 35000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=2**capture_cnt'LENGTH-1 THEN
           REPORT "PPSH : Unexpected capture count value at 35 s." SEVERITY ERROR;
         END IF;
       END IF;
-      
+
       IF (NOW > 49000 ms) AND (NOW <= 49000 ms + c_clk_period) THEN
         IF UNSIGNED(capture_cnt)/=2**capture_cnt'LENGTH-1 THEN
           REPORT "PPSH : Unexpected capture count value at 49 s." SEVERITY ERROR;
         END IF;
       END IF;
+
+      -- check if offset_cnt is counting
+      IF (NOW > 7500 ms) AND (NOW <= 7500 ms + c_clk_period) THEN
+        --REPORT "PPSH : offset_cnt = " & integer'image(To_integer(unsigned(offset_cnt))) SEVERITY ERROR;
+        IF UNSIGNED(offset_cnt)/=475 THEN
+          REPORT "PPSH : Unexpected offset count value at 5.5 s." SEVERITY ERROR;
+        END IF;
+      END IF;
+
+      IF (NOW > 7700 ms) AND (NOW <= 7700 ms + c_clk_period) THEN
+        --REPORT "PPSH : offset_cnt = " & integer'image(To_integer(unsigned(offset_cnt))) SEVERITY ERROR;
+        IF UNSIGNED(offset_cnt)/=675 THEN
+          REPORT "PPSH : Unexpected offset count value at 5.5 s." SEVERITY ERROR;
+        END IF;
+      END IF;
+
     END IF;
   END PROCESS;
-  
+
 END tb;