The-OpenROAD-Project / OpenSTA

OpenSTA engine
GNU General Public License v3.0
386 stars 167 forks source link

Questions about Coupling Cap in openSTA #201

Open yuhan-icb opened 8 months ago

yuhan-icb commented 8 months ago

Summary

In openSTA, we found three data structures about coupling cap. There are ConcreteCouplingCapInt,ConcreteCouplingCapExtNode and ConcreteCouplingCapExtPin. And the ConcreteCouplingCapInt is Node to Node, the remaining ones are Node to Ground. But if we want to construct a ConcreteCouplingCapInt, we need to check whether the two nets isConnect. The question is, isn't the coupling cap supposed to appear between two different (unconnected) nets? Does the function isConnect have a semantic error?

Detail

We test on a small case, like: image

The coupling cap is between b0z(11:1) and b1z(14:1), like: image image We are using GDB to trace debug the findParasiticNode within makeCouplingCap: image We found that node1 is nullptr: image And in the function findParasiticNode,we found there is a function isConnect: image The net and net_'s value is below: image OpenSTA checks if net and net_ 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 a ConcreteCouplingCapInt. So we are confused about the meaning of the function isConnect.

Data

The test case is below: example.tar.gz

jjcherry56 commented 5 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.