Skip to content

Commit 591e4ab

Browse files
Ioan Catunaartvvb
authored andcommitted
Updated constraint comments for triple synchronizers.
1 parent 36ab821 commit 591e4ab

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

module/synchronizers/HandshakeData.vhd

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,21 @@
6363
-- input clock domain and output clock domain needs to not be analized:
6464
-- set_false_path -through [get_pins -filter {NAME =~ *SyncAsync*/oSyncStages_reg[0]/D} -hier]
6565
--
66-
-- - Also for the SyncAsync modules, the path between the flip-flops in
66+
-- - Also for the SyncAsync modules, the path(s) between the flip-flops in
6767
-- the output clock domain needs to be overconstrained to half of the
6868
-- output clock period, to leave the other half for metastability to
6969
-- settle:
7070
-- set ClkPeriod [get_property PERIOD [get_clocks -of_objects [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushTBack*/oSyncStages_reg[0]/C} -hier]]]
71-
-- set_max_delay -from [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushTBack*/oSyncStages_reg[0]/C} -hier] -to [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushTBack*/oSyncStages_reg[1]/D} -hier] [expr {$ClkPeriod/2}]
71+
-- set_max_delay -from [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushTBack*/oSyncStages_reg[*]/C} -hier] -to [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushTBack*/oSyncStages_reg[*]/D} -hier] [expr {$ClkPeriod/2}]
7272
-- set ClkPeriod [get_property PERIOD [get_clocks -of_objects [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushT/oSyncStages_reg[0]/C} -hier]]]
73-
-- set_max_delay -from [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushT/oSyncStages_reg[0]/C} -hier] -to [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushT/oSyncStages_reg[1]/D} -hier] [expr {$ClkPeriod/2}]
73+
-- set_max_delay -from [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushT/oSyncStages_reg[*]/C} -hier] -to [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncAsyncPushT/oSyncStages_reg[*]/D} -hier] [expr {$ClkPeriod/2}]
7474
--
75-
-- - For the ResetBridge module inside this module, the path between the
75+
-- - For the ResetBridge module inside this module, the path(s) between the
7676
-- flip-flops in the output clock domain needs to be overconstrained to
7777
-- half of the output clock period, to leave the other half for
7878
-- metastability to settle:
7979
-- set ClkPeriod [get_property PERIOD [get_clocks -of_objects [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncReset*SyncAsync*/oSyncStages_reg[0]/C} -hier]]]
80-
-- set_max_delay -from [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncReset*SyncAsync*/oSyncStages_reg[0]/C} -hier] -to [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncReset*SyncAsync*/oSyncStages_reg[1]/D} -hier] [expr {$ClkPeriod/2}]
80+
-- set_max_delay -from [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncReset*SyncAsync*/oSyncStages_reg[*]/C} -hier] -to [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*SyncReset*SyncAsync*/oSyncStages_reg[*]/D} -hier] [expr {$ClkPeriod/2}]
8181
--
8282
-- - Also for the ResetBridge module, we need to disable timing analysis on
8383
-- the reset paths, for both its edges. This is necessary because the
@@ -88,6 +88,9 @@
8888
-- domain, the maximum delay needs to be set to 2 output clock cycles, so
8989
-- the data sampled in the output clock domain is stable by the time
9090
-- oPushTChanged is asserted.
91+
-- If the double synchronizers inside the HandshakeData module are changed to triple
92+
-- synchronizers (e.g. for Ultrascale architecture), then the value of this
93+
-- constraint needs to be set to 3 output clock cycles.
9194
-- set ClkPeriod [get_property PERIOD [get_clocks -of_objects [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*/oData_reg[0]/C} -hier]]]
9295
-- set_max_delay -datapath_only -from [get_cells -hier -filter {NAME =~ *<HandshakeData instantiation name>*/iData_int_reg[*]}] -to [get_cells -hier -filter {NAME=~ *<HandshakeData instantiation name>*/oData_reg[*]}] [expr {$ClkPeriod*2}]
9396

@@ -100,6 +103,8 @@
100103
-- oPushTChanged, to make sure both the InClk and OutClk data latching FFs
101104
-- use actual clock enable (CE) pins.
102105
-- 2022-Oct-04: Added Constraint Templates section to the header comments.
106+
-- 2023-Oct-17: Updated Constraint Templates section for triple
107+
-- synchronizers.
103108
-------------------------------------------------------------------------------
104109

105110

module/synchronizers/SyncBase.vhd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
-- asserted independently.
4949
--
5050
-- Constraints:
51-
-- # Replace <InstSyncBase> with path to SyncAsync instance, keep rest unchanged
51+
-- # Replace <InstSyncBase> with path to SyncBase instance, keep rest unchanged
5252
-- # Begin scope to SyncBase instance
5353
-- current_instance [get_cells <InstSyncBase>]
5454
-- # Input to synchronizer ignored for timing analysis

0 commit comments

Comments
 (0)