Fix for OpenSTA issue 398 and OpenROAD issue 9454 with regression#401
Fix for OpenSTA issue 398 and OpenROAD issue 9454 with regression#401parallaxsw merged 5 commits intoparallaxsw:masterfrom
Conversation
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
| verilog_specify | ||
| verilog_write_escape | ||
| verilog_unconnected_dbterm | ||
| } |
There was a problem hiding this comment.
dbterm is ODB terminolgy, which is irrelevant here. use unconnected_hpin
test/verilog_unconnected_dbterm.tcl
Outdated
| @@ -0,0 +1,14 @@ | |||
| read_liberty ../examples/nangate45_typ.lib.gz | |||
There was a problem hiding this comment.
asap7_small.lib is a smaller library to use for simple tests
test/verilog_unconnected_dbterm.tcl
Outdated
| } else { | ||
| puts "b2/u3/Z is not connected to any net." | ||
| } | ||
| puts "Find internal net connected to b2/out2: [get_property [get_net b2/out2] full_name]" No newline at end of file |
There was a problem hiding this comment.
use get_full name like above instead of get_property
but both are overkill. easier to just use report_net to see the pin listed than all of this
printing/if logic
verilog/VerilogReader.cc
Outdated
| // Ensure pin exists (may have been pre-created), then connect to parent | ||
| // net if present. Always create a term for the child-side net. | ||
| Pin *pin = network_->findPin(inst, port); | ||
| if (pin == nullptr) |
There was a problem hiding this comment.
This cannot happen now that all of the pins are already made.
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
verilog/VerilogReader.cc
Outdated
| } | ||
| // Make all pins so timing arcs are built and get_pins finds them. | ||
| ConcreteCellPortBitIterator port_iter(reinterpret_cast<const ConcreteCell*>(cell)); | ||
| while (port_iter.hasNext()) { |
There was a problem hiding this comment.
I think this would be better off using Network::portBitIterator so there are no casts involved.
There was a problem hiding this comment.
Network::portBitIterator returns a heap-allocated CellPortBitIterator*, So I will have to use a delete on it later, would that be okay? (this is the pattern used in ConcreteNetwork::makePins)
Otherwise I can also use std::unique_ptr port_iter(network_->portBitIterator(cell))
Please let me know your preference. Thanks
There was a problem hiding this comment.
yes, you have to delete it either explicitly (like all the other network iterator calls you can find in OpenSTA) or use unique_ptr which I haven't adopted much because it makes the declaration lines sooooo wiiiiddddde.
There was a problem hiding this comment.
Gotcha! Done.
Signed-off-by: dsengupta0628 <dsengupta@precisioninno.com>
|
Did you resolve the openroad issues you mentioned in the issue? |
Yes- But only after I pulled all the OpenSTA changes into OpenROAD (that also needed some OpenROAD changes due to the string vector changes in StringUtil). After that OpenROAD issue w.r.t. this issue was resolved. |
Issue: #398
Instance b2 is of the type block2 which has a 2nd output pin "out2". Even if it is unconnected to any net in the top level (i.e. the "top" module), the pin b2/out2 should be still a valid object.
Potential fix per feedback in the issue.
So in
VerilogReader::makeModuleInstNetworkI just enhanced the existing code that was for liberty cells only to include non-liberty cells tooNeeded an updation in
VerilogReader::makeInstPinbecause we have already called makePin now even for non-liberty cells by the new change- so need to make sure we don't create duplicate here.Added a regression for the issue.