-
Notifications
You must be signed in to change notification settings - Fork 206
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
Flat LVS OK and deep failing #1813
Comments
Hi Staf, that is a classic one. The following happens: The substrate is created as a large layer through "extent":
later, the body connections for the NMOS devices are made to this layer through the "W" target (which is essentially a "connect" of the device pin shapes to the
Now, when you extract in deep mode, the substrate layer is flat, because
So eventually you make a connection of devices inside the hierarchy (NMOS) to a flat layer upwards in the hierarchy. This creates pins as one can see here: With these pins, the About the solutionsThe first solution is to use a local "extent" for every cell - this creates a local boundary in every cell. However, the "sized" operation will spoil that again, because it merges. I do not really see the need for the size as it only participates in connect statements and everything relevant is included in "extent" already - even without "sized":
A better solution IMHO however is to use a global net. This reflects the physical nature of a (non-SOI) substrate which is "below everything" - i.e. also connecting islands inside nwell rings with the outside. To implement this, you need to substitute "substrate__Sky130" by a global net. Here is my patch for deep mode LVS:
With this patch, the LVS also passes in deep mode. Matthias |
Thanks @klayoutmatthias for prompt and good support. |
Hi Staf, Of course, please feel free to raise questions :) Actually, the name of the global net is just an identifier. You can basically create multiple global nets, and the identifier tells which one to use. You could even use "VSS", but I'd not advise to do so. KLayout does not consider nets with the same name connected by default, so you may get two nets with the same name. "PSUB" or anything like that is a better choice for the global net. As you connect "VSS" physically to the "PSUB" substrate (ties included, very good :) ), the net names will be joined and the result is a new name like "VSS,PSUB". KLayout LVS (mostly) does not care about net names, so it will happily match this net to "VSS" from the schematic. Best regards, Matthias |
I do think it is clear now how to fix this so closing this issue. |
Need some help to change a LVS deck to be compatible with hierarchical LVS checking.
In testcase_deep.zip you can find the testcase I made for this case.
When I run
lvs_Sky130
in the directory I get the following:I zipped the directory with the output files of the runs included.
This is a LVS deck automatically generated. Similar LVS decks are generated for all PDKs I support in project Arrakeen (see FSiC2024) and thus complementary to the upstream PDK ones.
The text was updated successfully, but these errors were encountered: