|
63 | 63 | -- input clock domain and output clock domain needs to not be analized:
|
64 | 64 | -- set_false_path -through [get_pins -filter {NAME =~ *SyncAsync*/oSyncStages_reg[0]/D} -hier]
|
65 | 65 | --
|
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 |
67 | 67 | -- the output clock domain needs to be overconstrained to half of the
|
68 | 68 | -- output clock period, to leave the other half for metastability to
|
69 | 69 | -- settle:
|
70 | 70 | -- 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}] |
72 | 72 | -- 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}] |
74 | 74 | --
|
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 |
76 | 76 | -- flip-flops in the output clock domain needs to be overconstrained to
|
77 | 77 | -- half of the output clock period, to leave the other half for
|
78 | 78 | -- metastability to settle:
|
79 | 79 | -- 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}] |
81 | 81 | --
|
82 | 82 | -- - Also for the ResetBridge module, we need to disable timing analysis on
|
83 | 83 | -- the reset paths, for both its edges. This is necessary because the
|
|
88 | 88 | -- domain, the maximum delay needs to be set to 2 output clock cycles, so
|
89 | 89 | -- the data sampled in the output clock domain is stable by the time
|
90 | 90 | -- 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. |
91 | 94 | -- set ClkPeriod [get_property PERIOD [get_clocks -of_objects [get_pins -filter {NAME =~ *<HandshakeData instantiation name>*/oData_reg[0]/C} -hier]]]
|
92 | 95 | -- 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}]
|
93 | 96 |
|
|
100 | 103 | -- oPushTChanged, to make sure both the InClk and OutClk data latching FFs
|
101 | 104 | -- use actual clock enable (CE) pins.
|
102 | 105 | -- 2022-Oct-04: Added Constraint Templates section to the header comments.
|
| 106 | +-- 2023-Oct-17: Updated Constraint Templates section for triple |
| 107 | +-- synchronizers. |
103 | 108 | -------------------------------------------------------------------------------
|
104 | 109 |
|
105 | 110 |
|
|
0 commit comments