It looks like you're new here. If you want to get involved, click one of these buttons!
Suppose that I have a set of connect statements, for example:
connect(m1, via)
connect(via, m2)
connect(m2, via2)
connect(via2, m3)
connect(m3, via3)
connect(via3, m4)
connect(m4, via4)
connect(via4, m5)
How to select m1
shapes that are connected to m5
?
Comments
Hi @kareemfarid,
If you are only interested in m1 shapes being somehow connected to m5, the easiest way is not to use "connect", but to traverse interactions downwards from m5:
Matthias
Thanks @Matthias. Is there any other way to do so?. Assuming a larger connectivity stack, I would have to use a lot of interacting statements. I thought about using a
separation
withprops_eq
with a very large value, but probably this will have performance penalty.The number of interacting statements should the same than the "connect" statements. Why do you think you need a larger number?
Doing a separation with a large value isn't a good idea. That will definitely be very slow.
But I understood your requirement to identify all M1 that are in some way connected to M5. From your proposal I guess you actually want something else. Are you trying to build an antenna check?
Matthias
The test case above is a small example. I am trying to implement multiple checks that depends on same/different net. In addition to these, there are checks where one layer has to be connected to another. In the first case
connect
is particularly useful. I was wondering ifconnect
will be useful in the second case too. I guess I can duplicate the connect statements with similar interacting statement.Hi @kareemfarid,
maybe some example is helpful to demonstrate what you intend to do. The initial post was going in a different direction.
For same/different net separation, you need "connect" as only that enabled net annotation.
The usual application are DRC checks between same or different nets and antenna checks.
It is essentially possible to extract individual nets and analyze them on a per-polygon level. However, that will be pretty slow. Internally, the antenna checks do exactly that when they compute antenna ratios, but their loop executes in C++ much more efficiently.
Matthias
@Matthias I am implementing a couple of checks for sky130 PDK. Specifically:
and other similar rules that require "... connected to .." The connectivity can be established using the entire metal stack so I thought
connect
statements might be useful here, which I was going to use anyway forhv.poly.6a
and other similar same/different net checks.Like Matthias mentioned antenna_check computes the areas of the specified layers , which are connected, so if you set the ratio value to 0 then it should grab all shapes of the layer connected to those nets. Here's an example using antenna_check to find floating poly:
Thanks @blueman_44, that is smart
@kareemfarid - I think we are talking net classification here. Apparently the goal of the rule is to identify high voltage nets and demand a bigger spacing for those.
I don't have a good solution for this yet. I guess there is a missing feature to implement this efficiently. A kind of net tagging comes to mind.
Matthias