dpl: negotiation dynamic window#10807
Conversation
stop every iteration on iterative mode, include stop on final state, introduce iterative_jump to stop at desired iteration Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…oves in grey, track current-iter movers Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…sites, print table similar to gpl with controled number of lines, less verbose, rename overflow to violations Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
this fix a debug visualization bug, also rename some functions for better clarity Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
include more debug info for stuck cells Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
make sure the window fits properly with valid rows, Y range is given by min between: (cell height * constantY), versus max y displacement X range is given by min between: max(constantX, cell width), versus max x displacement Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
include new debug messa for debuging window range Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…gotiation-dynamic-window Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…verbosity Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…t row only Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…d macros Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
…larity also Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
Signed-off-by: Augusto Berndt <augusto.berndt@precisioninno.com>
|
The diffs here should be more clear after #10681 is merged. |
There was a problem hiding this comment.
Code Review
This pull request enhances the detailed_placement command in OpenDP by introducing configurable search windows (-site_search_window, -row_search_window) and DRC penalties (-drc_penalty) for the NegotiationLegalizer. It also adds stuck-cell diagnostics, improves GUI debugging with a negotiation violations chart, and updates the observer to track current-iteration movers. Feedback is provided regarding a potential null pointer dereference when retrieving the master of an instance in Opendp::detailedPlacement, which should be guarded to prevent segmentation faults.
| for (odb::dbInst* inst : block_->getInsts()) { | ||
| odb::dbMaster* master = inst->getMaster(); | ||
| total_inst_area += static_cast<int64_t>(master->getWidth()) | ||
| * static_cast<int64_t>(master->getHeight()); | ||
| } |
There was a problem hiding this comment.
In the calculation of total_inst_area, inst->getMaster() is called and dereferenced directly without checking if it is nullptr. While instances in a placed design typically have a master, it is safer to add a null check to prevent potential segmentation faults in edge cases or during intermediate database states.
for (odb::dbInst* inst : block_->getInsts()) {
odb::dbMaster* master = inst->getMaster();
if (master != nullptr) {
total_inst_area += static_cast<int64_t>(master->getWidth())
* static_cast<int64_t>(master->getHeight());
}
}
Summary
Makes the Negotiation Legalizer search window range adaptive instead of fixed X and Y dimensions.
We apply two extensions:
Experiments showed far more problems on the Y direction with multi-height and hybrid row structures, requiring more extensions on such dimension.
Type of Change
Impact
This solves convergence issues Negotiation Legalizer was having with multi-height cells designs. We were getting search windows too small, and a few instances never moving.
Verification
./etc/Build.sh).Related Issues
This is one of multiple PRs splitting up PR #10226 to make Negotiation the default algorithm at DPL.
This is the last PR to solve all known issues with Negotiation Legalizer. After this one I expect only to make cosmetic modifications and actually switching to the new default.