Skip to content

Commit d300307

Browse files
authored
Merge pull request #8378 from The-OpenROAD-Project-staging/secure-setup-qor
New VT swap for critical cells near end of setup fixing
2 parents 9c7928a + a79bac9 commit d300307

31 files changed

+78819
-113
lines changed

src/gpl/test/convergence01.defok

Lines changed: 58 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -161,70 +161,70 @@ COMPONENTS 145 ;
161161
- PHY_8 TAPCELL_ASAP7_75t_R + SOURCE DIST + FIXED ( 486 1620 ) N ;
162162
- PHY_9 TAPCELL_ASAP7_75t_R + SOURCE DIST + FIXED ( 11394 1620 ) FN ;
163163
- _33_ INVx3_ASAP7_75t_R + PLACED ( 4853 10251 ) N ;
164-
- _34_ INVx3_ASAP7_75t_R + PLACED ( 5471 6131 ) N ;
165-
- _35_ INVx3_ASAP7_75t_R + PLACED ( 5187 5909 ) N ;
166-
- _36_ INVx3_ASAP7_75t_R + PLACED ( 4338 10251 ) N ;
167-
- _37_ INVx3_ASAP7_75t_R + PLACED ( 4723 5498 ) N ;
168-
- _38_ INVx3_ASAP7_75t_R + PLACED ( 4573 5470 ) N ;
169-
- _39_ INVx3_ASAP7_75t_R + PLACED ( 10394 4180 ) N ;
170-
- _40_ INVx3_ASAP7_75t_R + PLACED ( 6094 4723 ) N ;
171-
- _41_ INVx3_ASAP7_75t_R + PLACED ( 10394 4326 ) N ;
172-
- _42_ INVx3_ASAP7_75t_R + PLACED ( 5878 4326 ) N ;
173-
- _43_ INVx3_ASAP7_75t_R + PLACED ( 5826 4162 ) N ;
164+
- _34_ INVx3_ASAP7_75t_R + PLACED ( 5471 6127 ) N ;
165+
- _35_ INVx3_ASAP7_75t_R + PLACED ( 5187 5904 ) N ;
166+
- _36_ INVx3_ASAP7_75t_R + PLACED ( 4333 10251 ) N ;
167+
- _37_ INVx3_ASAP7_75t_R + PLACED ( 4722 5500 ) N ;
168+
- _38_ INVx3_ASAP7_75t_R + PLACED ( 4571 5476 ) N ;
169+
- _39_ INVx3_ASAP7_75t_R + PLACED ( 10394 4195 ) N ;
170+
- _40_ INVx3_ASAP7_75t_R + PLACED ( 6094 4724 ) N ;
171+
- _41_ INVx3_ASAP7_75t_R + PLACED ( 10394 4338 ) N ;
172+
- _42_ INVx3_ASAP7_75t_R + PLACED ( 5878 4328 ) N ;
173+
- _43_ INVx3_ASAP7_75t_R + PLACED ( 5825 4163 ) N ;
174174
- _44_ INVx3_ASAP7_75t_R + PLACED ( 10394 3755 ) N ;
175-
- _45_ INVx3_ASAP7_75t_R + PLACED ( 5701 3926 ) N ;
176-
- _46_ INVx3_ASAP7_75t_R + PLACED ( 5635 3850 ) N ;
177-
- _47_ INVx3_ASAP7_75t_R + PLACED ( 3023 1359 ) N ;
178-
- _48_ INVx3_ASAP7_75t_R + PLACED ( 2936 1359 ) N ;
175+
- _45_ INVx3_ASAP7_75t_R + PLACED ( 5702 3927 ) N ;
176+
- _46_ INVx3_ASAP7_75t_R + PLACED ( 5637 3851 ) N ;
177+
- _47_ INVx3_ASAP7_75t_R + PLACED ( 3021 1359 ) N ;
178+
- _48_ INVx3_ASAP7_75t_R + PLACED ( 2934 1359 ) N ;
179179
- _49_ INVx3_ASAP7_75t_R + PLACED ( 2845 1359 ) N ;
180180
- _50_ INVx3_ASAP7_75t_R + PLACED ( 2753 1359 ) N ;
181181
- _51_ INVx3_ASAP7_75t_R + PLACED ( 2687 1359 ) N ;
182-
- _52_ INVx3_ASAP7_75t_R + PLACED ( 2637 1359 ) N ;
182+
- _52_ INVx3_ASAP7_75t_R + PLACED ( 2638 1359 ) N ;
183183
- _53_ INVx3_ASAP7_75t_R + PLACED ( 2590 1359 ) N ;
184-
- _54_ INVx3_ASAP7_75t_R + PLACED ( 2542 1359 ) N ;
185-
- _55_ INVx3_ASAP7_75t_R + PLACED ( 4012 3943 ) N ;
186-
- _56_ INVx3_ASAP7_75t_R + PLACED ( 3893 3809 ) N ;
187-
- _57_ INVx3_ASAP7_75t_R + PLACED ( 3853 3613 ) N ;
188-
- _58_ INVx3_ASAP7_75t_R + PLACED ( 3865 3349 ) N ;
189-
- _59_ INVx3_ASAP7_75t_R + PLACED ( 3974 3057 ) N ;
190-
- _60_ INVx3_ASAP7_75t_R + PLACED ( 3979 2937 ) N ;
191-
- _61_ INVx3_ASAP7_75t_R + PLACED ( 3378 2964 ) N ;
192-
- _62_ INVx3_ASAP7_75t_R + PLACED ( 2081 2989 ) N ;
193-
- _63_ INVx3_ASAP7_75t_R + PLACED ( 5936 6433 ) N ;
194-
- _64_ INVx3_ASAP7_75t_R + PLACED ( 5906 6298 ) N ;
195-
- _65_ INVx3_ASAP7_75t_R + PLACED ( 5760 6213 ) N ;
196-
- _66_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6017 5377 ) N ;
197-
- _67_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6143 5475 ) N ;
198-
- _68_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6135 5621 ) N ;
199-
- _69_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1890 1451 ) N ;
200-
- _70_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3197 1472 ) N ;
201-
- _71_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3563 1585 ) N ;
202-
- _72_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3635 1905 ) N ;
203-
- _73_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3627 2322 ) N ;
204-
- _74_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3668 2724 ) N ;
205-
- _75_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3715 2997 ) N ;
206-
- _76_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3827 3170 ) N ;
207-
- _77_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2064 ) N ;
208-
- _78_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2084 ) N ;
209-
- _79_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2098 ) N ;
210-
- _80_ DFFLQNx1_ASAP7_75t_R + PLACED ( 935 2099 ) N ;
211-
- _81_ DFFLQNx1_ASAP7_75t_R + PLACED ( 976 2101 ) N ;
212-
- _82_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1045 2163 ) N ;
213-
- _83_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1134 2552 ) N ;
214-
- _84_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1202 3049 ) N ;
215-
- _85_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3710 4615 ) N ;
216-
- _86_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3803 4668 ) N ;
217-
- _87_ DFFLQNx1_ASAP7_75t_R + PLACED ( 9224 3636 ) N ;
218-
- _88_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3967 4956 ) N ;
219-
- _89_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4041 5205 ) N ;
220-
- _90_ DFFLQNx1_ASAP7_75t_R + PLACED ( 8803 4914 ) N ;
184+
- _54_ INVx3_ASAP7_75t_R + PLACED ( 2543 1359 ) N ;
185+
- _55_ INVx3_ASAP7_75t_R + PLACED ( 4001 3943 ) N ;
186+
- _56_ INVx3_ASAP7_75t_R + PLACED ( 3884 3810 ) N ;
187+
- _57_ INVx3_ASAP7_75t_R + PLACED ( 3846 3617 ) N ;
188+
- _58_ INVx3_ASAP7_75t_R + PLACED ( 3860 3351 ) N ;
189+
- _59_ INVx3_ASAP7_75t_R + PLACED ( 3971 3055 ) N ;
190+
- _60_ INVx3_ASAP7_75t_R + PLACED ( 3971 2934 ) N ;
191+
- _61_ INVx3_ASAP7_75t_R + PLACED ( 3379 2962 ) N ;
192+
- _62_ INVx3_ASAP7_75t_R + PLACED ( 2091 2990 ) N ;
193+
- _63_ INVx3_ASAP7_75t_R + PLACED ( 5935 6431 ) N ;
194+
- _64_ INVx3_ASAP7_75t_R + PLACED ( 5905 6296 ) N ;
195+
- _65_ INVx3_ASAP7_75t_R + PLACED ( 5762 6209 ) N ;
196+
- _66_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6021 5372 ) N ;
197+
- _67_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6140 5473 ) N ;
198+
- _68_ DFFLQNx1_ASAP7_75t_R + PLACED ( 6135 5617 ) N ;
199+
- _69_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1903 1453 ) N ;
200+
- _70_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3200 1468 ) N ;
201+
- _71_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3559 1580 ) N ;
202+
- _72_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3634 1899 ) N ;
203+
- _73_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3625 2324 ) N ;
204+
- _74_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3665 2729 ) N ;
205+
- _75_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3710 2997 ) N ;
206+
- _76_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3821 3170 ) N ;
207+
- _77_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2062 ) N ;
208+
- _78_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2083 ) N ;
209+
- _79_ DFFLQNx1_ASAP7_75t_R + PLACED ( 919 2096 ) N ;
210+
- _80_ DFFLQNx1_ASAP7_75t_R + PLACED ( 935 2098 ) N ;
211+
- _81_ DFFLQNx1_ASAP7_75t_R + PLACED ( 975 2099 ) N ;
212+
- _82_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1043 2161 ) N ;
213+
- _83_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1131 2547 ) N ;
214+
- _84_ DFFLQNx1_ASAP7_75t_R + PLACED ( 1200 3048 ) N ;
215+
- _85_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3711 4617 ) N ;
216+
- _86_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3804 4669 ) N ;
217+
- _87_ DFFLQNx1_ASAP7_75t_R + PLACED ( 9222 3637 ) N ;
218+
- _88_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3966 4958 ) N ;
219+
- _89_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4040 5208 ) N ;
220+
- _90_ DFFLQNx1_ASAP7_75t_R + PLACED ( 8792 4940 ) N ;
221221
- _91_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4277 5992 ) N ;
222-
- _92_ DFFLQNx1_ASAP7_75t_R + PLACED ( 9047 4443 ) N ;
223-
- _93_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4255 4689 ) N ;
224-
- _94_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4453 4741 ) N ;
225-
- _95_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3529 10003 ) N ;
226-
- _96_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5154 5069 ) N ;
227-
- _97_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5559 5278 ) N ;
222+
- _92_ DFFLQNx1_ASAP7_75t_R + PLACED ( 9028 4475 ) N ;
223+
- _93_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4250 4693 ) N ;
224+
- _94_ DFFLQNx1_ASAP7_75t_R + PLACED ( 4451 4742 ) N ;
225+
- _95_ DFFLQNx1_ASAP7_75t_R + PLACED ( 3520 10008 ) N ;
226+
- _96_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5154 5064 ) N ;
227+
- _97_ DFFLQNx1_ASAP7_75t_R + PLACED ( 5560 5272 ) N ;
228228
END COMPONENTS
229229
PINS 65 ;
230230
- clock + NET clock + DIRECTION INPUT + USE SIGNAL

src/gpl/test/convergence01.ok

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -80,37 +80,37 @@ Iteration | Area | Resized | Buffers | Nets repaired | Remaining
8080
[INFO GPL-0110] Timing-driven: new target density: 0.5
8181
Iteration | Overflow | HPWL (um) | HPWL(%) | Penalty | Group
8282
---------------------------------------------------------------
83-
10 | 0.1852 | 4.010190e+02 | +0.78% | 1.22e-10 |
84-
20 | 0.1983 | 3.996960e+02 | -0.33% | 1.80e-10 |
85-
30 | 0.2139 | 3.996910e+02 | -0.00% | 2.66e-10 |
86-
40 | 0.2224 | 3.997260e+02 | +0.01% | 3.91e-10 |
87-
50 | 0.2072 | 3.997480e+02 | +0.01% | 5.76e-10 |
88-
60 | 0.2037 | 3.997340e+02 | -0.00% | 8.49e-10 |
89-
70 | 0.1996 | 3.996970e+02 | -0.01% | 1.25e-09 |
90-
80 | 0.2094 | 3.997010e+02 | +0.00% | 1.84e-09 |
91-
90 | 0.2069 | 3.997450e+02 | +0.01% | 2.71e-09 |
92-
100 | 0.2129 | 3.997350e+02 | -0.00% | 4.00e-09 |
93-
110 | 0.2057 | 3.997330e+02 | -0.00% | 5.89e-09 |
94-
120 | 0.2047 | 3.997140e+02 | -0.00% | 8.68e-09 |
95-
130 | 0.2001 | 3.997150e+02 | +0.00% | 1.28e-08 |
96-
140 | 0.2082 | 3.997060e+02 | -0.00% | 1.88e-08 |
97-
150 | 0.2041 | 3.997320e+02 | +0.01% | 2.77e-08 |
98-
160 | 0.2099 | 3.997370e+02 | +0.00% | 4.09e-08 |
99-
170 | 0.2035 | 3.998120e+02 | +0.02% | 6.02e-08 |
100-
180 | 0.1994 | 3.998580e+02 | +0.01% | 8.87e-08 |
101-
190 | 0.1909 | 3.999030e+02 | +0.01% | 1.31e-07 |
102-
200 | 0.2047 | 3.997060e+02 | -0.05% | 1.92e-07 |
103-
210 | 0.1996 | 3.998090e+02 | +0.03% | 2.83e-07 |
104-
220 | 0.1939 | 3.999210e+02 | +0.03% | 4.18e-07 |
105-
230 | 0.1812 | 3.998690e+02 | -0.01% | 6.15e-07 |
106-
240 | 0.1842 | 3.997750e+02 | -0.02% | 9.06e-07 |
107-
250 | 0.1788 | 3.998360e+02 | +0.02% | 1.33e-06 |
108-
260 | 0.1719 | 3.998900e+02 | +0.01% | 1.97e-06 |
109-
270 | 0.1622 | 3.998190e+02 | -0.02% | 2.90e-06 |
83+
10 | 0.1870 | 4.009940e+02 | +0.78% | 1.22e-10 |
84+
20 | 0.1988 | 3.997030e+02 | -0.32% | 1.80e-10 |
85+
30 | 0.2140 | 3.996830e+02 | -0.01% | 2.66e-10 |
86+
40 | 0.2231 | 3.997220e+02 | +0.01% | 3.91e-10 |
87+
50 | 0.2084 | 3.997420e+02 | +0.01% | 5.76e-10 |
88+
60 | 0.2024 | 3.997290e+02 | -0.00% | 8.49e-10 |
89+
70 | 0.1990 | 3.996960e+02 | -0.01% | 1.25e-09 |
90+
80 | 0.2103 | 3.996920e+02 | -0.00% | 1.84e-09 |
91+
90 | 0.2071 | 3.997460e+02 | +0.01% | 2.71e-09 |
92+
100 | 0.2133 | 3.997360e+02 | -0.00% | 4.00e-09 |
93+
110 | 0.2051 | 3.997290e+02 | -0.00% | 5.89e-09 |
94+
120 | 0.2047 | 3.997080e+02 | -0.01% | 8.68e-09 |
95+
130 | 0.1994 | 3.997140e+02 | +0.00% | 1.28e-08 |
96+
140 | 0.2093 | 3.997020e+02 | -0.00% | 1.88e-08 |
97+
150 | 0.2039 | 3.997340e+02 | +0.01% | 2.77e-08 |
98+
160 | 0.2097 | 3.997340e+02 | +0.00% | 4.09e-08 |
99+
170 | 0.2033 | 3.998010e+02 | +0.02% | 6.02e-08 |
100+
180 | 0.1991 | 3.998550e+02 | +0.01% | 8.87e-08 |
101+
190 | 0.1917 | 3.999040e+02 | +0.01% | 1.31e-07 |
102+
200 | 0.2051 | 3.997040e+02 | -0.05% | 1.92e-07 |
103+
210 | 0.1982 | 3.998130e+02 | +0.03% | 2.83e-07 |
104+
220 | 0.1939 | 3.999100e+02 | +0.02% | 4.18e-07 |
105+
230 | 0.1813 | 3.998720e+02 | -0.01% | 6.15e-07 |
106+
240 | 0.1841 | 3.997760e+02 | -0.02% | 9.06e-07 |
107+
250 | 0.1791 | 3.998330e+02 | +0.01% | 1.33e-06 |
108+
260 | 0.1719 | 3.998860e+02 | +0.01% | 1.97e-06 |
109+
270 | 0.1622 | 3.998120e+02 | -0.02% | 2.90e-06 |
110110
280 | 0.1421 | 3.998290e+02 | +0.00% | 4.27e-06 |
111-
290 | 0.1288 | 3.999540e+02 | +0.03% | 6.29e-06 |
112-
300 | 0.1138 | 4.000310e+02 | +0.02% | 9.26e-06 |
113-
308 | 0.0995 | 4.002340e+02 | | 1.31e-05 |
111+
290 | 0.1288 | 3.999560e+02 | +0.03% | 6.29e-06 |
112+
300 | 0.1141 | 4.000290e+02 | +0.02% | 9.26e-06 |
113+
308 | 0.0995 | 4.002280e+02 | | 1.31e-05 |
114114
---------------------------------------------------------------
115115
[INFO GPL-1001] Global placement finished at iteration 308
116116
[INFO GPL-1002] Placed Cell Area 15.5277

src/psm/test/aes_asap7_vdd.ok

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
Net : VDD
2222
Corner : default
2323
Supply voltage : 7.00e-01 V
24-
Worstcase voltage: 6.93e-01 V
24+
Worstcase voltage: 6.91e-01 V
2525
Average voltage : 6.97e-01 V
26-
Average IR drop : 2.65e-03 V
27-
Worstcase IR drop: 6.60e-03 V
28-
Percentage drop : 0.94 %
26+
Average IR drop : 3.37e-03 V
27+
Worstcase IR drop: 8.55e-03 V
28+
Percentage drop : 1.22 %
2929
######################################

src/rsz/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ repair_timing
231231
[-skip_buffer_removal]
232232
[-skip_last_gasp]
233233
[-skip_vt_swap]
234+
[-skip_crit_vt_swap]
234235
[-repair_tns tns_end_percent]
235236
[-max_passes passes]
236237
[-max_repairs_per_pass max_repairs_per_pass]
@@ -258,6 +259,7 @@ repair_timing
258259
| `-skip_buffer_removal` | Flag to skip buffer removal. The default is to perform buffer removal transform during setup fixing. |
259260
| `-skip_last_gasp` | Flag to skip final ("last gasp") optimizations. The default is to perform greedy sizing at the end of optimization. |
260261
| `-skip_vt_swap` | Flag to skip threshold voltage (VT) swap optimizations. The default is to perform VT swap optimization to improve timing QoR. |
262+
| `-skip_crit_vt_swap` | Flag to skip critical threshold voltage (VT) swap optimizations at the end of optimization. The default is to perform critical VT swap optimization to improve timing QoR beyond repairing just the worst path per each violating endpoint. |
261263
| `-repair_tns` | Percentage of violating endpoints to repair (0-100). When `tns_end_percent` is zero, only the worst endpoint is repaired. When `tns_end_percent` is 100 (default), all violating endpoints are repaired. |
262264
| `-max_repairs_per_pass` | Maximum repairs per pass, default is 1. On the worst paths, the maximum number of repairs is attempted. It gradually decreases until the final violations which only get 1 repair per pass. |
263265
| `-max_utilization` | Defines the percentage of core area used. |

src/rsz/include/rsz/Resizer.hh

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ class Resizer : public dbStaState, public dbNetworkObserver
286286
bool skip_buffering,
287287
bool skip_buffer_removal,
288288
bool skip_last_gasp,
289-
bool skip_vt_swap);
289+
bool skip_vt_swap,
290+
bool skip_crit_vt_swap);
290291
// For testing.
291292
void repairSetup(const Pin* end_pin);
292293
// For testing.
@@ -684,6 +685,9 @@ class Resizer : public dbStaState, public dbNetworkObserver
684685
bool isLogicStdCell(const Instance* inst);
685686

686687
bool okToBufferNet(const Pin* driver_pin) const;
688+
bool checkAndMarkVTSwappable(Instance* inst,
689+
std::unordered_set<Instance*>& notSwappable,
690+
LibertyCell*& best_lib_cell);
687691

688692
////////////////////////////////////////////////////////////////
689693
// Jounalling support for checkpointing and backing out changes

0 commit comments

Comments
 (0)