I have a layout of power MOSFET chip. It has single metal layer.
To perform some checks on the layout design, I want to create a 'negative' of the metal layer.
Is there a way to do it using SKILL function?
You could use dbLayerAndNot or use the Tools->Layer Generation in the layout editor to do the same thing. You can't just do a not because you need an outer bound of the inverse layer you're producing, but you could create a rectangle with the bBox of the cellView on a temporary layer, and then do the and not relative to that (i.e. with that layer as the first layer).
I tried out Tools->Layer Generation, and used a temporary layer to create a rectangle.
But for some reason the resulting layer after 'And Not' was not perfect. In some regions on the chip, it also showed up where metal was present!
Couple more points I'd like to share:
(a) I made sure that my design was flattened before performing 'And Not'.
(b) When I observe carefully, I see that the metal layer is flattened but not 'merged'. There are thousands of metal rectangles - side by side, and some are overlapping. I wonder if this is causing the issue.
Apparently, L-edit software has a separate button to 'merge' all rectangles, which merges and creates just a few 'pieces' (if I may say so) of metal.
So I tried to 'merge' all the metal rectangles (Virtuoso). But the merge operation fails to do the merging.
Response from Cadence Support is: "I believe the difficulty in using this method is that there is a limit to the geometries the software will actually merge. "
Alternate question would be: Can SKILL command succeed at merging, when the manual way of using merge function failed?
Or, any other approach that I can attempt?
If you're already interacting with customer support on this, I won't repeat work that is going on elsewhere. However, I don't believe the fact that the shapes are not merged would be a problem here. Similarly, the output of dbLayerAndNot and the same functionality within the layout editor will also end up segmented into pieces because there's a maximum number of points in each polygon in Virtuoso (strictly speaking the database doesn't have a limit, but Virtuoso generally does not create shapes with more than 4000 points per polygon and splits into pieces to achieve this).
I'd be quite surprised if there is a general flaw here as the layer manipulation functionality has been there for many, many years and originates from a physical verification tool where this is the bread and butter of physical verification. Hopefully you can iron that out with customer support. I've certainly not come across this before.
We also have the abeLayer functions (e.g. abeLayerAndNot) from the Advanced Boolean Engine and these do not require the layout to be flattened first - so they may be worth a try. However, they are limited to orthogonal data (the dbLayer functions are not limited in this way).
Anyway, I would suggest to continue working with customer support to show them an example of where this is not working for you so that we can understand and resolve your issue.