I'm getting 2x "0.00 slack (VIOLATED)" on hold ...
# openroad
k
I'm getting 2x "0.00 slack (VIOLATED)" on hold time (min) during spef extraction STA. That's the only violation and I keep getting this despite loosening the parameters. What does "0.00" violation mean?
v
what is your clock period?
k
"CLOCK_PERIOD" : 20, "FP_CORE_UTIL" : 40
Yes I tried 25 first still got one. Changed back to 20 and played with other parameters, now it passes clean. But what does 0.00 hold slack violation mean? Is it actually positive but rounded down in printf? In that case wouldn't it make sense to round up the reported slack to the displayed precision? Or is it a different kind of bug altogether?
d
@User Hold Slack 0.00 (VIOLATED) means Timing is exactly met the Hold specification. You can ignore this Warning. Clock period does not have impact on Hold timing , Only cell delay, output cell hold requirement and clock uncertainty , Clock skew impact the hold timing
k
True, clock has no effect on hold time, but I assumed if the setup time is met easier, the tool would have more freedom to insert buffers and fix the hold time violations. Is my assumption wrong?
d
Yes, Hold fix tool try to fix violation above 0.0. Some of the path may exactly met at slack 0.0 which will not be improved further. If you want to improve the Hold margin, one option is add additional hold margin using set_clock_uncertainty command. set_clock_uncertainty -rise_from [get_clocks {.. }] -rise_to [get_clocks {..}] -hold <Hold margin>
k
'SYNTH_CLOCK_UNCERTAINITY' was already set to "0.25" (default). Also it seems the OpenLane steps 1-3 issued
set_clock_uncertainty
with the correct value and clock net. Would including it in my sdc make any difference? I also see this in OpenLane configuration README: "SYNTH_CLOCK_UNCERTAINITY: Specifies a value for the clcok uncertainity in the pre-CTS stages" Does this mean it is discarded in the subsequent (post-CTS) stages?
v
@User if you're sure about timing constraints SYNTH_CLOCK_UNCERTAINITY can be updated as per your need in your config.tcl