Zum Inhalt springen
Kontakt

Eigenes Produkt · In Entwicklung · Rust · SPICE · KI

Circuit Forge: Der KI-native SPICE-Simulator

Ein SPICE-Simulator mit eigenem Solver-Kern in Rust, dazu ein eingebauter Assistent, der mit den Werkzeugen des Simulators arbeitet und Schaltungen, Werte und Anforderungen vorschlägt. Ob sie halten, prüft eine deterministische Engine. Übernommen wird in der Grundeinstellung erst, wenn eine Person zustimmt.

In Entwicklung. Noch nicht öffentlich erhältlich. Für Windows, macOS und Linux.

Farbcode dieser Seite

  • Berechnet Von der deterministischen Engine: gleiche Eingabe, gleiches Ergebnis.
  • Vorgeschlagen Vom Sprachmodell: ein Vorschlag, den die Engine prüft.
  • Entschieden Von einer Person: Übernommen wird in der Grundeinstellung nur, was jemand bestätigt.

Illustratives Beispiel, kein aufgezeichneter Lauf. Ablauf schematisch, Kennlinie aus den Bauteilwerten berechnet.

Der Ablauf in drei Schritten, gezeigt an einem Linearregler. Zuerst schlägt das Sprachmodell die Schaltung vor: Der Operationsverstärker U1 vergleicht die geteilte Ausgangsspannung mit der Referenz von 1,25 V und steuert den P-Kanal-MOSFET M1, die Rückkopplung bilden 18 kΩ oben und 11 kΩ unten. Die Simulation über die Versorgung zeigt, dass der Ausgang ab V1 = 3,421 V im Toleranzband liegt und bei 5 V auf 3,295455 V regelt. Dann prüft die Engine den Entwurf mit 8 deterministischen Prüfungen, zuletzt gegen den Sollwert 3,3 V ± 0,066 V. Der Entwurf besteht alle, und eine Person übernimmt den verifizierten Schaltplan.

Warum es das gibt

Eigener Solver-Kern in Rust

MNA, dünnbesetzte LU-Zerlegung und Newton mit einer sechsstufigen Konvergenzstrategie, dazu drei Integrationsverfahren mit adaptiver Schrittweite. In unserem eigenen Code ist unsafe verboten, mit einer begründeten Ausnahme: dem Lesen großer Wellenformdateien per Memory-Mapping.

KI mit Werkzeugen

Der Assistent rechnet nicht selbst. Er ruft den Simulator über typisierte Werkzeuge auf und liest die Zahlen, die zurückkommen. Das Urteil „verifiziert“ kann nur die Prüfung der Engine vergeben.

Schaltplan, Simulation, Analyse

Alles in einem Programm. Die Zeichnung ist die Netzliste: Es gibt einen Parser und keine zweite Übersetzung, die unterwegs etwas anders verstehen könnte.

Reproduzierbar bis aufs Byte

Ergebnisse kommen als versionierte JSON-Dokumente, die Skripte, CI und Agenten vergleichen können. Mit demselben Build auf derselben Plattform sind sie bei gleicher Eingabe byte-identisch.

Der Kreislauf

Vom ersten Strich bis zur Messung, ohne Export dazwischen.

Schaltplan

  • Hierarchische Schaltpläne mit Navigator
  • Regelprüfung schon beim Zeichnen, mit 33 Regeln. Bewusst gesetzte Ausnahmen bleiben gespeichert.
  • Spannung, Strom, Leistung und Arbeitsbereich direkt auf der Zeichenfläche
  • Die Zeichnung ist die Netzliste.
  • Aus einer Netzliste lässt sich ein Schaltplan erzeugen. Angezeigt wird er erst, wenn nachgewiesen ist, dass er dieselbe Schaltung beschreibt, und die Regelprüfung keinen Fehler findet. Noch experimentell.

Simulation

  • 13 Analysen in einer Engine
  • Mehrachsige .step-Sweeps, Temperatur und Monte-Carlo
  • Wellenformen wachsen, während der Solver rechnet. Stopp behält, was schon berechnet ist.
  • Drei Integrationsverfahren mit adaptiver Schrittweite

Analyse

  • Vier Cursor, Rechnen mit Kurven und .meas
  • Spektrum mit THD, SNR, SINAD, SFDR und ENOB
  • Bode-Diagramme und Kurvenscharen aus Sweeps
  • Läufe vergleichen, Export als CSV und SVG

Analysen

  • .op
  • .dc
  • .tran
  • .ac
  • .noise
  • .tf
  • .sens
  • .pz
  • .net
  • .disto
  • .four
  • .bode
  • .meas

46 mitgelieferte Beispielschaltungen in 9 Kategorien. Tests sichern jede ab: fehlerfrei in der Regelprüfung, in eine Netzliste übersetzbar und in der Simulation lauffähig.

Stand: September 2026

KI-nativ

Die KI schlägt vor. Die Engine prüft. Sie entscheiden.

KI-nativ heißt bei Circuit Forge: Jedes maschinenlesbare Ergebnis ist ein versioniertes Dokument, das ein Programm oder Agent lesen kann. Und jede Änderung der KI ist ein Vorschlag, den deterministische Prüfungen bewerten, bevor er übernommen wird.

Warum wir das so bauen: Determinismus und KI

Ein Auftrag, Schritt für Schritt

Beispiel · Lauf vom 23.09.2026

  1. Person

    Anfrage

    Entwirf einen Widerstandsteiler, der aus 5 V Versorgung 3,3 V macht, innerhalb von ±2 % und mit Widerstandswerten aus der E24-Reihe.
  2. Sprachmodell

    Vertrag vorschlagen

    Bevor gebaut wird, schlägt das Modell mit dem Werkzeug cf_propose_spec einen Vertrag vor: was gemessen wird und welche Annahmen gelten.

    Anforderung

    Von Ihnen angegeben

    vout_3v3_accuracy op V(out) = 3,3 V ± 2 %

    Annahmen

    • Der Ausgang ist unbelastet.
    • Die Widerstände haben Nennwerte aus der E24-Reihe.
    • Nennwerte bei der Standardtemperatur. Die Toleranz gilt nur für den simulierten Ausgang mit diesen Nennwerten.

    Vom Modell eingesetzte Zahlen: 0 von 1. Solche Zeilen werden gezählt und hervorgehoben, damit Sie sie vor dem Übernehmen prüfen.

  3. Person

    Vertrag übernehmen

    Eine Person klickt auf Übernehmen. Der Vertrag wird eingefroren und bekommt einen Inhalts-Hash.

    Inhalts-Hash, gekürzt a8f2871c

  4. Sprachmodell

    Schaltung vorschlagen

    Das Modell schlägt einen Teiler an 5 V vor: 10 kΩ oben, 20 kΩ unten, beide aus der E24-Reihe.

  5. Engine

    Acht Prüfungen

    Die Engine prüft den Vorschlag in fester Reihenfolge. Fällt eine Prüfung durch, geht ihr Bericht an das Modell zurück, und es bessert nach.

    1. erc Elektrische Regelprüfung des erzeugten Schaltplans bestanden
    2. isomorphism Schaltplan und erzeugte Netzliste sind elektrisch dieselbe Schaltung bestanden
    3. static Netzliste einlesen und auf Fehler prüfen bestanden
    4. analysis_binding Jede Analyse des Vertrags steckt auch im Entwurf bestanden
    5. spec_binding Jedes Netz, das der Vertrag misst, gibt es im Entwurf bestanden
    6. dynamic Alle Analysen des Vertrags laufen durch bestanden
    7. spec Die Anforderungen des Vertrags halten bestanden
    8. final_artifact Der endgültige Schaltplan wird exakt neu erzeugt und besteht alle Prüfungen noch einmal bestanden

    Alle bestanden im Durchgang 1.

  6. Engine

    Messen

    Die Engine rechnet den Arbeitspunkt:

    vout_3v3_accuracy [op]: Ist 3,333333 V · Soll 3,300000 V ± 0,066 V · bestanden

    5 V · 20 kΩ / (10 kΩ + 20 kΩ) = 3,333 V

  7. Person

    Freigeben

    Erst nach allen Prüfungen wird die Schaltfläche zum Übernehmen aktiv. Übernommen wird, wenn eine Person klickt.

    Fällt eine Prüfung durch, lässt sich der Entwurf nur als nicht verifizierter Entwurf übernehmen.

    Ein verifizierter Lauf schickt Schaltung und Gespräch an den Anbieter. Ist das Anhängen der Schaltung in dieser Unterhaltung ausgeschaltet, startet er deshalb nicht.

Texte sinngemäß übersetzt. Verifiziert heißt: Der Vertrag, den Sie übernommen haben, hält in der Simulation mit diesem Build der Engine. Eine Garantie für die Hardware ist das nicht.

34 Werkzeuge, keines ändert den Entwurf

Die KI-Schicht von Circuit Forge kennt 34 typisierte Werkzeuge: 11 starten den Simulator, 5 entwerfen Vorschläge, 18 lesen nur. Je nach Aufgabe bekommt der Assistent eine Auswahl davon. Eine Schaltplanänderung wird auf eine Kopie angewendet, mit der Regelprüfung und dem Nachweis geprüft, dass Zeichnung und Netzliste dieselbe Schaltung sind, und Ihnen dann zum Annehmen oder Ablehnen gezeigt.

Simulieren 11 Werkzeuge

  • cf_op
  • cf_sens
  • cf_tf
  • cf_noise
  • cf_meas
  • cf_wave_digest
  • cf_explain_convergence
  • cf_check_spec
  • cf_optimize
  • bm_run_tests
  • cf_run_component_tests

Vorschlagen 5 Werkzeuge

  • bm_propose_model
  • cf_propose_circuit_edit
  • cf_propose_deck
  • cf_propose_patch
  • cf_propose_spec

Lesen und fragen 18 Werkzeuge

  • cf_complete
  • cf_lint
  • cf_catalog
  • cf_resolve_component
  • cf_find_model
  • cf_erc
  • cf_result_digest
  • cf_compare_runs
  • cf_result_window
  • cf_result_meas
  • cf_result_spectrum
  • cf_sweep_digest
  • cf_sweep_table
  • bm_catalog
  • bm_read_model
  • cf_layout_variants
  • cf_validate_component
  • cf_ask_user
0 Werkzeuge, die den Entwurf direkt ändern

Muss der Assistent raten, ist er angewiesen, übliche Werte zu nehmen und jede Annahme zu nennen. Nachfragen soll er nur in festgelegten Fällen, etwa bei Netzspannung, über 50 V, beim Laden von Akkus oder wenn etwas mit einem Menschen verbunden ist, und dann mit höchstens drei Fragen.

Stand: September 2026

Wohin Ihre Daten gehen

  • Eigener API-Schlüssel für Anthropic oder OpenAI, gespeichert im Schlüsselspeicher des Betriebssystems.
  • Die Simulation läuft lokal. Die Engine enthält keinen Aufruf eines Sprachmodells.
  • Ihre Schaltung geht nur an den Anbieter, wenn sie angehängt ist. Das regelt ein Schalter je Unterhaltung. Ab Werk ist er eingeschaltet, und die Voreinstellung für neue Unterhaltungen lässt sich ändern.
  • Gespräche werden in der Grundeinstellung lokal gespeichert, unverschlüsselt. Das Speichern lässt sich abschalten.
  • Änderungen der KI sind Vorschläge. Automatisches Übernehmen ist ab Werk aus.
  • Ohne Schlüssel bleibt der Assistent aus. Schaltplan, Simulation und Analyse funktionieren ohne ihn.

Anforderungen als Datei

Anforderungen, die sich ausführen lassen.

Anforderungen stehen in einer kurzen Textdatei, der .cfspec. Ein Befehl der Engine führt die nötigen Analysen aus und meldet für jede Anforderung bestanden oder nicht bestanden, bei jeder angegebenen Temperatur. Die schlechteste Ecke entscheidet. Der Rückgabewert ist 0, wenn alles erfüllt ist, 3 bei einer verfehlten Anforderung und 65, wenn nicht simuliert werden konnte. Erreichbar ist das über die Kommandozeile der Engine oder über den Assistenten.

Drei Temperaturen, ein Urteil

Anforderung (.cfspec)

cfspec = 1

[meta]
name = "diode-bias"

[[analyses]]
kind = "op"
directive = ".op"
corners = [-40, 27, 85]

[[assertions]]
name = "diode_bias"
analysis = "op"
measure = ".meas op vd FIND V(d) AT 0"
check = { kind = "value", target = 0.634, tol = 0.02 }

Schaltung (Auszug)

V1 in 0 5
R1 in d 10k
D1 d 0 DM
.model DM D
Messwert und Urteil je Temperatur
Ecke Gemessen Urteil
−40 °C 0,7547 V nicht bestanden
27 °C 0,6337 V bestanden
85 °C 0,5260 V nicht bestanden

Gesamt: nicht bestanden

Nach der Dokumentation der Engine zusammengestellt: eine Diode an 5 V über 10 kΩ. Ihre Durchlassspannung sinkt um etwa 2 mV pro Kelvin, deshalb hält die Anforderung 0,634 V ± 0,02 V, also 0,614 V bis 0,654 V, nur bei 27 °C.

Ein Glückstreffer zertifiziert nichts

Für die Monte-Carlo-Ausbeute zählt in Circuit Forge die untere Schranke eines Konfidenzintervalls, nicht die rohe Quote. Bestehen 20 von 20 Läufen, liegt die Schranke bei nur 0,8808, und eine geforderte Ausbeute von 0,99 wird abgelehnt. Zertifizieren lässt sie sich erst mit mindestens 268 Läufen ohne einen einzigen Fehler.

L95=p^+z22⁢n−z⁢p^⁢(1−p^)n+z24⁢n21+z2n

Untere Wilson-Schranke, einseitig 95 %, mit z = 1,6449. p̂ ist der Anteil bestandener Läufe, n ihre Zahl.

Rohe Quote und untere Schranke einiger Stichproben, geprüft gegen eine geforderte Ausbeute von 0,99
Bestanden von N Rohe Quote Untere Schranke Urteil
20 von 20 1,0000 0,8808 nicht zertifiziert
198 von 200 0,9900 0,9702 nicht zertifiziert
267 von 267 1,0000 0,9899 nicht zertifiziert
268 von 268 1,0000 0,9900 zertifiziert

Mindestzahl fehlerfreier Läufe: 25 für 0,90, 52 für 0,95, 268 für 0,99.

Berechnet mit der Formel der Engine. Die Schranke ist auf vier Stellen abgerundet, das Urteil nutzt den ungerundeten Wert.

Rohe Quote
1,0000
Untere Schranke (Wilson, einseitig 95 %)
0,8808
Urteil
nicht zertifiziert

20 von 20 bestanden: Schranke 0,8808, gefordert 0,99, nicht zertifiziert.

Baubare Werte oder ein ehrliches Nein

Für den Beispielteiler ergibt sich rechnerisch R2 = 19.411,76 Ω. Zu kaufen gibt es diesen Widerstand nicht. Der Optimierer von Circuit Forge rastet deshalb auf Normwerte ein und simuliert den baubaren Punkt erneut, und wenn kein Wert der Reihe passt, sagt er das. Die Rechnung dahinter können Sie hier nachstellen.

|Vout−V*|≤p⁢V*,Vout=V1⁢R2R1+R2

V* ist der Sollwert, p die Toleranz als Anteil.

Der Optimierer der Engine stimmt bis zu 16 Bauteilwerte zugleich ab. Erreichbar ist er heute über den Assistenten. Er rastet auf Normwerte von E6 bis E192 ein und simuliert den baubaren Punkt noch einmal. Sein Ergebnis ist eine Empfehlung, die Sie wie jeden anderen Vorschlag prüfen und übernehmen.

Berechnet für einen unbelasteten Teiler. Das Toleranzband ist der Sollwert plus oder minus den Prozentsatz des Sollwerts, wie im Vertrag des Beispiels. Bei einer Prozent-Toleranz rechnet die Engine mit dem größeren von Ist- und Sollwert; an wenigen Randpunkten fällt ihr Urteil deshalb anders aus.

Versorgung 5 V, R1 = 10 kΩ fest, R2 aus der Reihe

Ideales R2 19,41 kΩ

Nächster Wert darunter

18 kΩ

V(out)
3,214 V
Abweichung
−2,60 %

nicht erfüllt

Nächster Wert darüber

20 kΩ

V(out)
3,333 V
Abweichung
+1,01 %

erfüllt

E24: 20 kΩ ergibt 3,333 V, Abweichung +1,01 %. Die Anforderung ist erfüllt.

Die Beispielfälle auf einen Blick
Sollwert Toleranz Reihe Ideales R2 Nächster Wert darunter Nächster Wert darüber Lösung
3,3 V 2 % E12 19,41 kΩ 18 kΩ nicht erfüllt 3,214 V −2,60 % 22 kΩ nicht erfüllt 3,438 V +4,17 % keine
3,3 V 2 % E24 19,41 kΩ 18 kΩ nicht erfüllt 3,214 V −2,60 % 20 kΩ erfüllt 3,333 V +1,01 % ja
3,3 V 2 % E96 19,41 kΩ 19,1 kΩ erfüllt 3,282 V −0,55 % 19,6 kΩ erfüllt 3,311 V +0,33 % ja
2,9 V 1 % E24 13,81 kΩ 13 kΩ nicht erfüllt 2,826 V −2,55 % 15 kΩ nicht erfüllt 3,000 V +3,45 % keine
2,9 V 1 % E96 13,81 kΩ 13,7 kΩ erfüllt 2,890 V −0,33 % 14 kΩ erfüllt 2,917 V +0,57 % ja

Ein Solver, der sagt, was er getan hat

Wenn eine Simulation scheitert, erfahren Sie, woran.

Der Solver hält fest, welche Strategie zum Ziel geführt hat. Scheitert er, bekommen Sie einen typisierten Befund mit Hinweisen und keine bloße „singuläre Matrix“. Was die Engine nicht getreu rechnen kann, lehnt sie mit Namen ab, statt es still zu ersetzen.

Sechs Stufen, jede protokolliert

  1. Stufe 0

    Newton

    Das gewöhnliche Newton-Verfahren. Die meisten Schaltungen konvergieren schon hier.

    nicht konvergiert

  2. Stufe 1

    GMIN-Stepping I

    Eine erste Variante, die zusätzliche Leitwerte einsetzt und schrittweise zurücknimmt.

    nicht konvergiert

  3. Stufe 2

    GMIN-Stepping II

    Zusätzliche Leitwerte mit adaptivem Fahrplan: Kommt eine Stufe zügig zum Ziel, wird der nächste Schritt größer. Scheitert sie, geht es von der letzten gelösten Stufe mit kleinerem Schritt weiter.

    konvergiert

  4. Stufe 3

    Quellen-Stepping

    Alle unabhängigen Quellen fahren von null auf ihren vollen Wert hoch. Jede Stufe startet von der Lösung der vorigen.

    nicht nötig

  5. Stufe 4

    Homotopie

    Ein einziger Parameter fährt die Quellen hoch und nimmt zugleich zusätzliche Leitwerte zurück.

    nicht nötig

  6. Stufe 5

    Pseudo-Transient

    Die Schaltung wird wie in einer Zeitsimulation in ihren Ruhezustand geführt. Gelingt auch das nicht, gibt der Solver auf und sagt es.

    nicht nötig

Versuche im Ergebnis

  1. Versuch 1: Newton, nicht konvergiert
  2. Versuch 2: GMIN-Stepping I, nicht konvergiert
  3. Versuch 3: GMIN-Stepping II, konvergiert

Das Ergebnis nennt die Methode, die gewonnen hat, und listet jeden Versuch.

Ablauf schematisch, kein aufgezeichneter Lauf. Welche Stufe gewinnt, hängt von der Schaltung ab; im Bild ist es Stufe 2.

Fehler mit Anleitung

Scheitert eine Simulation, liefert die Engine einen typisierten Befund. Er nennt die betroffenen Netze und sagt, was als Nächstes zu tun ist. Drei Fälle, gezeigt mit den Meldungsvorlagen der Engine.

Kein Gleichstrompfad zur Masse

Vor dem Rechnen prüft die Engine die Topologie. Jedes Netz ohne Gleichstrompfad zur Masse wird mit Namen genannt, getrennte Teilschaltungen werden zu Inseln gruppiert.

no DC path to ground: <n> net(s) float (<nets>) in <k> disconnected island(s)

Ablehnen statt still ignorieren

Einen Parameter, den die Engine noch nicht abbildet, lehnt sie mit Namen ab. Mit einem halben Modell weiterzurechnen, als wäre es das ganze, kommt nicht in Frage.

JFET "J1" `.model` uses CGSO=<value>; the transient stamp models gate-junction depletion charge only (CGSO is not yet modelled) at byte <n>

Teilergebnis statt Totalausfall

Wird der Zeitschritt einer Transientenanalyse zu klein, endet der Lauf als Teilergebnis. Alle bis dahin konvergierten Punkte bleiben erhalten, der letzte trägt die Diagnose. Die Hinweise passen zum Fall, hier zur Trapezregel ohne .ic.

Schema
cf.tran.v1
Status
partial
Diagnose
timestep_too_small
Hinweise
  • try_gear2
  • check_source_discontinuity
  • relax_reltol
  • add_ic

17 Hinweise, maschinenlesbar

  • check_floating_nodes Nach einem Knoten ohne Gleichstrompfad zur Masse suchen und ihn anbinden oder neu verbinden.
  • check_voltage_source_loop Nach idealen Spannungsquellen in einer Masche oder parallel suchen, die sich widersprechende Werte erzwingen.
  • add_dc_path_to_ground Jeder abgetrennten Teilschaltung einen Gleichstrompfad zur Masse geben, etwa über einen hochohmigen Widerstand.
  • add_nodeset Mit .nodeset einen Startwert nahe dem erwarteten Arbeitspunkt vorgeben. Das wirkt beim Start einer .tran, bei .op und .dc noch nicht.
  • check_bistable_topology Auf bistabile Schaltungen oder solche mit mehreren Lösungen prüfen, etwa Latches oder Oszillatoren ohne eindeutigen Arbeitspunkt.
  • relax_reltol .options reltol lockern. Die Toleranz ist womöglich enger, als die Kondition der Schaltung hergibt.
  • check_model_parameters Die Parameter im .model auf extreme oder physikalisch unsinnige Werte prüfen.
  • increase_itl1 Die Grenze für Newton-Iterationen anheben (.options itl1).
  • check_source_magnitudes Quellwerte und Verhaltensausdrücke auf Größen prüfen, bei denen die Bauteilgleichungen überlaufen.
  • try_gear2 Bei steifen Schaltungen auf den L-stabilen Gear-2-Integrator umstellen (.options method=gear).
  • check_source_discontinuity PULSE- und PWL-Quellen auf Flanken ohne Dauer prüfen und jeder Flanke eine endliche Anstiegs- oder Abfallzeit geben.
  • add_ic Mit .ic eine Anfangsbedingung setzen oder die .tran mit UIC starten, damit der Lauf in einem bekannten Zustand beginnt.
  • check_initial_conditions Die vorgegebenen Anfangswerte (.ic oder IC=) können selbst das Problem sein. Sie auf unplausible Werte prüfen, etwa einen Übergang, der mehrere Volt in Durchlassrichtung gehalten wird, oder sie entfernen und den Arbeitspunkt den Start bestimmen lassen.
  • run_tran_instead Statt des Gleichstrom-Arbeitspunkts eine .tran rechnen.
  • check_block_hysteresis Ein Verhaltensblock mit Hysterese hat womöglich keinen Gleichstrom-Fixpunkt. Die .tran in seinem deklarierten Anfangszustand starten (mit UIC), der Schleife einen Startimpuls geben oder die Hysterese entfernen.
  • use_uic_tran UIC in die .tran-Zeile aufnehmen. Dann startet der Lauf im vorgegebenen Anfangszustand, statt einen Arbeitspunkt zu suchen, den die Schaltung vielleicht nicht hat.
  • add_startup_stimulus Der Schaltung einen definierten Start geben, etwa einen Reset- oder Enable-Impuls bei t = 0 oder eine Quelle, die von null hochfährt. Dann hat ein Latch oder Oszillator genau einen Anfangszustand.

Meldungen im Wortlaut der Engine, auf Englisch. Werte in spitzen Klammern sind Platzhalter; der Teil zu den Inseln erscheint nur bei mehr als einer Insel.

Stand: September 2026

Die Falle bei der Phasenreserve

Ein Regelkreis mit der Verstärkung 1000 (60 dB) und 3 Polen bei 100 Hz. Liest man die Phasenreserve am Hauptwert der Phase ab, wirkt er stabil. Circuit Forge entfaltet die Phase, wertet jede Stelle aus, an der die Verstärkung 0 dB kreuzt, und meldet die Reserve, die den Ausschlag gibt.

Naiv, Hauptwert

180° + 107,22° = 287,22°

sieht stabil aus

Entfaltet

180° + (−252,78°) = −72,78°

instabil

Amplitudenreserve −41,94 dB bei 173,2 Hz

Verstärkung
1000
Pole
3
Lage der Pole
100 Hz
Durchtrittsfrequenz (0 dB)
995 Hz
Phase dort, entfaltet
−252,78°
Phase dort, Hauptwert
107,22°
Phasenreserve, entfaltet
−72,78°
Phasenreserve, naiv
287,22°
Frequenz bei −180°
173,2 Hz
Verstärkung dort
+41,94 dB
Amplitudenreserve
−41,94 dB
Betrag und Phase des Beispielkreises, eine Zeile je Dekade
Frequenz Betrag Phase, entfaltet Phase, Hauptwert
10 Hz 59,870 dB −17,13° −17,13°
100 Hz 50,969 dB −135,00° −135,00°
1 kHz −0,130 dB −252,87° 107,13°
10 kHz −60,001 dB −268,28° 91,72°

Bedingt stabil

Ein zweiter Kreis aus den Tests der Engine kreuzt 0 dB mehr als einmal. Am ersten Durchgang sieht er sicher aus. Circuit Forge meldet den Durchgang mit der kleinsten Reserve, denn der entscheidet.

Erster Durchgang durch 0 dB
100 Hz, Phase −30°, Reserve 150°
Maßgeblicher Durchgang
10 kHz, Phase −190°, Reserve −10°

Die Reserve steht in Anforderungen (.cfspec) und in den maschinenlesbaren Ergebnissen; eine eigene Anzeige in der Oberfläche gibt es noch nicht.

Berechnetes Beispiel in geschlossener Form, wie im Test der Engine.

Wer sehen will, was der Solver rechnet: Die Kommandozeile der Engine zeigt die MNA-Gleichungen einer Schaltung und für jeden Transistor Arbeitsbereich, Schwellspannung, gm und gds.

  • cf matrix --explain
  • cf op --device-op

Gleiche Eingabe, gleiche Bytes

Parallel gerechnet, Byte für Byte dasselbe Ergebnis.

Sweeps, Temperaturläufe und Monte-Carlo rechnet die Engine parallel. Eingesammelt werden die Ergebnisse nach ihrem Index, und Gleitkommazahlen werden nie über Threads hinweg addiert. Jedes Analyseergebnis nennt sein Schema und trägt einen BLAKE3-Hash der normalisierten Eingabe, der Leerraum, Kommentare und Groß- und Kleinschreibung ignoriert.

Die Zusage gilt für gleiche Eingabe, gleichen Build und gleiche Plattform. Über Plattformen oder Versionen hinweg versprechen wir das nicht.

Ein Sweep, zwei Läufe

Netzliste

parallel determinism smoke
.param rr = 1k
V1 in 0 DC 1
R1 in out {rr}
R2 out 0 10k
.dc V1 1 1 1
.step param rr 1k 33k 1k
.end

Ein Thread

SHA-256 dieser Tabelle

f79851f3de65e3af2f41283b56f7457e6d17f2101b5acda46babf272a7ee7ff9

8 Threads

SHA-256 dieser Tabelle

f79851f3de65e3af2f41283b56f7457e6d17f2101b5acda46babf272a7ee7ff9

identisch

Reihenfolge, in der die Punkte im parallelen Lauf fertig wurden: 05, 06, 07, 02, 00, 03, 04, 08, 01, 13, 11, 14, 09, 16, 10, 12, 15, 18, 21, 20, 23, 24, 17, 22, 27, 19, 25, 26, 28, 30, 29, 32, 31

Tabelle ansehen: 33 Zeilen, 990 Bytes
00  rr= 1k  V(out)=0.909091 V
01  rr= 2k  V(out)=0.833333 V
02  rr= 3k  V(out)=0.769231 V
03  rr= 4k  V(out)=0.714286 V
04  rr= 5k  V(out)=0.666667 V
05  rr= 6k  V(out)=0.625000 V
06  rr= 7k  V(out)=0.588235 V
07  rr= 8k  V(out)=0.555556 V
08  rr= 9k  V(out)=0.526316 V
09  rr=10k  V(out)=0.500000 V
10  rr=11k  V(out)=0.476190 V
11  rr=12k  V(out)=0.454545 V
12  rr=13k  V(out)=0.434783 V
13  rr=14k  V(out)=0.416667 V
14  rr=15k  V(out)=0.400000 V
15  rr=16k  V(out)=0.384615 V
16  rr=17k  V(out)=0.370370 V
17  rr=18k  V(out)=0.357143 V
18  rr=19k  V(out)=0.344828 V
19  rr=20k  V(out)=0.333333 V
20  rr=21k  V(out)=0.322581 V
21  rr=22k  V(out)=0.312500 V
22  rr=23k  V(out)=0.303030 V
23  rr=24k  V(out)=0.294118 V
24  rr=25k  V(out)=0.285714 V
25  rr=26k  V(out)=0.277778 V
26  rr=27k  V(out)=0.270270 V
27  rr=28k  V(out)=0.263158 V
28  rr=29k  V(out)=0.256410 V
29  rr=30k  V(out)=0.250000 V
30  rr=31k  V(out)=0.243902 V
31  rr=32k  V(out)=0.238095 V
32  rr=33k  V(out)=0.232558 V

Illustration nach einem Test der Engine: Die Tabelle ist hier aus der geschlossenen Formel berechnet, die Reihenfolge der Threads ist ausgedacht. Die Engine sammelt Ergebnisse nach Index, deshalb hängt ihre Ausgabe nicht von der Reihenfolge ab; ihr Test vergleicht zwei parallele Läufe Byte für Byte.

Versionierte Verträge (Auswahl)

  • cf.op.v1
  • cf.dc.v1
  • cf.tran.v1
  • cf.ac.v1
  • cf.noise.v1
  • cf.tf.v1
  • cf.four.v1
  • cf.bode.v1
  • cf.mc.v1
  • cf.measure.v1
  • cf.error.v1

Die Hauptversion im Schemanamen steigt nur bei einer inkompatiblen Änderung. Neue Felder, die ein Leser ignorieren kann, bleiben in derselben Version.

Mehr zur Reproduzierbarkeit: Determinismus und KI

Mixed-Signal und Firmware

Firmware und Schaltung im selben Transient.

Das Verhaltensmodell eines Mikrocontrollers läuft in derselben Transientenanalyse wie die Schaltung. Seine Pins treiben über echte Leitwerte, im Gegentakt oder als offener Drain, deshalb liest ein Eingang mit internem Pull-up 3,2869 V und nicht ideale 3,3 V. Zwei Modelle können außerdem über einen Byte-Kanal Daten tauschen, ohne elektrisch verbunden zu sein.

Ein Verhaltensmodell, kein Emulator: Die Firmware ist in der Modellsprache von Circuit Forge geschrieben, Befehlstakte gibt es nicht. Exportieren lässt sie sich als C oder Rust, im Verhalten gleichwertig, nicht Bit für Bit.

Ein Byte hin und zurück

Netzliste

VDD vdd 0 3.3
N1 vdd 0 echo uart_probe
N2 vdd 0 rx uart_terminal
.serial link0 N1.uart0 N2.uart0 BAUD=9600
.tran 100u 5m
.end

Firmware (Auszug aus dem Modell)

if reset_pending() {
    gpio_mode(ECHO, OUTPUT_PUSH_PULL);
    gpio_write(ECHO, false);
    serial_write(UART0, 65.0);
}
if serial_readable(UART0) {
    state.got = serial_read(UART0);
    if state.got == 65.0 {
        gpio_write(ECHO, true);
    }
}
Dauer eines Rahmens
1,0416667 ms
Byte kommt beim Terminal an
1,0417667 ms
Terminal setzt RX auf High
1,047590 ms
Echo kommt bei der Firmware an
2,0892567 ms
Firmware setzt ECHO auf High
2,090331 ms

Bei 9600 Baud kommt das Byte nach 1,0417667 ms an.

Zeitpunkte im Transient bei beiden Baudraten
Ereignis 9600 Baud 4800 Baud
Dauer eines Rahmens 1,0416667 ms 2,0833333 ms
Byte kommt beim Terminal an 1,0417667 ms 2,0834333 ms
Terminal setzt RX auf High 1,047590 ms 2,085090 ms
Echo kommt bei der Firmware an 2,0892567 ms 4,1684233 ms
Firmware setzt ECHO auf High 2,090331 ms 4,171581 ms

Hin und zurück dauert es bei halber Baudrate 1,9957-mal so lange: Die Rahmen wachsen mit, die beiden Schritte zum Aufwachen nicht.

Werte aus der Dokumentation der Engine: Firmware und Terminal auf einem Byte-Kanal, 8N1, 3,3 V.

Technik und Stand

Der Stand der Entwicklungsversion, Zeile für Zeile. Was noch nicht läuft, ist als „in Arbeit“ oder „geplant“ markiert.

Stand: September 2026

Engine und Oberfläche
In Rust geschrieben. Die Oberfläche ist derzeit auf Englisch.
läuft in der Entwicklungsversion
Analysen
.op .dc .tran .ac .noise .tf .sens .pz .net .disto .four .bode .meas, dazu mehrachsige .step-Sweeps, Temperatur und Monte-Carlo; .disto derzeit nur für Dioden und mit einem Ton
läuft in der Entwicklungsversion
Solver
MNA, dünnbesetzte LU-Zerlegung, Newton mit sechsstufiger Konvergenzstrategie; Trapez, Gear-2 und Euler rückwärts mit adaptiver Schrittweite
läuft in der Entwicklungsversion
Bauteilmodelle
Passive Bauteile mit Temperaturkoeffizienten, gesteuerte und Verhaltensquellen, Dioden, Bipolartransistoren bis zum Hochfrequenz-Kompaktmodell, JFET, MESFET, MOSFET von Level 1 bis zu Kurzkanalmodellen, Leistungs-MOSFET und Leitungen. Einzelne Modelle haben noch Einschränkungen.
läuft in der Entwicklungsversion
Weitere Modelle
Weitere Kompaktmodelle für Transistoren und Modelle aus einer Hardware-Beschreibungssprache
geplant
Anforderungen
.cfspec mit Temperatur-Ecken, Worst-Case über Toleranzen und Monte-Carlo-Ausbeute
läuft in der Entwicklungsversion
Mixed-Signal
Verhaltens- und Mikrocontroller-Modelle im selben Transient, Firmware-Export als C oder Rust. Erste Ausbaustufe.
läuft in der Entwicklungsversion
KI-Assistent
Eigener Schlüssel für Anthropic oder OpenAI, 34 Werkzeuge in der KI-Schicht, Änderungen nur als Vorschlag
läuft in der Entwicklungsversion
Import
Schaltpläne im .qsch-Format und aus Altium (.SchDoc)
in Arbeit
Import
KiCad und LTspice
geplant
Ergebnisse
Versionierte JSON-Verträge, byte-identisch bei gleicher Eingabe, gleichem Build und gleicher Plattform
läuft in der Entwicklungsversion
Plattform
Windows, macOS und Linux
läuft in der Entwicklungsversion
Zugang
Noch nicht öffentlich erhältlich, Frühzugang auf Anfrage

Häufige Fragen

Was ist Circuit Forge?

Circuit Forge ist ein SPICE-Simulator, den elsyQ als eigenes Produkt entwickelt, mit einem Solver-Kern in Rust und einem eingebauten KI-Assistenten. Schaltplan, Simulation und Analyse laufen in einem Programm, und die Zeichnung ist zugleich die Netzliste. Der Assistent schlägt Schaltungen, Werte und Anforderungen vor, eine deterministische Engine prüft sie. Circuit Forge ist in Entwicklung und noch nicht öffentlich erhältlich.

Was bedeutet KI-nativ bei Circuit Forge?

KI-nativ heißt bei Circuit Forge, dass die KI von Anfang an eingeplant ist, aber nie das letzte Wort hat. Jedes maschinenlesbare Ergebnis ist ein versioniertes Dokument, das ein Programm oder Agent lesen kann. Der Assistent arbeitet über typisierte Werkzeuge des Simulators, und jede Änderung, die er vorschlägt, bewerten deterministische Prüfungen, bevor jemand sie übernimmt. elsyQ baut Circuit Forge nach demselben Grundsatz wie seine anderen Systeme: Das Modell schlägt vor, deterministischer Code prüft und rechnet.

Rechnet die KI die Simulation?

In Circuit Forge rechnet der Solver, den elsyQ selbst in Rust geschrieben hat, und die Engine enthält keinen Aufruf eines Sprachmodells. Der Assistent startet Analysen über Werkzeuge und liest die Zahlen, die der Simulator zurückgibt. Ob ein Entwurf als verifiziert gilt, entscheiden die deterministischen Prüfungen der Engine.

Kann ich Circuit Forge schon nutzen?

Circuit Forge ist in Entwicklung und noch nicht öffentlich erhältlich. elsyQ entwickelt es für Windows, macOS und Linux. Einen Termin nennen wir noch nicht. Wenn Sie Frühzugang möchten, schreiben Sie uns über das Kontaktformular oder per E-Mail, woran Sie arbeiten. Wir melden uns, wenn eine Vorabversion zu Ihrem Einsatz passt.

Welche Netzlisten liest Circuit Forge?

Circuit Forge liest SPICE-Netzlisten und Teile erweiterter Dialekte. Was die Engine nicht unterstützt, etwa verschlüsselte Modelle oder .control-Blöcke, lehnt sie mit Namen ab, statt es still zu übergehen. Am Import von Schaltplänen im .qsch-Format und aus Altium arbeitet elsyQ derzeit, der Import aus KiCad und LTspice ist geplant.

Wohin gehen meine Schaltungsdaten?

Bei Circuit Forge, dem Simulator von elsyQ, läuft die Simulation lokal auf Ihrem Rechner. Für den Assistenten hinterlegen Sie einen eigenen API-Schlüssel für Anthropic oder OpenAI, gespeichert im Schlüsselspeicher des Betriebssystems. Ihre Schaltung geht nur an diesen Anbieter, solange sie an die Unterhaltung angehängt ist. Das regelt ein Schalter je Unterhaltung, der ab Werk eingeschaltet ist; die Voreinstellung lässt sich ändern. Gespräche werden lokal und unverschlüsselt gespeichert, und auch das lässt sich abschalten.

Ist ein verifizierter Entwurf garantiert funktionsfähig?

Ein verifizierter Entwurf in Circuit Forge ist nicht garantiert funktionsfähig: Verifiziert heißt, dass der Vertrag, den Sie übernommen haben, in der Simulation mit diesem Build der Engine hält. Eine Garantie für die gebaute Hardware ist das nicht. elsyQ empfiehlt, Toleranzen, Temperatur und Ausbeute in den Vertrag aufzunehmen und die aufgebaute Schaltung zu messen.

Markenhinweis Genannte Namen Dritter (Anthropic, OpenAI, Altium, KiCad, LTspice, Windows, macOS, Linux) und genannte Dateiformate sind Kennzeichen ihrer jeweiligen Inhaber und bezeichnen hier nur Anbieter, Programme oder Formate. Circuit Forge ist mit ihnen nicht verbunden und wird von ihnen weder unterstützt noch gesponsert.

Frühzugang

Frühzugang zu Circuit Forge oder ein Werkzeug dieser Art für Ihren eigenen Ablauf?

Circuit Forge ist noch nicht öffentlich erhältlich. Erzählen Sie uns, woran Sie arbeiten. Wir melden uns, wenn eine Vorabversion zu Ihrem Einsatz passt.

In Entwicklung. Noch nicht öffentlich erhältlich. Für Windows, macOS und Linux.