Skip to content

extresist converts coupling capacitance to substrate capacitance and can double-count preserved coupling caps #550

Description

@LegumeEmittingDiode

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

A --- C --- B

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:

  1. If either endpoint is killed, the original coupling capacitor disappears, while its value has already been converted into grounded capacitance on both endpoint networks.

  2. 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

cap "A" "B" 5.0

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions