diff --git a/.trinity/seals/analog_AnalogMosPsp103.json b/.trinity/seals/analog_AnalogMosPsp103.json index d265286ba3..6f2237d0a8 100644 --- a/.trinity/seals/analog_AnalogMosPsp103.json +++ b/.trinity/seals/analog_AnalogMosPsp103.json @@ -1,5 +1,5 @@ { - "built_by": "t27c-bootstrap@0.5.2+ea35d9b72", + "built_by": "t27c-bootstrap@0.5.2+42a4860c4", "closure": [ { "spec": "specs/analog/linear.t27", @@ -7,31 +7,35 @@ }, { "spec": "specs/analog/mos_psp103_data.t27", - "spec_hash": "sha256:be100dec66ee80de6cf520f79038e7668bc1171102db1fefe6a4c74559d029de" + "spec_hash": "sha256:c3d11a64e1fb2eddb7724acb75bcf7c242551a683a7d265a7cdd0d208c8d4d7b" }, { "spec": "specs/analog/mos_table.t27", "spec_hash": "sha256:16d28f10fa8663926dddb4bcced981cdc4cd8f38a6b748e4b7688f2e56bbab6c" + }, + { + "spec": "specs/analog/sar_comparator.t27", + "spec_hash": "sha256:db347ab1845e5323822b3ab77ba3d43b9923d105cc717e7224ad54c7328d23a7" } ], "config": "gen=c,rust,verilog,zig;tests=zig", - "gen_hash_c": "sha256:a5aeefd7abe3aee47919f32153161040121a31fba6fbfc6e3517fe1796191a8a", - "gen_hash_rust": "sha256:0660934f0f63c77f8b204796f1c8e3f5db1d35603797d7ddf912f66a2039d4a2", - "gen_hash_verilog": "sha256:06e55f455e71a7b274d2b8e766028a05ec666c1814b4ed64f8e7ad381706e61e", - "gen_hash_zig": "sha256:460548424dd136ec773917ebc3dd3c6ad31561cbde36cabf8a69266c2e8c7b6c", + "gen_hash_c": "sha256:69fd7266d0521ec8d562ada8c030435202a0d2224d474dc5c5a9fc491000df19", + "gen_hash_rust": "sha256:745bf1988b0cb964b0196d6ea22d468bf839236585dd64e82d92ea70630e9e7b", + "gen_hash_verilog": "sha256:83361d5ce963f001d2afb09ca4d82d7dbf14caa8beecb7c6f5e3f67ac7cb8bc5", + "gen_hash_zig": "sha256:1b08ed9b9f43e9567fbfd414e308b40c86570febae56f72d7161f3d3b15d8704", "module": "AnalogMosPsp103", "ring": 12, "seal_schema": 2, - "sealed_at": "2026-10-19T05:34:01Z", + "sealed_at": "2026-10-19T18:09:16Z", "sealed_by": "t27c-bootstrap@0.5.2", - "spec_hash": "sha256:811617266484683542dd1723db77687ad7fdf7f5a665953f5e6a920a7bdf0118", + "spec_hash": "sha256:d178addc19558d26f503d3f5493e9815fa534209fb14169244b0b439c431b2a9", "spec_path": "specs/analog/mos_psp103.t27", "tests": { "failed": 0, "failing": [], "forced": false, - "passed": 17, - "total": 17, + "passed": 25, + "total": 25, "vacuous": 0 }, "toolchain": { diff --git a/.trinity/seals/analog_AnalogMosPsp103Data.json b/.trinity/seals/analog_AnalogMosPsp103Data.json index 4baab12c5a..c2e691e690 100644 --- a/.trinity/seals/analog_AnalogMosPsp103Data.json +++ b/.trinity/seals/analog_AnalogMosPsp103Data.json @@ -1,5 +1,5 @@ { - "built_by": "t27c-bootstrap@0.5.2+0fba674ef", + "built_by": "t27c-bootstrap@0.5.2+42a4860c4", "closure": [ { "spec": "specs/analog/linear.t27", @@ -7,23 +7,23 @@ } ], "config": "gen=c,rust,verilog,zig;tests=zig", - "gen_hash_c": "sha256:c1bef3a23c202f04a424fa9647be515f0a73b0570f564b2034dc0f7ced6a3286", - "gen_hash_rust": "sha256:e79aeca5c088b28ba70f75c7db22b193450cb7436f9dc188b24149457d09797d", - "gen_hash_verilog": "sha256:913b5632ebb861ca2f1753a2c062ad6177792cdae769c0c41912b2dc3afe29a1", - "gen_hash_zig": "sha256:37dc8408fe41cf9c5774624a1c0de61ce288b322eb5d777d841a10bd653768a4", + "gen_hash_c": "sha256:9e8e5b97faba8e2120066681472986c2b70b5207fb9f26c57a38f527f531c576", + "gen_hash_rust": "sha256:715acf0a48c1f1ba88df704ffc3a48ab3190d65a4282270bb2976a57c1450954", + "gen_hash_verilog": "sha256:f6f05bdafbac3e28a73cc54412ed776429b0ef7ce1c08219fa7dfabc2c98ebdd", + "gen_hash_zig": "sha256:9a77f32c1a9ee683b89349a0d2e87d166a1a3a8154663dfdb79053c0d11895eb", "module": "AnalogMosPsp103Data", "ring": 12, "seal_schema": 2, - "sealed_at": "2026-10-19T16:29:24Z", + "sealed_at": "2026-10-19T18:09:24Z", "sealed_by": "t27c-bootstrap@0.5.2", - "spec_hash": "sha256:3936594d2ab220f06b2d636182689811b696e044fc3ce6850ea2604ac74f3ea3", + "spec_hash": "sha256:c3d11a64e1fb2eddb7724acb75bcf7c242551a683a7d265a7cdd0d208c8d4d7b", "spec_path": "specs/analog/mos_psp103_data.t27", "tests": { "failed": 0, "failing": [], "forced": false, - "passed": 8, - "total": 8, + "passed": 9, + "total": 9, "vacuous": 0 }, "toolchain": { diff --git a/specs/analog/decks/psp103_gate_node.cir b/specs/analog/decks/psp103_gate_node.cir new file mode 100644 index 0000000000..b2d7c5ead5 --- /dev/null +++ b/specs/analog/decks/psp103_gate_node.cir @@ -0,0 +1,46 @@ +IHP SG13G2 MOS gate node loaded by a MOS drain, 25 fF, backward Euler on a fixed 5 ps grid, corner mos_tt +* specs/analog/decks/psp103_gate_node.cir -- reference data for specs/analog/mos_psp103.t27 (M3c-3, #10882, epic #10486). A netlist plus +* a .control block that prints the waveform of one node. +* The circuit has an internal GATE NODE g: the gate of one sg13_lv_nmos (w=1.0u l=0.45u, source and bulk at 0 V, drain at the 1.5 V rail, so its +* Vds is 1.5 V whatever g does: its gate charge is the NMOS gate-charge table read along Vds = 1.5 V), loaded by the DRAIN of one sg13_lv_pmos +* (w=3.0u l=0.45u, source and bulk at the 1.5 V rail, gate `in`), by a 25 fF capacitor to ground (the node's own capacitance) and by a 10 kohm +* resistor to a 0.75 V bias, which holds the node at 0.75 V at rest. `in` is at 1.5 V (the PMOS off), then 0 V for 8 steps, then 1.5 V again: the +* falling edge of `in` takes charge off the node through the PMOS' gate-drain coupling (a jump of charge: the node moves by 0.15 V in the first step +* before the PMOS current can act) and the PMOS then charges the node; the rising edge takes the coupling back, and the node relaxes to its bias through +* the resistor. The node stays between 0.59 V and 1.08 V, inside the range of the tables, which the rails of an inverter's output would not: an +* inverter's output kicked by its own gate edge goes through 0 V and 1.5 V (32 mV and 38 mV beyond them at 100 fF), where the tables end. g holds, besides +* the capacitor and the resistor, the drain charge of the PMOS and the gate charge of the loading NMOS: the first circuit in which the gate charge +* tables are read. The tables' unit is dt / C = 200 V/A, as in the 500 fF run: dt = 5 ps on C = 25 fF, so the same current tables apply and the +* charge tables (Q / 500 fF) are scaled by 500 fF / 25 fF = 20. +* Paths are NOT in this file: ngspice reads IHP_PDK and IHP_OSDI from the environment (see psp103_tab_tt.cir). +* Run: IHP_PDK= IHP_OSDI= ngspice -b psp103_gate_node.cir (ngspice-47) +* Grid: as psp103_inv_be_500f.cir with dt = 5 ps: tstep = 0.78125 dt makes the opening ramp end exactly at dt, so every internal point from then +* on is a multiple of dt. The input is a B source of nint(time / dt): 1.5 V up to index 1, 0 V from index 2 (10 ps) to index 9, 1.5 V from index 10. +* Step k of the spec ends at (k + 2) dt; step 0 starts at t = dt = 5 ps and step 8 at 9 dt = 45 ps. +* What it prints: between "BEGIN tran_be" and "END tran_be", 401 rows " TAB