extresist appears to handle coupling capacitance in a way that is incompatible with full coupled-RC SPICE extraction.
In resis/ResReadExt.c, ResReadCapacitor() contains:
/*
* Coupling capacitors are added twice, moving the capacitance
* to the substrate.
*/
if (ResOptionsFlags & ResOpt_Signal)
{
node1->capacitance += MagAtof(argv[COUPLEVALUE]);
...
node2->capacitance += MagAtof(argv[COUPLEVALUE]);
return 0;
}
Thus an original coupling capacitor
is accounted for internally as
A --- C --- substrate
B --- C --- substrate
This may be useful as a grounded-capacitance approximation for timing or Elmore-delay calculations, but it is not electrically equivalent to the original coupling capacitor.
The issue becomes more problematic because ext2spice does not necessarily remove the original coupling capacitor.
When extresist replaces an original node completely with generated resistor-network nodes, it emits a killnode record. However, ResPrintExtNode() explicitly avoids killing the original node if one of the generated subnodes retains that name:
/*
* If any of the subnode names match the original node name, then
* we don't want to rip out that node with a "killnode" statement.
*/
Later, ext2spice suppresses an original coupling capacitor only when one of its endpoints has been marked EF_KILLED:
if (n1->efnode_flags & EF_KILLED)
return 0;
...
if (n2->efnode_flags & EF_KILLED)
return 0;
This produces two different failure modes:
-
If either endpoint is killed, the original coupling capacitor disappears, while its value has already been converted into grounded capacitance on both endpoint networks.
-
If neither endpoint is killed, the original A-B coupling capacitor remains, while the same capacitance has also contributed to grounded capacitance on both endpoint networks. In this case the parasitic is double-counted.
Expected behavior
For coupled-RC SPICE extraction:
- genuine substrate capacitance should be distributed over the generated resistor network;
- coupling capacitance should remain between its original pair of coupled nets;
- coupling capacitance should not also be converted into grounded capacitance.
Suggested fix
extresist should keep substrate capacitance and coupling capacitance separate.
For an original coupling record such as
the RC result should preserve a 5 fF capacitor between the original A and B networks.
It does not need to spatially redistribute that coupling capacitance; preserving the original endpoint pair is sufficient to retain the correct topology and total capacitance.
Only genuine substrate capacitance should be distributed over the generated rnode network.
If the existing coupling-to-ground approximation is needed for timing or Elmore-delay analysis, it could remain available as a separate mode.
extresistappears to handle coupling capacitance in a way that is incompatible with full coupled-RC SPICE extraction.In
resis/ResReadExt.c,ResReadCapacitor()contains:Thus an original coupling capacitor
is accounted for internally as
This may be useful as a grounded-capacitance approximation for timing or Elmore-delay calculations, but it is not electrically equivalent to the original coupling capacitor.
The issue becomes more problematic because
ext2spicedoes not necessarily remove the original coupling capacitor.When
extresistreplaces an original node completely with generated resistor-network nodes, it emits akillnoderecord. However,ResPrintExtNode()explicitly avoids killing the original node if one of the generated subnodes retains that name:Later,
ext2spicesuppresses an original coupling capacitor only when one of its endpoints has been markedEF_KILLED:This produces two different failure modes:
If either endpoint is killed, the original coupling capacitor disappears, while its value has already been converted into grounded capacitance on both endpoint networks.
If neither endpoint is killed, the original A-B coupling capacitor remains, while the same capacitance has also contributed to grounded capacitance on both endpoint networks. In this case the parasitic is double-counted.
Expected behavior
For coupled-RC SPICE extraction:
Suggested fix
extresistshould keep substrate capacitance and coupling capacitance separate.For an original coupling record such as
the RC result should preserve a 5 fF capacitor between the original
AandBnetworks.It does not need to spatially redistribute that coupling capacitance; preserving the original endpoint pair is sufficient to retain the correct topology and total capacitance.
Only genuine substrate capacitance should be distributed over the generated
rnodenetwork.If the existing coupling-to-ground approximation is needed for timing or Elmore-delay analysis, it could remain available as a separate mode.