Skip to content
Snippets Groups Projects
Commit d81b2cd1 authored by Eric Kooistra's avatar Eric Kooistra
Browse files

Register ref_sync to ease timing closure for ref_sync fanout to (many) dp_bsn_monitor_v2 instances.

parent 2a870e62
No related branches found
No related tags found
No related merge requests found
Pipeline #37092 passed
...@@ -104,6 +104,7 @@ ARCHITECTURE rtl OF dp_bsn_monitor_v2 IS ...@@ -104,6 +104,7 @@ ARCHITECTURE rtl OF dp_bsn_monitor_v2 IS
SIGNAL nxt_valid : STD_LOGIC; SIGNAL nxt_valid : STD_LOGIC;
SIGNAL sop : STD_LOGIC; SIGNAL sop : STD_LOGIC;
SIGNAL nxt_sop : STD_LOGIC; SIGNAL nxt_sop : STD_LOGIC;
SIGNAL sync_reg : STD_LOGIC;
SIGNAL sync : STD_LOGIC; SIGNAL sync : STD_LOGIC;
SIGNAL nxt_sync : STD_LOGIC; SIGNAL nxt_sync : STD_LOGIC;
SIGNAL bsn : STD_LOGIC_VECTOR(c_bsn_w-1 DOWNTO 0); SIGNAL bsn : STD_LOGIC_VECTOR(c_bsn_w-1 DOWNTO 0);
...@@ -162,20 +163,19 @@ BEGIN ...@@ -162,20 +163,19 @@ BEGIN
nxt_mon_nof_sop <= nof_sop WHEN sync='1' ELSE i_mon_nof_sop; nxt_mon_nof_sop <= nof_sop WHEN sync='1' ELSE i_mon_nof_sop;
nxt_mon_nof_err <= nof_err WHEN sync='1' ELSE i_mon_nof_err; nxt_mon_nof_err <= nof_err WHEN sync='1' ELSE i_mon_nof_err;
nxt_mon_nof_valid <= nof_valid WHEN sync='1' ELSE i_mon_nof_valid; nxt_mon_nof_valid <= nof_valid WHEN sync='1' ELSE i_mon_nof_valid;
nxt_mon_latency <= latency WHEN sync='1' ELSE i_mon_latency; nxt_mon_latency <= latency WHEN sync_reg='1' ELSE i_mon_latency; -- use sync_reg due to ref_sync_reg
nof_sop <= cnt_sop; nof_sop <= cnt_sop;
nof_err <= cnt_err; nof_err <= cnt_err;
nof_valid <= cnt_valid; nof_valid <= cnt_valid;
latency <= cnt_latency; latency <= cnt_latency;
-- Register ref_sync to ease timing closure for ref_sync fanout to (many) dp_bsn_monitor_v2 instances -- Register ref_sync to ease timing closure for ref_sync fanout to (many) dp_bsn_monitor_v2
-- TODO if needed: -- instances. The ref_sync_reg is used to restart cnt_latency. Therefore the sync_reg
-- Registering ref_sync assumes ref_sunc occurs before in_sosi.sync. When ref_sync = in_sosi.sync, -- (instead of sync) is needed to capture latency (= cnt_latency) not too early, so capture
-- then also the impact of registering ref_sync with respect to in_sosi and in_siso needs to be -- cnt_latency at or after the cnt_latency has restarted.
-- verified. sync_reg <= sync WHEN rising_edge(clk);
--ref_sync_reg <= ref_sync WHEN rising_edge(clk); ref_sync_reg <= ref_sync WHEN rising_edge(clk);
ref_sync_reg <= ref_sync;
u_sync_timeout_cnt : ENTITY common_lib.common_counter u_sync_timeout_cnt : ENTITY common_lib.common_counter
GENERIC MAP ( GENERIC MAP (
...@@ -216,6 +216,7 @@ BEGIN ...@@ -216,6 +216,7 @@ BEGIN
sop <= '0'; sop <= '0';
err <= '0'; err <= '0';
sync <= '0'; sync <= '0';
sync_reg <= '0';
bsn <= (OTHERS=>'0'); bsn <= (OTHERS=>'0');
-- output -- output
mon_evt <= '0'; mon_evt <= '0';
...@@ -236,7 +237,8 @@ BEGIN ...@@ -236,7 +237,8 @@ BEGIN
sop <= nxt_sop; sop <= nxt_sop;
err <= nxt_err; err <= nxt_err;
sync <= nxt_sync; sync <= nxt_sync;
bsn <= nxt_bsn; sync_reg <= sync;
bsn <= nxt_bsn;
-- output -- output
mon_evt <= nxt_mon_evt; mon_evt <= nxt_mon_evt;
sync_timeout <= nxt_sync_timeout; sync_timeout <= nxt_sync_timeout;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment