Skip to content
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

Questions about Coupling Cap in openSTA #201

Closed
yuhan-icb opened this issue Oct 12, 2023 · 2 comments
Closed

Questions about Coupling Cap in openSTA #201

yuhan-icb opened this issue Oct 12, 2023 · 2 comments

Comments

@yuhan-icb
Copy link

yuhan-icb commented Oct 12, 2023

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
Copy link
Contributor

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.

@maliberty
Copy link
Member

Issues or PRs should be filed with https://github.com/parallaxsw/OpenSTA if still relevant. This is effectively a fork (though not strictly for historical reasons).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants