-
Notifications
You must be signed in to change notification settings - Fork 551
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Repair setup4 hier case 1 buffer #6048
base: master
Are you sure you want to change the base?
Repair setup4 hier case 1 buffer #6048
Conversation
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
…ck for max fanout limit to avoid split_load Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
Signed-off-by: andyfox-rushc <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
Signed-off-by: andyfox-rushc <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
Signed-off-by: andyfox-rushc <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
Matt, ready for review. This one just has split_loads and rebuffer support for hierarchy. |
Signed-off-by: andyfox-rushc <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
secure CI testing started |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
partial review
src/odb/src/db/dbModNet.cpp
Outdated
delete (obj->_name); | ||
obj->_name = strdup(new_name); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
free is the opposite of strdup not delete.
I also don't see a free call in dbModNet::destroy
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done.
Note the tbldestroy goes off and calls the destructor ~_dbModNet which inturn calls free on the name .
block->_modnet_tbl->destroy(_modnet);
src/odb/src/db/dbModNet.cpp
Outdated
// | ||
// Support for renaming hierarchical nets | ||
// | ||
void dbModNet::reName(const char* new_name) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rename is one word so no need a capital in reName.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
agreed, done
obj->_name = strdup(new_name); | ||
_dbBlock* block = (_dbBlock*) obj->getOwner(); | ||
_dbModule* parent = block->_module_tbl->getPtr(obj->_parent); | ||
parent->_modnet_hash[new_name] = obj->getOID(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You haven't removed the old name from the hash.
src/odb/src/db/dbJournal.cpp
Outdated
@@ -1618,6 +1634,7 @@ void dbJournal::undo_connectObject() | |||
dbITerm* iterm = dbITerm::getITerm(_block, iterm_id); | |||
uint net_id; | |||
_log.pop(net_id); | |||
// disconnects everything modnet and bnet) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
stray )
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Poor comment, cleaned up.
src/dbSta/src/dbNetwork.cc
Outdated
std::string port_name_str = moditerm->getName(); | ||
size_t last_idx = port_name_str.find_last_of('/'); | ||
if (last_idx != string::npos) { | ||
port_name_str = port_name_str.substr(last_idx + 1); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is this done by string manipulation? Is this different from getChildModBTerm()->getName()? Why does moditerm even need to store its name?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Agreed, I have put in the getChildModBTerm and remove the string manipulation.
I am sure not sure why but in the opensta both pins and port names are stored. So we do indeed store names in the modIterm and modBterm. I have updated the code and put in a comment about this in the dbSta/dbReadVerilog.cc. We can always get the ModBTerm for a modIterm using the getChildModBTerm api.
odb::dbNet* db_net = nullptr; | ||
odb::dbModNet* db_modnet = nullptr; | ||
db_network_->staToDb(net, db_net, db_modnet); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
What is the purpose? Nothing seems to use the results.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
redundant code, removed.
src/rsz/src/OdbCallBack.cc
Outdated
@@ -150,7 +150,11 @@ void OdbCallBack::inDbInstSwapMasterAfter(dbInst* inst) | |||
while (pin_iter->hasNext()) { | |||
Pin* pin = pin_iter->next(); | |||
Net* net = network_->net(pin); | |||
resizer_->parasiticsInvalid(net); | |||
// we can only update parasitics for low level net |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't follow the comment. There is only one dbNet attached to the pin.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Another poor comment I am afraid. Cleaned up to call the new flatNet api, so it is clear that the parasiticsInvalid is applied to the dbNet only
src/rsz/src/SteinerTree.cc
Outdated
odb::dbNet* db_net; | ||
odb::dbModNet* db_mod_net; | ||
db_network_->net(drvr_pin, db_net, db_mod_net); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This pattern repeats a lot. It seems better to just make an api like odb::dbNet* db_net = db_network_->flat_net(drvr_pin);
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good idea. I called the api flatNet. Two versions: one for net and one for pin.
src/rsz/src/RepairSetup.cc
Outdated
/*void | ||
writeVerilog(const char *filename, | ||
bool sort, | ||
bool include_pwr_gnd, | ||
sta::CellSeq *remove_cells, | ||
sta::Network *network); | ||
*/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
rm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yep, sorry some old debug code (was looking at verilog at various points in flow).
Signed-off-by: andyfox-rushc <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clang-tidy made some suggestions
@@ -132,6 +132,7 @@ class dbNetwork : public ConcreteNetwork | |||
|
|||
dbNet* staToDb(const Net* net) const; | |||
void staToDb(const Net* net, dbNet*& dnet, dbModNet*& modnet) const; | |||
dbNet* flatNet(const Net* pin) const; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
warning: function 'sta::dbNetwork::flatNet' has a definition with different parameter names [readability-inconsistent-declaration-parameter-name]
dbNet* flatNet(const Net* pin) const;
^
Additional context
src/dbSta/src/dbNetwork.cc:2198: the definition seen here
dbNet* dbNetwork::flatNet(const Net* net) const
^
src/dbSta/include/db_sta/dbNetwork.hh:134: differing parameters are named here: ('pin'), in definition: ('net')
dbNet* flatNet(const Net* pin) const;
^
Signed-off-by: andyfox-rushc <[email protected]>
Signed-off-by: andyfox-rushc <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
Signed-off-by: andyfox-rushc <[email protected]>
clang-tidy review says "All clean, LGTM! 👍" |
Changes to resizer to support hierarchy for rebuffer and split load operations only
New test cases: split_load_hier.tcl (shows split load across hierarchy with factoring of nets to minimize punch through), resize1_hier.tcl (shows rebuffering and resizing with hierarchical design).
Key changes:
This is a substantial change so marked as draft until Matt and I have gone through changes.