T0 · Auf einen Blick
Wie die Sprache RNL aussieht
Die folgende Notation entspricht dem Sprachstandard 0.3: 46 Schlüsselwörter; als Standardsätze geschrieben lesen sich Anweisungen wie normale Sätze, und sie lassen sich auch auf Chinesisch verfassen. Die Laufzeitbibliothek des Toolkits implementiert sämtliche Schlüsselwörter. Versionen 0.x geben untereinander kein Kompatibilitätsversprechen; Werkzeuge lesen weiterhin Dateien der Version 0.2.
Aufbau einer Anweisung
Zwei Schreibweisen für dieselbe Anweisung
Freitext dient nur dem Menschen; daher kann ein und dieselbe Anweisung als reine Notation oder als Standardsatz geschrieben werden. Maschinen lesen exakt dasselbe, und Werkzeuge können verlustfrei zwischen den Schreibweisen umwandeln.
Referenzpräfixe (Sigils)
Auf einen Blick erkennen, was zur Netzliste und was zu RNL gehört.
Instanz in der Netzlistenur referenziert, nie neu erzeugtNetzein Knoten in der NetzlisteAnschlussnach Name oder nach Position wie #M1:1 (ab 1 gezählt)Port dieser Teilschaltungdefiniert durch .subckt; ein einzelnes # steht für die Teilschaltung selbstName auf dieser Ebeneeinmal pro Ebene gebunden, nur dort sichtbarDefinitionein Symbol, Stil, eine Definition oder Menge; wird nach unten vererbtRolle in einer Definitionwird beim Anwenden durch Objekte ausgefüllt; in einem Symbol steht ein einzelnes ? für die damit gezeichnete InstanzPunkt„_“ überlässt diese Achse dem Solver; %j = (10, 10) ist ein benannter PunktMengegeordnet; entpackt sich in einer anderen Menge um eine Ebene, während {{…}} ein einzelnes Element bleibtBuseine Gruppe indizierter Netze oder Instanzen, etwa #XI<3:0>Kindobjektetwa eine mit key benannte BeschriftungWeiterleitung (Pipe)reicht ein Ergebnis an den nächsten Teil weiter; => %x gibt ihm einen NamenFormen von Anweisungen
Setzt M1 auf (10, 20). Auch eine einzelne Achse genügt, etwa @PLACE(x=10); die andere bleibt dem Solver überlassen.
Geschweifte Klammern fassen eine geordnete Gruppe von Objekten zusammen: M1 und M2 teilen sich dasselbe y.
Runde Klammern direkt nach einem Objekt geben an, welche Rolle der Definition es ausfüllt; „and“ und „are treated“ sind Freitext.
Benennt das von der Anweisung erzeugte Objekt, sodass %g0 später verwendet werden kann, etwa zum Platzieren; => %g0 am Ende bewirkt dasselbe.
Jeder Abschnitt reicht sein Ergebnis an den nächsten weiter: erst platzieren, dann links-rechts spiegeln.
Ein Eintrag mit durch Semikolons getrennten Anweisungen. Der Eintragskopf gilt für jede Anweisung darin: author hält fest, wer ihn geschrieben hat, und priority legt die Standardpriorität fest (außer für AS und ATTACH, die die Priorität des Eintrags nur dann erben, wenn sie „disabled“ lautet).
Schlüsselwortfamilien
Die 46 Schlüsselwörter gliedern sich in neun Familien. Klicken Sie eines an, um seine Funktion und seinen Standardsatz zu sehen.
Fünf Layoutbedingungen
Jede Layoutabsicht lässt sich auf diese fünf Relationen zurückführen: Die ersten vier wirken auf x- oder y-Koordinaten, die fünfte auf Ausrichtungen. Eine Bedingung, die nur eine Achse nennt, gibt keine Richtung vor; erst eine Richtungsangabe wie "left-to-right" legt die Reihenfolge fest.
Ausrichten (Align): gleiches y, in einer Zeile.
Reihenfolge (Order): strikt entlang x. Nur mit Achsenangabe erfüllen sowohl Vorwärts- als auch Rückwärtsreihenfolge die Bedingung; "left-to-right" legt die Richtung fest.
Gleichmäßig verteilen (Distribute): gleiche Abstände zwischen Nachbarn, etwa um den Fußtransistor zu zentrieren.
Abstand (Distance): B mindestens 3 Einheiten rechts von A; mit "x" als Richtung darf jedes der beiden zuerst stehen.
Ausrichtungsrelation: B ist das links-rechts gespiegelte Abbild von A; wohin beide jeweils zeigen, entscheidet der Solver.
Wie eine Schaltungsebene wirksam wird
Sobald eine gesamte Ebene eingelesen ist, wird sie in neun festen Phasen verarbeitet. Deshalb darf ein Name schon vor seiner Definition verwendet werden und eine fehlerhafte Anweisung betrifft nur sich selbst; durch Regeln erzeugte Objekte – wie die vom Standardpaket ergänzten Massen – erhalten dennoch regulär ihre Symbole und Positionen.
SprachüberblickNeun interaktive Abschnitte: Sätze, Definitionen, Vorgaben des Standardpakets, Mengen und Auswahlen, Leitungen, Text, Ausrichtung, Priorität und Kopfeintrag.T1 · Sätze
Anweisungen lesen sich wie Fakten: Notation und Sätze
Maschinen lesen nur die Notation: Referenzen mit # & % $, Schlüsselwörter mit @, Parameter in runden Klammern, geschweifte Klammern, Semikolons und =>. Die Wörter dazwischen sind Freitext, ob vorhanden oder nicht. Die Standardsätze geben jedem Schlüsselwort feste Begleitwörter, sodass sich gleichartige Anweisungen überall gleich lesen; das chinesische Alias-Paket überträgt dieselben Sätze ins Chinesische.
- Maschinen lesen
- Bedeutung
Wie die Standardsätze aufgebaut sind
- Fakten statt BefehleEine Anweisung beschreibt, was in der Zeichnung gilt, nicht einen auszuführenden Befehl. Objekte bilden das Subjekt, das Schlüsselwort das Verb oder Substantiv, Parameter seine Werte; ergänzt werden nur Bindewörter wie is, are, has und there is.
- Nicht mehr behaupten, als dastehtKeine Wörter, die mehr versprechen als die Anweisung selbst, wie must, only oder required: Menschliche Leser verlassen sich darauf, während Maschinen sie ignorieren.
- Erläuternder ZusatzAuf einen Code oder eine Achse kann „, i.e., …“ zur Erklärung der Bedeutung folgen:
#M2 @ORIENT("MX"), i.e., flipped upside down. - Was Freitext enthalten darfAußerhalb runder Klammern darf zwischen Tokens alles stehen außer @ # & % $ ? " ; = { } ( ) [ ] < >, einschließlich Satzzeichen; vor jedem @ muss ein Leerzeichen stehen.
Vier typische Stolpersteine
Eine Referenz inmitten von Freitext bleibt eine Referenz, während ein Name ohne Präfix zu Freitext wird.
Der Freitext M3 hat denselben Namen wie die Instanz #M3; fehlt hier ein Präfix?
M3 hat kein #, ist also Freitext: Nur M1 und M2 werden ausgerichtet.
Keine Meldung: Dies ist vollkommen gültig.
#M2 bleibt auch innerhalb der „Erklärung“ ein Objekt: PLACE erhält zwei Objekte und platziert beide, sodass auch M2 bei x = 0 landet. Reine Kommentare gehören in /* */.
Auf eine Referenz folgen . und ein Name: Anschlüsse verwenden :, daher ist .d hier Freitext.
Dies verweist auf M1 selbst statt auf seinen Drain; da CURRENT nur Anschlüsse akzeptiert, schlägt die Anweisung fehl. Schreiben Sie #M1:d.
Auf eine Referenz folgt !: Ein Name mit diesem Zeichen muss in Anführungszeichen stehen, etwa &"vdd!".
Ohne Anführungszeichen ist dies das Netz vdd gefolgt vom Freitext „!“, und auf dieser Ebene gibt es kein Netz vdd.
Eine vollständige Datei
Der Fünf-Transistor-OTA aus der Einführung mit der vollständigen Datei in Schritt 2.
T2 · Definitionen
AS sagt, was die Dinge sind; ATTACH sagt, was ihnen hinzugefügt wird
Eine Definition (@DEFINE) besitzt Rollen, Parameter und einen Rumpf. Ihre Anwendung mit AS oder ATTACH erzeugt ein Anwendungsobjekt (Usage), das benannt und ausgewählt werden kann. Differenzpaare, gespiegelte Paare, Massen und Portsymbole entstehen alle auf diese Weise, und ihre Definitionen stehen im Standardpaket.
Die Objekte bilden gemeinsam das Ganze. Die Definition steht am Ende, und die Objekte füllen ihre Rollen: M1 füllt in_p, M2 füllt in_n.
Das Element wird den Objekten hinzugefügt. Die Definition steht am Anfang: An Netz vss wird eine Masse ergänzt; sie dient nur der Anzeige und stellt keine elektrische Verbindung her.
Was Dinge sind und wie sie gezeichnet werden
$CURRENT_MIRROR hat einen leeren Rumpf: Seine Anwendung vermerkt „dies ist ein Stromspiegel“ und ändert nichts an der Zeichnung. $MIRRORED enthält Bedingungen im Rumpf; beim Anwenden werden die Rollen durch die Objekte ersetzt und die Bedingungen in diese Ebene expandiert. $DIFFERENTIAL_PAIR vereint beides: Es vermerkt ein Differenzpaar, und sein Rumpf setzt den Fußtransistor mittig unter das Paar. Alle Bedingungen in den Rümpfen des Standardpakets haben die Priorität low: Was der Autor schreibt, hat Vorrang, und PRIORITY auf einer Anwendung schaltet sie ab.
Eigene Definition schreiben
Im Rumpf werden Rollen als ?a und Parameter als ?gap geschrieben. Beim Anwenden stehen Parameter in den runden Klammern von AS; ohne sie gilt der Standardwert. Verschieben Sie den Regler für gap und beobachten Sie, wie sich Datei und Zeichnung gemeinsam ändern.
min=?gap ist ein Mindestabstand: Ein Solver darf sie weiter auseinanderrücken; diese Zeichnung zeigt die dichteste Anordnung.
Definitionen im Standardpaket
Die Sprache selbst weiß nichts von Differenzpaaren. Dies sind gewöhnliche, in RNL geschriebene Definitionen des Standardpakets; klicken Sie eine an, um ihren Quelltext zu sehen. Eine gleichnamige Definition in einer Datei überdeckt sie.
T3 · Standardpaket
Selbst wenn Sie nichts schreiben, entsteht eine Zeichnung
Das Standardpaket ist eine RNL-Datei mit Standardsymbolen, Stilen, Definitionen und Ergänzungsregeln. Es wird vor jeder Datei geladen, sodass alles in einer Datei Geschriebene es überschreiben kann; den Inhalt der einzelnen Pakete zeigt die Galerie der Standardpakete. Die Emitterschaltung unten beginnt als reine Netzliste; schalten Sie durch die beiden Voreinstellungen, um drei RNL-Zeilen hinzuzufügen und zu beobachten, wie sich die automatische Ergänzung des Standardpakets ändert (grau dargestellt).
Standardsymbole
In einer SPICE-Netzliste werden Symbole zuerst nach dem ersten Buchstaben des Instanznamens und dann nach dem Modelltyp gewählt; in einer Spectre-Netzliste nach Master und Modelltyp. Ein SET-SYMBOL in einer Datei folgt später und überschreibt diese Vorgaben.
| Instanzen | Symbol | Anschlüsse |
|---|---|---|
R* C* L* | $RESISTOR $CAPACITOR $INDUCTOR | p n |
V* I* | $VOLTAGE_SOURCE $CURRENT_SOURCE | p n |
D* | $DIODE | a k |
E* G* | $VCVS_4TERM $VCCS_4TERM | p n cp cn |
M* | $NMOS_4TERM; Typ pmos $PMOS_4TERM | d g s b |
Q* | $NPN; Typ pnp $PNP | c b e |
Die Symbole der übrigen Elemente wie F, H, B, S, W, J, T und U sowie das Aussehen jedes Symbols finden Sie in der Galerie der Standardpakete.
Ergänzungsregeln (Auszug)
Das Standardpaket ist selbst in RNL geschrieben. Einige Mengen dienen als Anknüpfungspunkte für Dateien: Fügt man Elemente hinzu oder entfernt sie, passt sich die Ergänzung automatisch an.
T4 · Mengen und Auswahlen
Mengen entpacken sich um eine Ebene; Auswahlen wirken als Regeln
Geschweifte Klammern bilden eine geordnete Menge. Wird eine Menge innerhalb einer anderen Menge referenziert, bringt sie ihre einzelnen Elemente ein; soll sie als ein einziges Element erhalten bleiben, umschließt man sie mit einem weiteren Klammerpaar. Auch durch eine Auswahl (Selection) gefundene Objekte bilden eine Menge, und eine Auswahl wird auf ihrer eigenen Ebene sowie je einmal auf jeder Ebene darunter ausgewertet.
Entpacken oder als ein Element behalten
Angenommen, %s1 = {#M1 #M2} und %s2 = {#M3 #M4}. In unserem LLM-Schreibbenchmark erzeugten rund 15 Durchläufe die linke Form, obwohl die rechte gemeint war. Klicken Sie auf „Andere Anordnung“, um zu sehen, welche Platzierungen jede Form zulässt.
Elemente:M1 M2 M3 M4
Vier einzeln nacheinander geordnete Instanzen: nur M1 M2 M3 M4 oder genau umgekehrt.
Elemente:{M1 M2} {M3 M4}
Die beiden Gruppen werden nach ihren Mittelpunkten geordnet; innerhalb jeder Gruppe ist die Reihenfolge beliebig.
Nach Bedingung auswählen
Eine Auswahl sucht Objekte aus einem Bereich anhand einer Bedingung heraus: Mit # ist der Bereich die gesamte Ebene, mit einem Netz sind es die an dieses Netz angeschlossenen Objekte. Klicken Sie eine Anweisung an, um zu sehen, was sie auswählt.
Einmal auf jeder Ebene
Eine Regel wird wie eine Definition behandelt: Auf der obersten Ebene geschrieben, wird sie auf der obersten Ebene und je einmal in jeder Teilschaltung darunter ausgewertet, wobei sie jeweils nur die Objekte der betreffenden Ebene betrachtet. Mit recursive=false wirkt sie nur auf ihrer eigenen Ebene.
T5 · Leitungen
Nur ein gemeinsamer Punkt verbindet Leitungen
WIRE nimmt ein Netz und eine geordnete Liste von Punkten entgegen, jeweils ein Anschluss oder ein Punktobjekt. Das Netz dient nur der Zuordnung; die elektrischen Verbindungen werden weiterhin durch die Netzliste definiert. Ob gezeichnete Leitungen miteinander verbunden sind, hängt allein davon ab, ob sie sich dasselbe Punktobjekt oder denselben Anschluss teilen.
Sechs Leitungsmodi
Jeder Punkt der Liste wird durchlaufen; wie eine Leitung zwischen zwei Nachbarpunkten verläuft, bestimmt mode. Abgesehen von auto ist jeder Modus eine strikte geometrische Vorschrift, der Viewer exakt folgen. Klicken Sie in die Zeichnung, um den Endpunkt zu verschieben.
Busse, Abzweige und Bündel
Netzlisten kennen keine Busse: Ein Bus ist lediglich eine Darstellungsweise, bei der mehrere Netze als eine dicke Linie gezeichnet werden. Teilt sich eine einzelne Leitung einen Punkt mit dem Bus, entsteht ein Abzweig (Tap). Ein Bündel (BUNDLE) zeichnet eine Gruppe von Instanzen als ein gemeinsames Symbol, dessen Pins für die gleichnamigen Anschlüsse der einzelnen Elemente stehen.
Wer den Pfad nicht selbst angeben möchte, übergibt mit &D<1> @ROUTE das gesamte Netz an den Solver: Verzweigungen, Pfade und Knotenpunkte legt dieser dann selbst fest.
T6 · Text
Text an einem Objekt ist eine Beschriftung; an einem Punkt eine Anmerkung
Woran TEXT gehängt wird, entscheidet über drei Dinge: wessen Eigenschaften ${…} ausliest, wo der Text standardmäßig platziert wird und – bei Angabe eines key – wessen Kindobjekt er ist. Die eigene Position des Textes ist davon unabhängig und kann mit PLACE oder über dx und dy gesetzt werden.
Textauszeichnung
Die Textauszeichnung nutzt eine kleine Teilmenge von LaTeX, die Sprachmodelle gut beherrschen. Tief- und Hochstellungen benötigen geschweifte Klammern, sodass g_m unverändert angezeigt wird; ${…} liest Eigenschaften des Objekts, an dem der Text hängt, hier M1 (W=2u L=0.5u). Ein unbekannter Befehl wird mit einer Warnung so angezeigt, wie er geschrieben wurde, und der Text bleibt gültig.
T7 · Ausrichtung
x nach rechts, y nach oben; acht Ausrichtungscodes
Koordinaten sind Rastereinheiten mit y nach oben, genau wie in Virtuoso. Eine Ausrichtung wirkt um den Ursprung des Symbols: Pinpositionen und Abgangsrichtungen der Leitungen drehen oder spiegeln sich mit, die zugehörigen Anschlüsse bleiben dieselben. Nur diese acht Codes sind zulässig; R90 dreht gegen den Uhrzeigersinn, und MYR90 sowie MXR90 spiegeln zuerst und drehen danach.
Ausrichtungsrelationen
ORIENT-RELATION legt keine absolute Richtung fest, sondern nur das Verhältnis: Die Ausrichtung von B ergibt sich aus der von A, gefolgt von dieser Transformation. $MIRRORED nutzt "MY": Wie auch immer A gedreht wird, B ist sein links-rechts gespiegeltes Abbild.
T8 · Priorität
Konflikte sind keine Fehler: erst zählt die Priorität, dann die Reihenfolge
Jeder geometrische Fakt besitzt eine Priorität: disabled, low, normal (Standard) oder high. Fakten werden in der Reihenfolge ihrer Priorität (höchste zuerst) und innerhalb derselben Priorität in umgekehrter Schreibreihenfolge (spätere zuerst) aufgenommen; jeder Fakt bleibt erhalten, sofern er nicht den bereits behaltenen widerspricht. Ein PLACE besteht aus zwei Fakten, x und y, die unabhängig voneinander verworfen werden können; aus einer Anwendung expandierte Fakten nehmen in der Anweisungsreihenfolge die Position der Anweisung ein, die die Anwendung erzeugt.
Wie drei Einträge zusammenspielen
Semantik und Bedingungen, standardmäßig normal. Nach Belieben bearbeitbar.
Koordinaten und Leitungen, Priorität high. Wird bei jedem Lösen als Ganzes ersetzt; hash speichert den Hashwert der gelösten Eingabe.
Manuelle Änderungen werden dahinter angehängt, ebenfalls mit Priorität high: Da innerhalb einer Prioritätsstufe das Spätere gewinnt, überschreiben sie den Solver.
Ändert sich die Eingabe, sodass der Hash nicht mehr passt, wird das alte Ergebnis weiterhin angezeigt; der Viewer schlägt lediglich ohne Fehlermeldung ein erneutes Lösen vor. Beim nächsten Lösen gelten die high-Koordinaten des Editors als feste Positionen, an die sich alles Übrige anpasst.
T9 · Kopfeintrag
Der Kopfeintrag: Version, Alias-Pakete, Bauteilanschlüsse
Der Kopfeintrag ist optional; wird er angegeben, muss er der erste Eintrag der Datei sein und außerhalb jeder Teilschaltung stehen, und es darf höchstens einen geben. Er wird stets in Standardschreibweise ohne Aliasse gelesen. Fehlt er, wird die Datei mit der Standardversion des Werkzeugs gelesen, und Werkzeuge fügen den Kopfeintrag beim Speichern hinzu.
Anschlussnamen für PDK-Bauteile
Eine Teilschaltung, die in der Netzliste nicht definiert ist – etwa sky130_fd_pr__nfet_01v8 aus einem PDK –, hat keine bekannten Anschlussnamen, sodass ihre Anschlüsse nur über den Positionsindex (etwa :1) referenziert werden können. @DEVICE deklariert ihre Anschlussnamen und ordnet Instanzen über Namens- und Modellmuster zu.
E · Beispiele
Einige kompakte Beispiele
Links steht die Datei, rechts die Zeichnung. Fahren Sie mit der Maus über eine Zeile, um zu sehen, welchen Teil der Zeichnung sie steuert; fahren Sie über ein Element der Zeichnung, um die Zeilen hervorzuheben, die darauf verweisen.