Open yuhan-icb opened 8 months ago
First of all, your example cannot be run in OpenSTA because it uses a DEF netlist. I needs to use verilog, which you can get in openroad with the write_verilog command.
There is no function isConnect. The function you are referring to is Network::isConnected. In your example the coupling capacitor is between two different nets, which are NOT connected. So isConnected returns false, as it should and creates a ConcreteCouplingCapExtNode device which is correct.
ConcreteCouplingCapIntNode represents a coupling capacitor between two subnodes in the same net, which is not the case in your SPEF.
This repository is a fork of the OpenSTA repo that is not monitored by the author of OpenSTA. Use https://github.com/parallaxsw/OpenSTA.git to post issues in the future.
Summary
In openSTA, we found three data structures about coupling cap. There are
ConcreteCouplingCapInt
,ConcreteCouplingCapExtNode
andConcreteCouplingCapExtPin
. And theConcreteCouplingCapInt
is Node to Node, the remaining ones are Node to Ground. But if we want to construct aConcreteCouplingCapInt
, we need to check whether the two netsisConnect
. The question is, isn't the coupling cap supposed to appear between two different (unconnected) nets? Does the functionisConnect
have a semantic error?Detail
We test on a small case, like:![image](https://github.com/The-OpenROAD-Project/OpenSTA/assets/122420742/0e8c536e-b5a3-4ea7-b3ad-2a02fb98bc8f)
The coupling cap is between b0z(11:1) and b1z(14:1), like:
We are using GDB to trace debug the
We found that
And in the function
The
OpenSTA checks if
findParasiticNode
withinmakeCouplingCap
:node1
isnullptr
:findParasiticNode
,we found there is a functionisConnect
:net
andnet_
's value is below:net
andnet_
are connected. If it's true, then give a node return. We think if two nets aren't connected, it should give a node return to construct aConcreteCouplingCapInt
. So we are confused about the meaning of the functionisConnect
.Data
The test case is below: example.tar.gz