Absence of layer as VIA in net tracing tool

When defining the connectivity of layers in the dialog ( Tools -> Trace Net -> Layer Stack ) I'm missing a inversion operator. In a default case a stack of 'metal2', 'via2', 'metal3' creates a connection from one layer to another. However, for a special MIM capacitor option this connectivity of 'metal2' to 'metal3' via a 'via2' is blocked if a certain layer 'capm' is present.

With the current check on the *presence* of a via layer, I can't model it correctly, but if the *absence* of a certain layer can be defined as a via, it could be solved like:

Conductor1, Optional Via, Conductor2
====================================
metal2 , NOT(capm) , via2
capm , <none> , via2
via2 , <none> , metal3

My feature request is therefore the following: is is possible to add the absence of a layer as via?

Comments

  • edited 3:11PM

    Hi Peter,

    you're right, there currently is no such option. I agree that it would be very useful and in fact the request is not a new one.

    However, it's not straightforward to implement, because the net tracer uses a incremental scheme. That means that it incrementally adds shapes to the net by doing local lookup on shapes already added to the net. That approach is quite useful when extracting small nets from large layouts. Looking for "nothing" is something fundamentally different. For the positive case, a single overlap defines a connection and the incremental scheme works. For the negative case, it is necessary to lump together all shapes of a conductive patch on one layer before the decision can be made whether there is a connection to another layer or not.

    The only solution I have at hand right now is to perform the boolean operations by hand (using Edit->Layer->Boolean) and run the net tracer on that result. However, that is limited to small layouts currently.

    I'll keep looking for a "real" implementation.

    Best regards,

    Matthias

  • edited February 2012
    Hello Matthias,

    I see a subtle difference here. Most likely is is indeed easier to look for "something". This "something" would be the via layer, but excluding the vias shapes which have a certain block layer below them. Maybe it more handy to define a block layer like this:


    Conductor1, Optional Via, Optional Block, Conductor2
    ===================================================
    ____metal2, ________via2, __________capm, ___metal3
    _____capm, ________via2, _________<none>, ___metal3


    The strange thing with this capm mask is that is actually used twice in the process: first to deposit high-k dielectric, secondly to add a similar shaped upper conductor on top. The via2 layer connect metal3 either to metal2 or to capm. Using the above mentioned two lines of logic would satisfy my request, and is possible easier to implement?

    The search algorithm which is scanning the via shapes has now to detect if any block shape is completely covering it: in that case the via is not a conductor to metal2 but to the capm layer.

    Hope the explanation is clear,

    Peter Scholtens
  • edited 3:11PM

    Hi Peter,

    yes you're right. Under the assumption that there is "something" completely blocking the vias (or conductive shapes) the algorithm is much easier to implement. That could be a useful although less generic approach.

    I am still hoping to find a solution that implements a true boolean semantics because that would be really useful for example to separate source and drain regions for a CMOS transistor by subtracting the gate poly from active area or to sort out different well regions.

    I'll see what I can do.

    Best regards,

    Matthias

  • edited February 2012
    Hello Matthias,

    Given it a second thought, I think there are two fundamentally different requests here, not a distinction in less or more generic approach:

    Request 1) To enable an inverted layer as conductor option. Connection of another shape (via) to this inverted layer shape, connects this whole inverted layer shape as the same net.

    Request 2) To enable a blocking layer option, in case also a via ('enabling' layer) is given. This would only connect the first conducting layer to a second conducting layer over the area of the via layer provided that this (tiny) area is not covered with the block layer.

    If you implement (1) it still would not be possible to block the via's at two completely different nets. It would connect the block layer as conductor, and even create a path from one net to another...

    So, my request was to implement request 2, but I certainly agree request 1 is also an interesting option.

    Regards,

    Peter Scholtens
  • edited 3:11PM

    Hi Peter,

    after having a look at the code I am fairly confident that it should be possible to implement the usual booleans (AND, XOR, OR, NOT) for the conductor or via layers.

    That would include an "inverse layer" option using NOT, provided you have a boundary layer you can subtract the shapes from. Because of the flat nature of the processor however, that option is somewhat limited to small and medium-sized layouts.

    Best regards,

    Matthias

Sign In or Register to comment.