ant: Supports LEF58_ANTENNAGATEPLUSDIFF rule in ant and odb#10029
ant: Supports LEF58_ANTENNAGATEPLUSDIFF rule in ant and odb#10029QuantamHD wants to merge 3 commits intoThe-OpenROAD-Project:masterfrom
Conversation
Updated antenna checker to account for this lef property.
Factor if LEF58_ANTENNAGATEPLUSDIFF is present
PAR = {(cutFactor * cut) * diffReducePWL(diff) - (minusDiffFactor * diff)} /
{gatePWL(gate) + plusDiffProtect(diff)}
Updates schema and other properties to account for this rule.
ANTENNAGATEPLUSDIFF {OXIDE1 | OXIDE2 }
{plusDiffFactor |
PWL ((diffArea_1 plusDiffProtect_1) (diffArea_1 plusDiffProtect_2) ...)}
Technically this is supposed to support up to 32 different oxides, but
the code as is hard codes it to 2 so I'm leaving that here.
Signed-off-by: Ethan Mahintorabi <ethanmoon@google.com>
There was a problem hiding this comment.
Code Review
This pull request implements support for LEF 5.8 ANTENNAGATEPLUSDIFF properties, enabling Piece-Wise Linear (PWL) definitions and oxide-specific antenna rules. Key changes include updating the AntennaChecker to incorporate PWL factors into PAR and PSR calculations, expanding the odb database schema to store ARuleRatio for gate plus diff values, and implementing a more robust parser in lefin to handle the new syntax. Feedback identifies several opportunities to reduce code duplication by extracting logic for protection factor calculation, property parsing, and antenna rule retrieval into shared helper functions to improve maintainability.
Signed-off-by: Ethan Mahintorabi <ethanmoon@google.com>
Signed-off-by: Ethan Mahintorabi <ethanmoon@google.com>
|
clang-tidy review says "All clean, LGTM! 👍" |
|
@maliberty looks like the CI might have a problem. The email step is failing |
known, @vvbandeira is looking at it |
| info.diff_PSR | ||
| = (side_metal_factor * info.side_area * diff_metal_reduce_factor) | ||
| / info.iterm_gate_area; |
There was a problem hiding this comment.
@luis201420 I left it out from this PR, but it's not clear to me that if info.iterm_diff_area == 0 if we should attempt to do the PWL lookup and add it to info.iterm_gate_area. I noticed in all of our PDKs it would evaluate to 0 anyways, but again not clear if that should be included here as well
Summary
This was mostly about me trying to use AntiGravity to see how well it could implement an unsupported LEF property in our PDK. It worked reasonably well. It needed some guiding, and my knowledge of the code did help.
Updated antenna checker to account for this lef property.
How par is calculated if LEF58_ANTENNAGATEPLUSDIFF is present
Updates schema and other properties to account for this rule.
ANTENNAGATEPLUSDIFF {OXIDE1 | OXIDE2 }
{plusDiffFactor |
PWL ((diffArea_1 plusDiffProtect_1) (diffArea_1 plusDiffProtect_2) ...)}
Technically this is supposed to support up to 32 different oxides, but the code as is hard codes it to 2 so I'm leaving that here.
Type of Change
Antenna check will now respect LEF58_ANTENNAGATEPLUSDIFF.
Impact
[How does this change the tool's behavior?]
Verification
./etc/Build.sh).