9/23/24, 10:35 AM Understanding Time Borrowing in Latch-based Designs
Understanding Time Borrowing in Latch-based Designs
Problem
Understanding time borrowing in a latch-based design.
Solution
What is Time Borrowing?
The time borrowing (cycle stealing) occurs in a latch. In a latch, one edge of the clock makes the latch transparent and
opens it so that the output of the latch is the same as the data input. This clock edge is called the opening edge. The
second edge of the clock closes the latch and any change on the data input is no longer available at the output of the
latch. This clock edge is called the closing edge.
The data should be ready at a latch input before the active edge of the clock. However, because a latch is transparent
when the clock is active, the data can arrive later than the active clock edge and it can borrow time from the next
cycle. If such time is borrowed, the time available for the following stage (latch to another sequential cell) is reduced.
Example of Time Borrowing
If data arrives at the D pin of the flop U2, before latch opening on the rising edge of clock at 5 ns, the data flows to the
output of the latch as it opens. If the data arrives at 8 ns while the clock arrives at 5ns and U2 is still open, this path
borrows 3ns from the next path, that is, U2 to U3 and hence meets the setup.
If the data arrives before the opening edge of the latch, the behavior is modeled exactly like a flop. The opening edge
captures the data and the same clock edge launches the data as the start point for the next path.
Maximum Borrowing Time
By default, the maximum available borrowing is the pulse width of the clock. However, this limit can change. The setup
time imposes a limit on the time by which the data has to reach.
Hence, the maximum borrowing becomes "pulse width - setup time".
Clock latency can effectively shrink or expand the clock pulse due to variations in the rising and falling latency as
shown in the following diagram. Hence, the maximum time available for borrowing changes.
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nVemEAE&pageName=ArticleContent 1/6
9/23/24, 10:35 AM Understanding Time Borrowing in Latch-based Designs
Enabling Time Borrowing
Time borrowing is enabled by default and controlled by the following command:
set_global timing_use_latch_time_borrow true # Default is "true", to disable time
borrowing set this to "false".
set_analysis_mode –timeBorrowing true # Default is "true", to disable time borrowing set this
to "false".
The timing_use_latch_time_borrow global should not be used with the set_analysis_mode command. You
can use this global only when the set_analysis_mode command is not used.
Note: If you set these commands to false to disable time borrowing, the tool does not disable time borrowing
computation and sets the borrow limit to 0 as shown in the following report:
Path 1: MET Latch Borrowed Time Check with Pin L1/G
Endpoint: L1/D (v) checked with leading edge of 'ck'
Beginpoint: in (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 0.344
+ Time Borrowed 0.000
Timing Reports with Time Borrowing
The amount of time borrowed from the next path is displayed by "Time Borrowed" in the timing report as shown in the
following example:
Path 1: MET Latch Borrowed Time Check with Pin L1/G
Endpoint: L1/D (v) checked with leading edge of 'ck'
Beginpoint: in (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 0.347
+ Time Borrowed 1.728
+ Phase Shift 0.000
= Required Time 2.075
- Arrival Time 2.075
= Slack Time 0.000
Clock Rise Edge 0.000
+ Input Delay 2.000
= Beginpoint Arrival Time 2.000
---------------------------------------------------------------
Instance Arc Cell Delay Arrival Required User
Time Time Derate
---------------------------------------------------------------
- in v - - 2.000 2.000 -
B1 A v -> Y v BUFX1 0.075 2.075 2.075 1.100
L1 D v TLATRX1 0.000 2.075 2.075 1.100
---------------------------------------------------------------
The amount of time borrowed (minus any clock uncertainty) is displayed by "Time Given To Start Point" as shown in
the following report:
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nVemEAE&pageName=ArticleContent 2/6
9/23/24, 10:35 AM Understanding Time Borrowing in Latch-based Designs
Path 1: MET Latch Borrowed Time Check with Pin L2/G
Endpoint: L2/D (v) checked with trailing edge of 'ck'
Beginpoint: L1/Q (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 5.357
+ Time Borrowed 0.000
+ Phase Shift 0.000
= Required Time 5.357
- Arrival Time 2.323
= Slack Time 3.034
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 0.347
= Beginpoint Arrival Time 0.347
----------------------------------------------------------------------
Instance Arc Cell Delay Time Arrival Required User
Given Time Time Derate
To
Start
Point
----------------------------------------------------------------------
L1 G ^ - - - 0.424 3.458 -
L1 D v -> Q v TLATRX1 0.165 1.728 2.240 5.274 1.100
B2 A v -> Y v BUFX2 0.083 - 2.323 5.357 1.100
L2 D v TLATRX1 0.000 - 2.323 5.357 1.100
----------------------------------------------------------------------
If you run report_timing on same path with -check_type setup, then it will report the setup check. In such
cases, the latches are treated like normal flip-flops.
Path 1: MET Setup Check with Pin L1/G
Endpoint: L1/D (v) checked with trailing edge of 'ck'
Beginpoint: in (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 5.377
- Setup 0.119
+ Phase Shift 0.000
+ CPPR Adjustment 0.000
- Uncertainty 1.200
= Required Time 4.059
- Arrival Time 2.075
= Slack Time 1.984
Clock Rise Edge 0.000
+ Input Delay 2.000
= Beginpoint Arrival Time 2.000
---------------------------------------------------------------
Instance Arc Cell Delay Arrival Required User
Time Time Derate
---------------------------------------------------------------
- in v - - 2.000 3.984 -
B1 A v -> Y v BUFX1 0.075 2.075 4.059 1.100
L1 D v TLATRX1 0.000 2.075 4.059 1.100
---------------------------------------------------------------
You can report both, the setup check and time borrow check by using a higher value for the -nworst option
(report_timing -to L1 -nworst value), to report a greater number of paths (including the setup and the time
borrow).
Time Given to Start Point
The "Time Given to Start Point" is displayed if the previous path has borrowed timing.
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nVemEAE&pageName=ArticleContent 3/6
9/23/24, 10:35 AM Understanding Time Borrowing in Latch-based Designs
Normally, Time Given to Start Point = Time borrowed.
In the presence of uncertainty in the path, Time given to start = Time Borrowed - clock uncertainty
In the following example:
Time Borrowed = 2.928, Time Given to Start Point = 1.728 and Uncertainty = 1.20
Time Borrowed Path:
Path 1: MET Latch Borrowed Time Check with Pin L1/G
Endpoint: L1/D (v) checked with leading edge of 'ck'
Beginpoint: in (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 0.347
+ Time Borrowed 2.928
+ Phase Shift 0.000
+ CPPR Adjustment 0.000
- Uncertainty 1.200
= Required Time 2.075
- Arrival Time 2.075
= Slack Time 0.000
Clock Rise Edge 0.000
+ Input Delay 2.000
= Beginpoint Arrival Time 2.000
---------------------------------------------------------------
Instance Arc Cell Delay Arrival Required User
Time Time Derate
---------------------------------------------------------------
- in v - - 2.000 2.000 -
B1 A v -> Y v BUFX1 0.075 2.075 2.075 1.100
L1 D v TLATRX1 0.000 2.075 2.075 1.100
---------------------------------------------------------------
Time Given Path:
Path 1: MET Latch Borrowed Time Check with Pin L2/G
Endpoint: L2/D (v) checked with trailing edge of 'ck'
Beginpoint: L1/Q (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 5.357
+ Time Borrowed 0.000
+ Phase Shift 0.000
+ CPPR Adjustment 0.000
- Uncertainty 1.200
= Required Time 4.157
- Arrival Time 2.323
= Slack Time 1.834
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 0.347
= Beginpoint Arrival Time 0.347
----------------------------------------------------------------------
Instance Arc Cell Delay Time Arrival Required User
Given Time Time Derate
To
Start
Point
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nVemEAE&pageName=ArticleContent 4/6
9/23/24, 10:35 AM Understanding Time Borrowing in Latch-based Designs
----------------------------------------------------------------------
L1 G ^ - - - 0.424 2.258 -
L1 D v -> Q v TLATRX1 0.165 1.728 2.240 4.074 1.100
B2 A v -> Y v BUFX2 0.083 - 2.323 4.157 1.100
L2 D v TLATRX1 0.000 - 2.323 4.157 1.100
----------------------------------------------------------------------
Note: The global timing_use_latch_early_launch_edge impacts the reporting of the setup check and time
borrow. By default, this global is set to true. With this set to true, uncertainty will be considered as shown in the
earlier example and the CPPR adjustment will not be done.
If this is set to false, the CPPR adjustment is done and the "Time Given to Start Point" will be equal to "Time
Borrowed" (uncertainty value will not be subtracted from Time Borrowed).
Time Borrowed Path:
Path 1: MET Latch Borrowed Time Check with Pin L1/G
Endpoint: L1/D (v) checked with leading edge of 'ck'
Beginpoint: in (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 0.347
+ Time Borrowed 1.728
+ Phase Shift 0.000
= Required Time 2.075
- Arrival Time 2.075
= Slack Time 0.000
Clock Rise Edge 0.000
+ Input Delay 2.000
= Beginpoint Arrival Time 2.000
---------------------------------------------------------------
Instance Arc Cell Delay Arrival Required User
Time Time Derate
---------------------------------------------------------------
- in v - - 2.000 2.000 -
B1 A v -> Y v BUFX1 0.075 2.075 2.075 1.100
L1 D v TLATRX1 0.000 2.075 2.075 1.100
---------------------------------------------------------------
Time Given Path:
Path 1: MET Latch Borrowed Time Check with Pin L2/G
Endpoint: L2/D (v) checked with trailing edge of 'ck'
Beginpoint: L1/Q (v) triggered by leading edge of 'ck'
Path Groups: {ck}
Other End Arrival Time 5.357
+ Borrow Edge Adjust 0.013
+ Phase Shift 0.000
+ CPPR Adjustment 0.063
- Uncertainty 1.200
= Required Time 4.233
- Arrival Time 2.400
= Slack Time 1.833
Clock Rise Edge 0.000
+ Clock Network Latency (Prop) 0.424
= Beginpoint Arrival Time 0.424
----------------------------------------------------------------------
Instance Arc Cell Delay Time Arrival Required User
Given Time Time Derate
To
Start
Point
----------------------------------------------------------------------
L1 G ^ - - - 0.424 2.257 -
L1 D v -> Q v TLATRX1 0.165 1.728 2.317 4.150 1.100
B2 A v -> Y v BUFX2 0.083 - 2.400 4.233 1.100
L2 D v TLATRX1 0.000 - 2.400 4.233 1.100
----------------------------------------------------------------------
NOTE: For more detailed discussion on this topic, please refer to the related article "Time Borrowing in
Tempus/Innovus"
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nVemEAE&pageName=ArticleContent 5/6
9/23/24, 10:35 AM Understanding Time Borrowing in Latch-based Designs
Return to the top of the page
https://support.cadence.com/apex/ArticleAttachmentPortal?id=a1Od0000000nVemEAE&pageName=ArticleContent 6/6