rsz: Convert buffering to fixed-point delays#7648
Conversation
|
Secure CI came back green but on public CI this raised a few repair failures similar to The-OpenROAD-Project/OpenROAD-flow-scripts#3245. With @eder-matheus we have taken a look at one instance of this failure and we think we understand the cause due to a bug in GRT. I think we should wait on the GRT fix before merging this change. |
fa71412 to
103bc49
Compare
|
clang-tidy review says "All clean, LGTM! 👍" |
The prospective fix: #7650 |
|
clang-tidy review says "All clean, LGTM! 👍" |
|
Public CI on designs is down to a fixable EQY failure, this is ready to merge pending review |
|
Are you fixing the "fixable EQY failure"? |
|
Yes, I'll open a PR on the ORFS side |
|
Please explain how this conversion fixes the issue you mentioned. Its is helpful to give more explanation for a larger PR. |
|
I think this PR is easier to review going per commits. The main change is in the first commit, and the changes to Rebuffer.cc from the first commit can be ignored since the file gets replaced with Rebuffer2.cc later in the commit sequence. I can rewrite the git history to get rid of these extra changes and to make it more readable if requested.
The issue is caused by rounding errors putting the algorithm in an inconsistent state. By using fixed-point delay and slack values this is mostly avoided. Inconsistencies might still be introduced by way of the gate delay calculator but it's unclear it's an issue in practice and there are ways we could fix it. More elaborate explanation: Area recovery is tasked with building up a buffer tree which is no worse in timing than the current candidate tree. To that effect it assigns timing thresholds to each node of a Steiner tree, and then it enumerates buffer tree options requiring the local thresholds to have been met. Since the thresholds were assigned based on an existing candidate tree (with some relaxation applied) we are in principle guaranteed at least one viable solution. Due to rounding errors the enumeration process can fail coming up with no viable solution. The slacks and delays can be one or two orders of magnitude apart, this makes it challenging to come up with a good tolerance scheme to prevent failures due to rounding errors. |
Signed-off-by: Martin Povišer <povik@cutebit.org>
Signed-off-by: Martin Povišer <povik@cutebit.org>
Signed-off-by: Martin Povišer <povik@cutebit.org>
This tests functionality not exercised in the flow, and which doesn't work at the moment. We can revert once this works again. Signed-off-by: Martin Povišer <povik@cutebit.org>
Use exact comparison to fix repair_setup6 which sets reduced RC values. Signed-off-by: Martin Povišer <povik@cutebit.org>
Signed-off-by: Martin Povišer <povik@cutebit.org>
Signed-off-by: Martin Povišer <povik@cutebit.org>
Signed-off-by: Martin Povišer <povik@cutebit.org>
27afcba to
3ec5f12
Compare
|
@maliberty I have introduced strong typing for the fixed-point delays and rewrote the git history to aid review |
|
clang-tidy review says "All clean, LGTM! 👍" |
This is to address
and errors of this form
Also integrate Rebuffer2 into repair_timing. We can retire the former content of
Rebuffer.ccand moveRebuffer2.ccinto its place.