Skip to content

Commit 4131d6c

Browse files
committed
Added a new mode period_padding.
Signed-off-by: Jaehyun Kim <[email protected]>
1 parent 9c88e25 commit 4131d6c

File tree

1 file changed

+41
-52
lines changed

1 file changed

+41
-52
lines changed

flow/util/genRuleFile.py

Lines changed: 41 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,26 @@ def gen_rule_file(
3737

3838
# Notes
3939
# - Apply tighter margin on timing__setup__ws than timing__setup__tns
40-
# because WNS is more important.
40+
# because WNS is more important than TNS.
4141
# - Apply the consistent margins on timing__setup__* and timing__hold__*
42-
# - 'min_max_period' is used for timing__setup__* and timing__hold__*
43-
# to give small margin based on clock period to avoid failures by
44-
# small violations.
42+
# - 'period_padding' mode is used for timing__setup__* and timing__hold__*
43+
# to give small margin based on clock period to avoid failures by small
44+
# violations.
4545

4646
# dict format
4747
# 'metric_name': {
48+
# 'mode': <str>, one of ['direct', 'sum_fixed', 'period', 'padding',
49+
# 'period_padding', 'abs_padding', 'metric']
4850
# 'padding': <float>, percentage of padding to use
4951
# 'fixed': <float>, sum this number instead of using % padding
5052
# 'round_value': <bool>, use the rounded value for the rule
53+
# 'compare': <str>, one of ['<', '>', '<=', '>=', '==', '!=']
54+
# 'metric': <str>, when mode is 'metric', use this metric to compute
55+
# the rule value
56+
# 'min_max': <function>, one of [min, max], optional
57+
# 'min_max_direct': <float>, optional
58+
# 'min_max_sum': <float>, optional
59+
# 'min_max_period': <float>, optional
5160
# }
5261

5362
rules_dict = {
@@ -99,34 +108,26 @@ def gen_rule_file(
99108
"compare": "<=",
100109
},
101110
"cts__timing__setup__ws": {
102-
"mode": "padding",
111+
"mode": "period_padding",
103112
"padding": 5,
104-
"min_max": min,
105-
"min_max_period": 5,
106113
"round_value": False,
107114
"compare": ">=",
108115
},
109116
"cts__timing__setup__tns": {
110-
"mode": "padding",
117+
"mode": "period_padding",
111118
"padding": 20,
112-
"min_max": min,
113-
"min_max_period": 5,
114119
"round_value": False,
115120
"compare": ">=",
116121
},
117122
"cts__timing__hold__ws": {
118-
"mode": "padding",
123+
"mode": "period_padding",
119124
"padding": 5,
120-
"min_max": min,
121-
"min_max_period": 5,
122125
"round_value": False,
123126
"compare": ">=",
124127
},
125128
"cts__timing__hold__tns": {
126-
"mode": "padding",
129+
"mode": "period_padding",
127130
"padding": 20,
128-
"min_max": min,
129-
"min_max_period": 5,
130131
"round_value": False,
131132
"compare": ">=",
132133
},
@@ -141,34 +142,26 @@ def gen_rule_file(
141142
"compare": "<=",
142143
},
143144
"globalroute__timing__setup__ws": {
144-
"mode": "padding",
145+
"mode": "period_padding",
145146
"padding": 5,
146-
"min_max": min,
147-
"min_max_period": 5,
148147
"round_value": False,
149148
"compare": ">=",
150149
},
151150
"globalroute__timing__setup__tns": {
152-
"mode": "padding",
151+
"mode": "period_padding",
153152
"padding": 20,
154-
"min_max": min,
155-
"min_max_period": 5,
156153
"round_value": False,
157154
"compare": ">=",
158155
},
159156
"globalroute__timing__hold__ws": {
160-
"mode": "padding",
157+
"mode": "period_padding",
161158
"padding": 5,
162-
"min_max": min,
163-
"min_max_period": 5,
164159
"round_value": False,
165160
"compare": ">=",
166161
},
167162
"globalroute__timing__hold__tns": {
168-
"mode": "padding",
163+
"mode": "period_padding",
169164
"padding": 20,
170-
"min_max": min,
171-
"min_max_period": 5,
172165
"round_value": False,
173166
"compare": ">=",
174167
},
@@ -199,67 +192,51 @@ def gen_rule_file(
199192
"compare": "<=",
200193
},
201194
"detailedroute__timing__setup__ws": {
202-
"mode": "padding",
195+
"mode": "period_padding",
203196
"padding": 5,
204-
"min_max": min,
205-
"min_max_period": 5,
206197
"round_value": False,
207198
"compare": ">=",
208199
},
209200
"detailedroute__timing__setup__tns": {
210-
"mode": "padding",
201+
"mode": "period_padding",
211202
"padding": 20,
212-
"min_max": min,
213-
"min_max_period": 5,
214203
"round_value": False,
215204
"compare": ">=",
216205
},
217206
"detailedroute__timing__hold__ws": {
218-
"mode": "padding",
207+
"mode": "period_padding",
219208
"padding": 5,
220-
"min_max": min,
221-
"min_max_period": 5,
222209
"round_value": False,
223210
"compare": ">=",
224211
},
225212
"detailedroute__timing__hold__tns": {
226-
"mode": "padding",
213+
"mode": "period_padding",
227214
"padding": 20,
228-
"min_max": min,
229-
"min_max_period": 5,
230215
"round_value": False,
231216
"compare": ">=",
232217
},
233218
# finish
234219
"finish__timing__setup__ws": {
235-
"mode": "padding",
220+
"mode": "period_padding",
236221
"padding": 5,
237-
"min_max": min,
238-
"min_max_period": 5,
239222
"round_value": False,
240223
"compare": ">=",
241224
},
242225
"finish__timing__setup__tns": {
243-
"mode": "padding",
226+
"mode": "period_padding",
244227
"padding": 20,
245-
"min_max": min,
246-
"min_max_period": 5,
247228
"round_value": False,
248229
"compare": ">=",
249230
},
250231
"finish__timing__hold__ws": {
251-
"mode": "padding",
232+
"mode": "period_padding",
252233
"padding": 5,
253-
"min_max": min,
254-
"min_max_period": 5,
255234
"round_value": False,
256235
"compare": ">=",
257236
},
258237
"finish__timing__hold__tns": {
259-
"mode": "padding",
238+
"mode": "period_padding",
260239
"padding": 20,
261-
"min_max": min,
262-
"min_max_period": 5,
263240
"round_value": False,
264241
"compare": ">=",
265242
},
@@ -323,6 +300,13 @@ def gen_rule_file(
323300
elif option["mode"] == "padding":
324301
rule_value = metrics[field] * (1 + option["padding"] / 100)
325302

303+
elif option["mode"] == "period_padding":
304+
negative_slack = min(metrics[field], 0)
305+
rule_value = negative_slack - max(
306+
negative_slack * option["padding"] / 100,
307+
period * option["padding"] / 100,
308+
)
309+
326310
elif option["mode"] == "abs_padding":
327311
rule_value = abs(metrics[field]) * (1 + option["padding"] / 100)
328312

@@ -494,6 +478,11 @@ def comma_separated_list(value):
494478
parser.print_help()
495479
sys.exit(1)
496480

481+
# jk: hack
482+
args.tighten = False
483+
args.failing = False
484+
args.update = True
485+
497486
gen_rule_file(
498487
args.rules,
499488
args.new_rules,

0 commit comments

Comments
 (0)