Skip to content

analog M3c-1: PSP103 drain and gate charge tables (tt, ss) and the 500 fF inverter against ngspice backward Euler #10880

Closed

Description

@gHashTag

Goal

The charge half of #10777 (M3c of #10486): the drain and gate charge of the IHP SG13G2 sg13_lv_nmos (W 1.0 um) and sg13_lv_pmos (W 3.0 um), L 0.45 um, as tables on the M3b grid (25 x 25 nodes of 62.5 mV over 0 .. 1.5 V) for the corners tt and ss, made from ngspice-47 and PSP103 (IHP-Open-PDK commit 21133f219b1a6da10d803e345761e77415ceff40, 27 C), and the table solver of M3a generalized to use them. Measured before this issue (M3b, PR #10778): the tt inverter at 500 fF and dt = 100 ps is 3.09 percent (tpLH) and 3.63 percent (tpHL) faster than ngspice backward Euler on the same grid, because a current-only table has no device capacitance.

This issue is the finished part of #10777; the weak-inversion read and the other corners stay there (see the issues it files).

Boundary

  • specs/analog/mos_psp103_data.t27
  • specs/analog/mos_psp103.t27
  • specs/analog/mos_table.t27
  • specs/analog/decks/psp103_q_tt.cir
  • specs/analog/decks/psp103_q_ss.cir
  • specs/analog/decks/psp103_inv_be_500f.cir

Scenarios

  • Given the tt drain-charge tables from ngspice+PSP103, when the inverter at 500 fF and dt = 100 ps runs the 400 steps of M3b, then tpLH and tpHL are within 1 percent of ngspice backward Euler on the same grid, and the three errors (arithmetic, table plus model, discretization) are reported apart.
  • Given the ss charge tables loaded into the tt run, when compared with ngspice tt backward Euler, then the check fails (negative control).
  • Given the charge tables, when their slopes at Vgs = 0.9 V, Vds = 0.75 V are compared with the capacitances ngspice reports at that operating point, then they agree within 1 percent.

Requirements

  • FR-001: Charge tables MUST name the PDK commit, the corner, W, L, the temperature and the grid, and MUST come from one ngspice deck run that also prints the current tables, byte for byte.
  • FR-002: A capacitance MUST be read off the same table as the charge it is the derivative of, as gm and gds are read off the table of Id.
  • FR-003: The reader MUST stay exact-integer and unsigned words, with no float on the board path, and the charge-aware solver MUST be the current-only solver with zero charge tables, not a copy of it.

Success Criteria

  • t27c test-report specs/analog/mos_psp103.t27 exits 0 with 0 vacuous passes, and the same for mos_table.t27 and mos_psp103_data.t27.
  • The tt inverter at 500 fF, dt = 100 ps: tpLH and tpHL within 1 percent of ngspice backward Euler on the same grid (was 3.09 percent and 3.63 percent); the tests hold 0.05 percent.
  • The ss charge tables in the tt run fail the check by at least 2.4 times its bound.
  • specs/analog/decks/psp103_q_tt.cir and specs/analog/decks/psp103_q_ss.cir regenerate the pasted arrays byte for byte.
  • python3 -I tools/dupe_scan.py reports 0 new duplicate bodies.

Part of #10777
Part of #10486

Activity

  1. added a commit that references this issue on Oct 19, 2026
    c948f4d
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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