gf180 opamp: three cell fixes (phantom netlist node, comp fill outside the implant, floating output well) - #115
Merged
Conversation
TOP1 and BOT1 met at a node of their own, `V1`. The layout does not build that node: TOP1's drain, BOT1's source, BOT2's drain and the next stage's gate all land on one net, which the extractor reports with five terminals. That net is VOUT. This is the cell's structure, not a stray overlap. The two halves are joined by more than one path -- deleting the whole strip where their rails run over each other still leaves them on the same net, while an accidental short is one contact and cutting it separates the nodes. VSS2, the counterpart node, already matches this netlist on all three terminals.
The fill between multipliers is routed between ports that sit on the implant layer, so at their own width its top and bottom edges come out level with the implant's rather than inside it: 0.01um of enclosure where PP.5b and PP.5dii ask for 0.16. Insetting the fill by the implant enclosure puts it where the real comp is. Verified on gf180: differential_to_single_ended_converter goes from 8 DRC violations to 4 (the four PP.5di), and the opamp from 126 to 118 (four PP.5b and four PP.5dii).
__connect_cs_netlist declares B = S = VSS and its comment assumes the welltie ring already delivers that. Extraction says otherwise: the output pfets come out with their bulk on a net of its own, separate from VDD, and the 200um dummy with them. A floating well. The ring abuts the device and both ports are met2, so the tie is a straight run. DRC is unchanged; LVS on the opamp goes from 16 mismatches to 8.
msaligane
approved these changes
Aug 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three cell fixes on the gf180 opamp path, split out of #110. They are independent of each other, of that PR's other half, and of every other open PR — this branch is
mainplus these three commits.diff_to_single's netlist declares a node the layout does not build. TOP1 and BOT1 met at a privateV1. The layout puts TOP1's drain, BOT1's source, BOT2's drain and the next stage's gate on one net, which the extractor reports with five terminals — that net is VOUT. It is the cell's structure, not a stray overlap: the two halves are joined by more than one path, and deleting the whole strip where their rails cross still leaves them on the same net. VSS2, the counterpart node, already matched the netlist on all three terminals.The comp fill between multipliers falls outside the implant. It is routed between ports that sit on the implant layer, so at their own width its edges come out level with the implant's instead of inside it: 0.01um of enclosure where PP.5b and PP.5dii ask for 0.16. Insetting the fill by the implant enclosure puts it where the real comp is.
The output stage's well is floating.
__connect_cs_netlistdeclares B = S = VSS and its comment assumes the welltie ring already delivers that; extraction puts the output pfets' bulk on a net of its own, separate from VDD, along with the 200um dummy. The ring abuts the device and both ports are met2, so the tie is a straight run.Measured
Built on gdstk with #102 and #104 applied (the gdsfactory backend cannot build these cells here), DRC via the gf180 klayout deck,
mim_option=B, metal_level=5LM:differential_to_single_ended_converterDF.14_3.3Vx4,PP.5dix4DF.14_3.3Vx4opampM1.2ax60,M2.2ax37,M3.2ax15,M4.2ax6,PP.5bx4,PP.5diix4Both remaining sets are untouched by these fixes:
DF.14and theM*.2aspacing family are separate problems.The netlist change shows up in both cells:
The well tie took opamp LVS from 16 mismatches to 8 when it was measured on the earlier branch.
On #110
Closing it in favour of this. Its two commits have both been overtaken:
mainnow routes the array withvglayer="met5", hglayer="met4", andcapmeton gf180 resolves to exactly that (capmettop(81,0) -> met5,capmetbottom(46,0) -> met4), so the hardcoded layers already agree with the PDK rule;@msaligane — this is the answer to the conflict requests on #110: there is no conflict to resolve there, the PR simply no longer applies. These three fixes were the part still worth having.