Skip to content

analog M4b-q: the dynamic comparator with the devices charge and the body effect at 27 C, so its decision-time row is computed, not 98 times too fast #11312

Closed as not planned

Description

@gHashTag

Part of the analog epic (see #10486). The one FAIL left in the acceptance evaluator (specs/analog/accept_sar.t27, 6 PASS, 1 FAIL, 6 NOT MODELLED of 13 after #11288) is the dynamic comparator's decision time: the PSP103-table comparator (specs/analog/sar_comparator_psp.t27) is a NO-CHARGE model, the devices' own capacitance is not in it, so it decides about 98 times too fast against ngspice (5.35 ps against 523 ps at +2 mV, 50 C; 5.12 ps on the 27 C tables) and fails the report's 10 ps lower limit.

Everything needed for a 27 C slice (the report's temperature) is now on master: the tt log current tables (#11146), the drain and gate charge tables of tt (M3c, #10893, #11123; the gate charge read by the gate-node circuit of M3c-3), and the source-to-bulk axis of tt (M3e, #11288), which the input pair needs (its sources sit on the tail node, not on the bulk).

Only .t27 (skill only-t27); decks under specs/analog/decks/.

Requirements

  • FR-001: The comparator's multi-node Newton step (sar_comparator.t27 _np forms, reused, not copied) MUST take the devices' charge from the tt charge tables, the same backward Euler charge step the 500 fF inverter uses (M3c), at 27 C.
  • FR-002: The devices whose source is not at their bulk MUST read the current through the Vsb axis of analog M3e: a source-to-bulk axis on the PSP103 log tables, so the tgate Ron with its bulks on the rails is within 0.09 percent of ngspice #11288.
  • FR-003: The decision time at +2 mV and -2 mV (and the report's other comparator rows the model can then compute) MUST be checked against our own ngspice-47 run of the same comparator at 27 C on the reference host (container jobs, at most 6 of its 12 cores, removed afterwards); the gap is printed in percent.
  • FR-004: accept_sar.t27's dynamic_comparator rows are recomputed from this model; a row turns PASS only within the report's limit AND within 10 % of ngspice; a negative control (charge removed) must still FAIL.

User Scenarios

  • Given +2 mV at the inputs, when the comparator with charge runs on the 27 C tables, then its decision time is printed next to ngspice's with the gap.
  • Given the charge removed, when the same run is judged, then the decision-time row FAILs as today.

Boundary

  • specs/analog/sar_comparator.t27
  • specs/analog/sar_comparator_psp.t27
  • specs/analog/accept_sar.t27
  • specs/analog/decks/
  • docs/analog/

Success Criteria

  • t27c test-report on every changed spec prints FAIL 0 and vacuous passes 0
  • the decision time at +2 mV is within 10 % of ngspice at 27 C, or the gap is written as measured and the row stays FAIL
  • the dynamic_comparator block is PASS, or the reason it is not is written in accept_sar.t27's header

🤖 Generated with Claude Code

Activity

  1. added
    shape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it
    on Oct 20, 2026
  2. github-actions commented on Oct 20, 2026

    @github-actions
    Contributor

    Closed by the issue-shape gate (specs/policy/issue_shape.t27, #7498): an issue must have the template's sections. Edit the body; an edit that passes reopens it.

    • missing: ## Success Criteria -- an outcome a machine can settle: a number with a unit, a backticked file, exit 0, or a backticked command
  3. added 2 commits that reference this issue on Oct 20, 2026
    5fe12b6
    100c973
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

    shape-refusedClosed by the issue-shape gate (specs/policy/issue_shape.t27); a passing edit reopens it

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions