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 8fe8c59f7f2ebd83e860cd25ba13d0923af099b5..48d625c9a5453e34870b0b8cea795cb1da5dcaba 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 @@ -114,13 +114,13 @@ BEGIN BEGIN WAIT UNTIL rising_edge(clk); expected_sync <= '0'; - proc_common_wait_until_lo_hi(clk, pps_sop); + proc_common_wait_until_high(clk, pps_sop); IF bsn_sop = '1' THEN expected_sync <= '1'; expected_bsn <= BSN+1; expected_offset_bsn <= 0; ELSE - proc_common_wait_until_lo_hi(clk, bsn_sop); + proc_common_wait_until_high(clk, bsn_sop); expected_sync <= '1'; expected_bsn <= BSN+1; expected_offset_bsn <= (BSN+1) * g_block_size - SSN * g_pps_interval; @@ -146,7 +146,7 @@ BEGIN proc_common_wait_some_cycles(clk, 500); -- Start asynchronously by making dp_on high - proc_common_wait_until_hi_lo(clk, expected_sync); + proc_common_wait_until_high(clk, expected_sync_dly); tb_state <= s_pps_start; dp_on_pps <= '0'; dp_on <= '1'; @@ -157,12 +157,19 @@ BEGIN tb_state <= s_disable; dp_on <= '0'; dp_on_pps <= '0'; - proc_common_wait_some_cycles(clk, 3*g_pps_interval); + + -- wait until one pps_interval before next begin of SSN generator (pps_sop = bsn_sop) + proc_common_wait_until_high(clk, pps_sop); + v_bsn_time_offset := ((SSN + 2) * g_pps_interval) MOD g_block_size; + WHILE v_bsn_time_offset > 0 LOOP + proc_common_wait_some_cycles(clk, g_pps_interval); + v_bsn_time_offset := ((SSN + 2) * g_pps_interval) MOD g_block_size; + END LOOP; -- Start synchronously by making dp_on high at pps FOR i IN 0 TO 2 LOOP -- Now start on PPS - proc_common_wait_until_hi_lo(clk, expected_sync); + proc_common_wait_until_high(clk, expected_sync); v_bsn_time_offset := ((SSN + 1) * g_pps_interval) MOD g_block_size; v_bsn_init := ((SSN + 1) * g_pps_interval) / g_block_size; IF v_bsn_time_offset = 0 THEN @@ -180,7 +187,15 @@ BEGIN tb_state <= s_disable; dp_on <= '0'; dp_on_pps <= '0'; - proc_common_wait_some_cycles(clk, 3*g_pps_interval); + + -- wait until one pps_interval before next begin of SSN generator (pps_sop = bsn_sop) + proc_common_wait_until_high(clk, pps_sop); + v_bsn_time_offset := ((SSN + 2) * g_pps_interval) MOD g_block_size; + WHILE v_bsn_time_offset > 0 LOOP + proc_common_wait_some_cycles(clk, g_pps_interval); + v_bsn_time_offset := ((SSN + 2) * g_pps_interval) MOD g_block_size; + END LOOP; + END LOOP; tb_end <= '1'; @@ -191,7 +206,7 @@ BEGIN ----------------------------------------------------------------------------- -- Verification ----------------------------------------------------------------------------- - proc_dp_verify_sop_and_eop(clk, bs_sosi.valid, bs_sosi.sop, bs_sosi.eop, hold_bs_sop); -- Verify that sop and eop come in pairs + proc_dp_verify_sop_and_eop(clk, bs_sosi.valid, bs_sosi.sop, bs_sosi.eop, hold_bs_sop); -- Verify that sop and eop come in pairs proc_dp_verify_sync(clk, verify_sync, bs_sosi.sync, bs_sosi.sop, expected_sync_dly); -- Verify sync at sop and at expected_sync ----------------------------------------------------------------------------- diff --git a/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_source_v2.vhd b/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_source_v2.vhd index 2e4e682cd0c78aa7ef706b23e65aae1be75393ac..4c1700d33404cb7a9399ba52a7ed41642e12456a 100644 --- a/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_source_v2.vhd +++ b/libraries/base/dp/tb/vhdl/tb_tb_dp_bsn_source_v2.vhd @@ -37,19 +37,19 @@ ARCHITECTURE tb OF tb_tb_dp_bsn_source_v2 IS BEGIN -- from tb_dp_bsn_source_v2.vhd -- - -- g_sync_offset : NATURAL := 0 - -- g_clk_per_sync : NATURAL := 240 + -- g_pps_interval : NATURAL := 240 + -- g_block_size : NATURAL := 32 - -- (sync_offset, clk_per_sync) + -- (g_pps_interval, g_block_size) -- test different clk_per_sync - u0_230 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (0, 230); - u0_240 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (0, 240); - u0_248 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (0, 248); + u0_230 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (230, 32); + u0_240 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (240, 32); + u0_248 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (248, 32); - -- test different sync_offsets - u1_1 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (1, 248); - u1_3 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (3, 248); - u1_4 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (4, 248); + -- test different block_size's + u1_1 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (240, 30); + u1_3 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (240, 32); + u1_4 : ENTITY work.tb_dp_bsn_source_v2 GENERIC MAP (240, 27); END tb; \ No newline at end of file