RNLRich Netlist
FR

Translated from English by AI; it may contain errors. Report an issue · The English terms are the normative ones. Glossary

RICH NETLIST · LANGUAGE 0.3Série standard 0.3

Présentation du langage

Le langage d’un coup d’œil, puis neuf sections, une idée par section, et quelques exemples, tous interactifs

L’introduction explique pourquoi RNL existe ; cette présentation montre à quoi ressemble le langage, puis détaille les règles de la norme du langage 0.3 que l’introduction ne développe pas. Chaque exemple a été vérifié sans erreur avec l’outil rnl check de la chaîne d’outils, à l’exception de ceux comportant des erreurs volontaires ; les dessins ont été placés à la main pour cette page.

  1. T0D’un coup d’œilAnatomie d’une instruction, familles de mots-clés, comment un niveau prend effet
  2. T1PhrasesNotation et phrases standards
  3. T2DéfinitionsAS et ATTACH ; écrire la sienne
  4. T3Valeurs par défautCe qu’on obtient sans rien écrire
  5. T4Ensembles et sélectionsDépliage d’un niveau, sélection par condition, évaluation par niveau
  6. T5FilsPoints partagés, six modes de tracé, bus, faisceaux
  7. T6TexteÉtiquettes, annotations, clés, balisage
  8. T7Orientationy vers le haut, huit codes, relations d’orientation
  9. T8PrioritéRésolution des conflits ; cohabitation de trois enregistrements
  10. T9En-têteVersion, paquets d’alias, bornes des composants de PDK
  11. EExemplesHiérarchie, symboles personnalisés, règles et complétion, modifications et conflits

T0 · D’un coup d’œil

À quoi ressemble le langage RNL

La notation ci-dessous est celle de la norme du langage 0.3 : 46 mots-clés ; écrites sous forme de phrases standards, les instructions se lisent comme de la prose, et elles peuvent aussi s’écrire en chinois. L’environnement d’exécution de la chaîne d’outils implémente chaque mot-clé. Les versions 0.x ne promettent aucune compatibilité entre elles ; les outils lisent toujours les fichiers en 0.2.

Anatomie d’une instruction

Mot-clé Objet de netlist Nom local Définition Texte libre
* @RNL(author="designer") { * Input pair: %dp1 = #M1(in_p) and #M2(in_n) treated @AS $DIFFERENTIAL_PAIR; * }
AstuceSurvolez n’importe quelle partie, ou appuyez sur Tab pour les parcourir.

Deux façons d’écrire une même instruction

Le texte libre n’étant destiné qu’aux humains, une même instruction peut s’écrire en notation brute ou sous forme de phrase standard. Les machines lisent exactement la même chose, et les outils peuvent convertir d’un style à l’autre dans les deux sens.

Notation
Anglais

Préfixes de référence

Distinguez d’un coup d’œil ce qui appartient à la netlist et ce qui appartient à RNL.

Instance dans la netlistréférencée, jamais créée
Netun nœud (équipotentielle) dans la netlist
Bornepar nom, ou par position telle que #M1:1 (à partir de 1)
Port de ce sous-circuitdéfini par .subckt ; un # isolé désigne le sous-circuit lui-même
Nom à ce niveaulié une seule fois par niveau, visible uniquement à ce niveau
Définitionun symbole, un style, une définition ou un ensemble ; hérité vers le bas
Rôle dans une définitionrempli par des objets lors de l’application ; dans un symbole, un ? isolé désigne l’instance dessinée avec lui
Point« _ » laisse cet axe au solveur ; %j = (10, 10) est un point nommé
Ensembleordonné ; se déplie d’un niveau à l’intérieur d’un autre ensemble, tandis que {{…}} reste un seul membre
Busun groupe de nets ou d’instances indicés, tel que #XI<3:0>
Objet enfanttel qu’une étiquette nommée avec key
Chaînagetransmet un résultat à l’étape suivante ; => %x le nomme

Formes d’instructions

Objet + mot-clé

Place M1 en (10, 20). Un seul axe suffit aussi, comme dans @PLACE(x=10) ; l’autre est laissé au solveur.

Ensemble

Les accolades contiennent un groupe ordonné d’objets : M1 et M2 partagent le même y.

Rôles

Les parenthèses placées juste après un objet indiquent quel rôle de la définition il occupe ; « and » et « are treated » sont du texte libre.

Nommage

Nomme l’objet créé par l’instruction, afin que %g0 puisse être réutilisé plus loin, par exemple pour le placer ; => %g0 à la fin fait de même.

Chaînage

Chaque étape transmet son résultat à la suivante : d’abord le placer, puis lui appliquer un miroir gauche-droite.

Enregistrement

Un enregistrement, avec des instructions séparées par des points-virgules. L’en-tête d’enregistrement s’applique à chaque instruction qu’il contient : author consigne qui l’a écrit, et priority définit la priorité par défaut (sauf pour AS et ATTACH, qui n’héritent de la priorité de l’enregistrement que lorsqu’elle vaut « disabled »).

Familles de mots-clés

Les 46 mots-clés se répartissent en neuf familles. Cliquez sur l’un d’eux pour voir son rôle et sa phrase standard.

Cinq contraintes de placement

Toute intention de placement se ramène à ces relations : les quatre premières agissent sur les coordonnées x ou y, la cinquième sur les orientations. Une contrainte qui ne nomme qu’un axe ne fixe aucun sens ; une direction telle que "left-to-right" fixe quel élément vient en premier.

Alignement : même y, sur une seule ligne horizontale.

Ordre : strictement le long de x. Avec seulement l’axe, l’ordre direct et l’ordre inverse conviennent tous deux ; "left-to-right" fixe le sens.

Distribution : pas égaux entre voisins, par exemple pour centrer le transistor de pied.

Distance : B au moins 3 unités à droite de A ; avec "x" comme direction, l’un ou l’autre peut venir en premier.

Relation d’orientation : B est l’image en miroir gauche-droite de A ; le sens dans lequel chacun est tourné est laissé au solveur.

Comment un niveau de circuit prend effet

Une fois tout un niveau lu, il est traité en neuf phases fixes. C’est pourquoi un nom peut être utilisé avant d’être défini et qu’une instruction erronée n’affecte qu’elle-même ; les objets générés par des règles, tels que les masses ajoutées par le paquet standard, reçoivent eux aussi des symboles et des positions.

Présentation du langageNeuf sections pratiques : phrases, définitions, valeurs par défaut du paquet standard, ensembles et sélections, fils, texte, orientation, priorité et en-tête.

T1 · Phrases

Les instructions se lisent comme des faits : notation et phrases

Les machines ne lisent que la notation : les références commençant par # & % $, les mots-clés commençant par @, les paramètres entre parenthèses, les accolades, les points-virgules et =>. Les mots placés entre eux sont du texte libre, qu’ils soient présents ou non. Les phrases standards donnent ses mots à chaque mot-clé, afin que les instructions d’une même sorte se lisent partout de la même façon ; le paquet d’alias chinois traduit ces mêmes phrases en chinois.

Les machines lisent
Se lit comme

Comment sont écrites les phrases standards

  • Des faits, pas des ordresUne instruction énonce ce qui est vrai dans le dessin, et non une action à accomplir. Les objets sont le sujet, le mot-clé est le verbe ou le nom, les paramètres sont ses valeurs ; seuls des mots de liaison tels que is, are, has et there is sont ajoutés.
  • Rien de plus que ce qui est ditAucun mot qui affirme plus que l’instruction, tel que must, only ou required : les lecteurs humains les croient, tandis que les machines les ignorent.
  • Une gloseUn code d’orientation ou un axe peut être suivi de « , i.e., … » précisant ce qu’il signifie : #M2 @ORIENT("MX"), i.e., flipped upside down.
  • Ce que peut contenir le texte libreEn dehors des parenthèses, tout caractère hormis @ # & % $ ? " ; = { } ( ) [ ] < > peut figurer entre les jetons, y compris la ponctuation ; une espace doit précéder chaque @.

Quatre pièges courants

Une référence placée dans du texte libre reste une référence, tandis qu’un nom sans son préfixe devient du texte libre.

Le texte libre M3 porte le même nom que l’instance #M3 ; manque-t-il un préfixe ?

M3 n’a pas de #, c’est donc du texte libre : seuls M1 et M2 sont alignés.

Aucun message : cette écriture est parfaitement valide.

#M2 reste un objet même à l’intérieur de l’« explication » : PLACE reçoit deux objets et place chacun d’eux, de sorte que M2 se retrouve lui aussi en x = 0. Mettez les simples remarques entre /* */.

Une référence est suivie de . et d’un nom : les bornes utilisent :, donc .d est ici du texte libre.

Cela désigne M1 lui-même, et non son drain ; CURRENT n’acceptant que des bornes, l’instruction échoue. Écrivez #M1:d.

Une référence est suivie de ! : un nom contenant ce caractère doit être mis entre guillemets, comme dans &"vdd!".

Sans guillemets, il s’agit du net vdd suivi du texte libre « ! », et ce niveau n’a pas de net vdd.

Un fichier complet

L’OTA à cinq transistors de l’introduction, montrant le fichier complet à l’étape 2.

ota5t.sp Ouvrir dans la visionneuse

T2 · Définitions

AS dit ce que sont les choses ; ATTACH dit ce qu’on leur ajoute

Une définition (@DEFINE) possède des rôles, des paramètres et un corps. L’appliquer avec AS ou ATTACH produit une utilisation : un objet qui peut être nommé et sélectionné. Paires différentielles, paires en miroir, masses et symboles de port naissent tous de cette façon, et leurs définitions résident dans le paquet standard.

@AS

Les objets forment ensemble la chose. La définition vient en dernier, et les objets remplissent ses rôles : M1 occupe in_p, M2 occupe in_n.

@ATTACH

La chose est ajoutée sur les objets. La définition vient en premier : une masse est ajoutée sur le net vss ; elle n’existe que pour l’affichage et ne crée aucune connexion.

Ce que sont les choses, et comment elles sont dessinées

$CURRENT_MIRROR a un corps vide : l’appliquer note « ceci est un miroir de courant » sans rien changer au dessin. $MIRRORED contient des contraintes dans son corps ; lorsqu’il est appliqué, les rôles sont remplacés par les objets et les contraintes sont développées dans ce niveau. $DIFFERENTIAL_PAIR réunit les deux : il note une paire différentielle, et son corps place le transistor de pied sous le milieu de la paire. Les contraintes des corps du paquet standard sont toutes de priorité low : ce qu’écrit l’auteur passe en premier, et PRIORITY sur une utilisation les désactive.

Application et développement
Dessiné

Écrire sa propre définition

Dans le corps, les rôles s’écrivent ?a et les paramètres ?gap. Les paramètres se placent entre les parenthèses de AS lors de l’application ; sans eux, la valeur par défaut s’applique. Faites glisser le curseur pour modifier gap et observez le fichier et le schéma changer ensemble.

pair.sp
Dessiné

min=?gap est un minimum : un solveur peut les espacer davantage ; ce dessin montre la disposition la plus resserrée.

Définitions dans le paquet standard

Le langage lui-même ignore tout des paires différentielles. Ce sont des définitions ordinaires que le paquet standard écrit en RNL ; cliquez sur l’une d’elles pour la voir. Une définition du même nom dans un fichier les masque.

T3 · Valeurs par défaut

N’écrivez rien, et le schéma se dessine quand même

Le paquet standard est un fichier RNL contenant les symboles, styles, définitions et règles de complétion par défaut. Il est chargé avant chaque fichier, de sorte que tout ce qu’écrit un fichier peut le supplanter ; consultez la galerie des paquets standards pour voir le contenu de chaque paquet. L’étage à émetteur commun ci-dessous commence comme une netlist nue ; parcourez les deux préréglages pour ajouter trois lignes RNL et observer comment évolue la complétion automatique du paquet standard (affichée en gris).

ce.sp
Visionneuse RNL

    Symboles par défaut

    Dans une netlist SPICE, les symboles sont choisis d’abord selon la première lettre du nom de l’instance, puis selon le type du modèle ; dans une netlist Spectre, selon le master et le type du modèle. SET-SYMBOL dans un fichier venant après, il les supplante.

    InstancesSymboleBornes
    R* C* L*$RESISTOR $CAPACITOR $INDUCTORp n
    V* I*$VOLTAGE_SOURCE $CURRENT_SOURCEp n
    D*$DIODEa k
    E* G*$VCVS_4TERM $VCCS_4TERMp n cp cn
    M*$NMOS_4TERM ; type pmos $PMOS_4TERMd g s b
    Q*$NPN ; type pnp $PNPc b e

    Les symboles des autres éléments, tels que F, H, B, S, W, J, T et U, ainsi que l’apparence de chaque symbole, se trouvent dans la galerie des paquets standards.

    Règles de complétion (extrait)

    Le paquet standard est lui-même écrit en RNL. Quelques ensembles servent de points d’ancrage au fichier : ajoutez-y ou retirez-en des éléments, et la complétion suit.

    T4 · Ensembles et sélections

    Les ensembles se déplient d’un niveau ; les sélections sont des règles

    Les accolades écrivent un ensemble ordonné. Un ensemble référencé à l’intérieur d’un autre ensemble y apporte ses membres ; pour le conserver comme un seul membre, entourez-le d’une seconde paire d’accolades. Les objets retenus par une sélection forment eux aussi un ensemble, et une sélection est évaluée à son propre niveau ainsi qu’une fois à chaque niveau inférieur.

    Déplier, ou garder comme un seul membre

    Supposons %s1 = {#M1 #M2} et %s2 = {#M3 #M4}. Lors de notre banc d’essai d’écriture par LLM, environ 15 essais ont produit la forme de gauche alors qu’ils voulaient exprimer celle de droite. Appuyez sur « Autre disposition » pour voir quelles dispositions chacune autorise.

    Membres :M1 M2 M3 M4

    Quatre instances ordonnées une par une : uniquement M1 M2 M3 M4, ou l’inverse.

    Membres :{M1 M2} {M3 M4}

    Les deux groupes sont ordonnés selon leurs centres ; à l’intérieur de chaque groupe, n’importe quel ordre convient.

    Sélectionner par condition

    Une sélection choisit des objets dans une portée selon une condition : avec #, la portée est tout le niveau ; avec un net, la portée regroupe les objets connectés à ce net. Cliquez sur une instruction pour voir ce qu’elle sélectionne.

      enable.sp

      Une fois à chaque niveau

      Une règle est traitée comme une définition : écrite au sommet, elle est évaluée au niveau supérieur puis une fois dans chaque sous-circuit inférieur, en n’examinant à chaque fois que les objets de ce niveau. Avec recursive=false, elle ne prend effet qu’à son propre niveau.

      Niveau supérieurM9 nchXA ampXB ampR1
      Sous-circuit ampM1 nchM2 nchM3 pch
      Sous-circuit bias (à l’intérieur de amp)MB nchRB

      T5 · Fils

      Seul un point partagé relie des fils

      WIRE prend un net et une liste ordonnée de points, chacun étant une borne ou un objet point. Le net n’est qu’une indication ; les connexions restent définies par la netlist. Que des fils dessinés se rejoignent ou non dépend uniquement du fait qu’ils partagent le même objet point ou la même borne.

      tee.sp
      Dessiné

      Six modes de tracé

      Chaque point de la liste est parcouru ; la façon dont un fil relie deux points voisins est fixée par mode. Hormis auto, chaque mode est une règle stricte que suivent les visionneuses. Cliquez n’importe où sur le dessin pour déplacer le point d’arrivée.

      Bus, dérivations et faisceaux

      Les netlists n’ont pas de bus : un bus n’est qu’une manière de dessiner plusieurs nets sous la forme d’un unique trait épais. Un fil simple partageant un point avec le bus est une dérivation. Un faisceau (BUNDLE) dessine un groupe d’instances sous la forme d’un seul symbole, dont les broches représentent les bornes de même nom de ses membres.

      bus.sp
      Dessiné

      Pour éviter d’écrire le tracé, &D<1> @ROUTE confie tout le net au solveur : embranchements, tracés et points de jonction sont à sa charge.

      T6 · Texte

      Du texte sur un objet est une étiquette ; sur un point, une annotation

      Ce à quoi s’attache TEXT détermine trois choses : de quel objet ${…} lit les propriétés, où se place le texte par défaut et, avec une clé (key), de quel objet il est l’enfant. La position propre du texte est distincte ; PLACE ou dx et dy permettent de la fixer.

      text.sp
      Dessiné

      Balisage du texte

      Le balisage de texte utilise un petit sous-ensemble de LaTeX que les modèles de langue connaissent bien. Les indices et exposants nécessitent des accolades, de sorte que g_m s’affiche tel quel ; ${…} lit les propriétés de l’objet auquel le texte est attaché, ici M1 (W=2u L=0.5u). Une commande inconnue s’affiche telle qu’elle est écrite avec un avertissement, et le texte reste valide.

      Rendu

      T7 · Orientation

      x vers la droite, y vers le haut ; huit codes d’orientation

      Les coordonnées sont en unités de grille avec y vers le haut, comme dans Virtuoso. Une orientation agit autour de l’origine du symbole : les positions des broches et les directions de départ des fils tournent avec elle, mais pas les bornes auxquelles elles correspondent. Seuls ces huit codes sont acceptés ; R90 tourne dans le sens antihoraire, et MYR90 ainsi que MXR90 appliquent d’abord le miroir, puis la rotation.

      Relations d’orientation

      ORIENT-RELATION ne fixe aucune orientation absolue, seulement la relation : l’orientation de B est celle de A suivie de cette transformation. $MIRRORED utilise "MY" : quelle que soit l’orientation de A, B est son image en miroir gauche-droite.

      T8 · Priorité

      Les conflits ne sont pas des erreurs : la priorité d’abord, l’ordre ensuite

      Chaque fait géométrique possède une priorité : disabled, low, normal (par défaut) ou high. Les faits sont pris par ordre de priorité, la plus haute d’abord, et à priorité égale le dernier écrit d’abord ; chacun est retenu sauf s’il contredit ceux déjà retenus. Un PLACE représente deux faits, x et y, qui peuvent être écartés séparément ; les faits développés à partir d’une utilisation prennent, dans l’ordre des instructions, la position de l’instruction qui crée cette utilisation.

      Comment cohabitent trois enregistrements

      1Concepteur

      Sémantique et contraintes, normal par défaut. Modifiables à volonté.

      2Solveur

      Coordonnées et fils, high. Remplacé d’un bloc à chaque résolution ; hash note l’entrée qu’il a résolue.

      3Éditeur

      Les retouches manuelles sont ajoutées à la suite, également high : à priorité égale, le dernier écrit l’emporte, elles supplantent donc le solveur.

      Lorsque l’entrée change et que l’empreinte hash ne correspond plus, l’ancien résultat continue de s’afficher ; la visionneuse suggère simplement de résoudre à nouveau, sans erreur. Lors de la résolution suivante, les coordonnées high de l’éditeur constituent des positions fixes et tout le reste s’ajuste.

      E · Exemples

      Quelques petits exemples

      Le fichier est à gauche, le schéma à droite. Survolez une ligne pour voir quelle partie du dessin elle contrôle ; survolez une partie du dessin pour marquer les lignes qui s’y réfèrent.

      Visionneuse RNL