T0 · De un vistazo
Qué aspecto tiene el lenguaje RNL
La notación que sigue corresponde al estándar del lenguaje 0.3: 46 palabras clave; escritas como oraciones estándar, las sentencias se leen como prosa y también pueden escribirse en chino. El entorno de ejecución del conjunto de herramientas implementa todas las palabras clave. Las versiones 0.x no prometen compatibilidad entre sí; las herramientas siguen leyendo archivos de la versión 0.2.
Anatomía de una sentencia
Dos maneras de escribir una misma sentencia
El texto libre es solo para las personas, de modo que una misma sentencia puede escribirse como notación escueta o como una oración estándar. Las máquinas leen exactamente lo mismo y las herramientas pueden convertir entre los distintos estilos en cualquier sentido.
Prefijos de referencia
Distingue de un vistazo qué pertenece al netlist y qué pertenece a RNL.
Instancia en el netlistsolo referenciada, nunca creadaRedun nodo del netlistTerminalpor nombre o por posición, como #M1:1 (empezando en 1)Puerto de este subcircuitodefinido por .subckt; un signo # aislado representa el propio subcircuitoNombre en este nivelvinculado una vez por nivel y visible únicamente en élDefiniciónun símbolo, estilo, definición o conjunto; se hereda hacia los niveles inferioresRol en una definiciónocupado por objetos al aplicarse; en un símbolo, un ? aislado representa la instancia dibujada con élPunto“_” deja ese eje al solucionador; %j = (10, 10) es un punto con nombreConjuntoordenado; se expande un nivel dentro de otro conjunto, mientras que {{…}} se mantiene como un único miembroBusun grupo de redes o instancias con índices, como #XI<3:0>Objeto hijocomo una etiqueta nombrada mediante keyTuberíapasa un resultado a la parte siguiente; => %x le asigna nombreFormas de las sentencias
Coloca M1 en (10, 20). También basta con indicar un solo eje, como en @PLACE(x=10); el otro queda a cargo del solucionador.
Las llaves contienen un grupo ordenado de objetos: M1 y M2 comparten la misma coordenada y.
Los paréntesis inmediatamente después de un objeto indican qué rol de la definición ocupa; “and” y “are treated” son texto libre.
Asigna nombre al objeto que crea la sentencia para poder usar %g0 más adelante, por ejemplo al colocarlo; => %g0 al final hace lo mismo.
Cada parte pasa su resultado a la siguiente: primero lo coloca y luego lo refleja de izquierda a derecha.
Un registro, con sentencias separadas por punto y coma. El encabezado del registro se aplica a todas las sentencias que contiene: author registra quién lo escribió y priority establece la prioridad por defecto (salvo en AS y ATTACH, que solo heredan la prioridad del registro cuando es "disabled").
Familias de palabras clave
Las 46 palabras clave se dividen en nueve familias. Haz clic en cualquiera para ver qué hace y su oración estándar.
Cinco restricciones de disposición
Toda intención de disposición se reduce a estas relaciones: las cuatro primeras actúan sobre las coordenadas x o y, y la quinta sobre las orientaciones. Una restricción que solo nombra un eje no fija el sentido; una dirección como "left-to-right" fija cuál va primero.
Alinear: misma coordenada y, en una fila.
Ordenar: estrictamente a lo largo de x. Si solo se indica el eje, tanto el orden directo como el inverso cumplen la restricción; "left-to-right" fija el sentido.
Distribuir: pasos iguales entre vecinos, por ejemplo para centrar la cola.
Distancia: B al menos 3 unidades a la derecha de A; con "x" como dirección, cualquiera de los dos puede ir primero.
Relación de orientación: B es la imagen especular horizontal de A; hacia dónde mira cada uno lo decide el solucionador.
Cómo surte efecto un nivel de un circuito
Una vez leído todo un nivel, se procesa en nueve fases fijas. Por eso un nombre puede utilizarse antes de su definición y una sentencia errónea solo se afecta a sí misma; los objetos generados por reglas, como las tierras que añade el paquete estándar, reciben igualmente símbolos y posiciones.
Recorrido por el lenguajeNueve secciones prácticas: oraciones, definiciones, valores por defecto del paquete estándar, conjuntos y selecciones, cables, texto, orientación, prioridad y encabezado.T1 · Oraciones
Las sentencias se leen como hechos: notación y oraciones
Las máquinas leen únicamente la notación: referencias que empiezan por # & % $, palabras clave que empiezan por @, parámetros entre paréntesis, llaves, puntos y coma y =>. Las palabras situadas entre ellos son texto libre, estén o no presentes. Las oraciones estándar asignan sus palabras a cada palabra clave para que las sentencias de un mismo tipo se lean igual en todas partes; el paquete de alias en chino convierte esas mismas oraciones al chino.
- Las máquinas leen
- Se lee como
Cómo se escriben las oraciones estándar
- Hechos, no órdenesUna sentencia expresa qué se cumple en el dibujo, no una acción por ejecutar. Los objetos son el sujeto, la palabra clave es el verbo o sustantivo y los parámetros son sus valores; solo se añaden palabras de enlace como is, are, has y there is.
- Ni más ni menos de lo que diceNo se emplean palabras que afirmen más que la propia sentencia, como must, only o required: los lectores las toman al pie de la letra, pero las máquinas las ignoran.
- Una glosaUn código o eje puede ir seguido de “, i.e., …” para explicar su significado:
#M2 @ORIENT("MX"), i.e., flipped upside down. - Qué puede contener el texto libreFuera de los paréntesis, entre los tokens puede ir cualquier carácter salvo @ # & % $ ? " ; = { } ( ) [ ] < >, incluida la puntuación; delante de cada @ debe haber un espacio.
Cuatro descuidos frecuentes
Una referencia dentro del texto libre sigue siendo una referencia, mientras que un nombre sin su prefijo se convierte en texto libre.
El texto libre M3 tiene el mismo nombre que la instancia #M3; ¿falta un prefijo?
M3 no lleva #, por lo que es texto libre: solo se alinean M1 y M2.
Sin mensaje: esta sentencia es perfectamente válida.
#M2 sigue siendo un objeto incluso dentro de la “explicación”: PLACE recibe dos objetos y coloca cada uno, de modo que M2 también acaba en x = 0. Pon los comentarios meramente explicativos entre /* */.
Una referencia va seguida de . y un nombre: los terminales usan :, por lo que .d aquí es texto libre.
Esto hace referencia al propio M1, no a su drenador; CURRENT solo acepta terminales, así que la sentencia falla. Escribe #M1:d.
Una referencia va seguida de !: un nombre que contenga ese carácter debe ir entre comillas, como en &"vdd!".
Sin comillas, esto es la red vdd seguida del texto libre “!”, y este nivel no tiene ninguna red vdd.
Un archivo completo
El OTA de cinco transistores de la introducción, mostrando el archivo completo en el paso 2.
T2 · Definiciones
AS dice qué son las cosas; ATTACH dice qué se les añade
Una definición (@DEFINE) consta de roles, parámetros y un cuerpo. Al aplicarla con AS o ATTACH se crea un uso: un objeto al que se puede dar nombre y seleccionar. Los pares diferenciales, los pares reflejados, las tierras y las etiquetas de puerto surgen de este modo, y sus definiciones residen en el paquete estándar.
Los objetos juntos forman la estructura. La definición va al final y los objetos ocupan sus roles: M1 ocupa in_p y M2 ocupa in_n.
El elemento se añade sobre los objetos. La definición va al principio: se añade una tierra en la red vss; existe únicamente para la visualización y no crea ninguna conexión.
Qué son las cosas y cómo se dibujan
$CURRENT_MIRROR tiene el cuerpo vacío: aplicarlo registra “esto es un espejo de corriente” y no cambia nada en el dibujo. $MIRRORED contiene restricciones en su cuerpo; al aplicarse, los objetos sustituyen a los roles y las restricciones se expanden en este nivel. $DIFFERENTIAL_PAIR tiene ambas cosas: registra un par diferencial y su cuerpo sitúa la cola centrada debajo del par. Las restricciones de los cuerpos del paquete estándar tienen todas prioridad low: lo que escribe el autor tiene preferencia y PRIORITY sobre un uso las desactiva.
Escribe la tuya propia
En el cuerpo, los roles se escriben ?a y los parámetros ?gap. Los parámetros se pasan entre los paréntesis de AS al aplicarla; si se omiten, se usa el valor por defecto. Arrastra el control deslizante para cambiar gap y observa cómo cambian a la vez el archivo y el dibujo.
min=?gap es un mínimo: un solucionador puede separarlas más; este dibujo muestra la disposición más compacta.
Definiciones en el paquete estándar
El lenguaje en sí no sabe nada de pares diferenciales. Estas son definiciones ordinarias que el paquete estándar escribe en RNL; haz clic en cualquiera para verla. Una definición con el mismo nombre escrita en un archivo tiene prioridad sobre ellas.
T3 · Valores por defecto
Aunque no escribas nada, se dibuja igualmente
El paquete estándar es un archivo RNL que contiene símbolos por defecto, estilos, definiciones y reglas de relleno. Se carga antes de cada archivo, de modo que cualquier cosa escrita en un archivo puede sustituirlo; consulta la galería de paquetes estándar para ver el contenido de cada paquete. La etapa en emisor común de abajo comienza como un netlist escueto; avanza por los dos ajustes predefinidos para añadir tres líneas de RNL y observar cómo cambia el relleno automático del paquete estándar (mostrado en gris).
Símbolos por defecto
En un netlist SPICE, los símbolos se eligen primero según la primera letra del nombre de la instancia y luego según el tipo del modelo; en un netlist Spectre, según el master y el tipo del modelo. SET-SYMBOL en un archivo se evalúa después, por lo que los sustituye.
| Instancias | Símbolo | Terminales |
|---|---|---|
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; tipo pmos $PMOS_4TERM | d g s b |
Q* | $NPN; tipo pnp $PNP | c b e |
Los símbolos de los demás elementos, como F, H, B, S, W, J, T y U, así como el aspecto de cada símbolo, se encuentran en la galería de paquetes estándar.
Reglas de relleno (extracto)
El paquete estándar está escrito en el propio RNL. Unos pocos conjuntos sirven de puntos de enganche para los archivos: basta con añadirles o quitarles miembros para que el relleno se adapte.
T4 · Conjuntos y selecciones
Los conjuntos se expanden un nivel; las selecciones son reglas
Las llaves escriben un conjunto ordenado. Un conjunto referenciado dentro de otro aporta sus miembros; para conservarlo como un único miembro, envuélvelo en otro par de llaves. Los objetos elegidos por una selección también forman un conjunto, y una selección se evalúa en su propio nivel y una vez en cada nivel inferior.
Expandido o como un único miembro
Supongamos %s1 = {#M1 #M2} y %s2 = {#M3 #M4}. En nuestra prueba comparativa de escritura con LLM, unas 15 ejecuciones produjeron la forma de la izquierda cuando pretendían expresar la de la derecha. Pulsa “Otra disposición” para ver qué disposiciones permite cada una.
Miembros:M1 M2 M3 M4
Cuatro instancias ordenadas una por una: solo M1 M2 M3 M4 o el orden inverso.
Miembros:{M1 M2} {M3 M4}
Los dos grupos se ordenan según sus centros; dentro de cada grupo vale cualquier orden.
Selección por condición
Una selección elige objetos dentro de un ámbito según una condición: con #, el ámbito es todo el nivel; con una red, el ámbito son los objetos conectados a esa red. Haz clic en una sentencia para ver qué selecciona.
Una vez en cada nivel
Una regla se trata como una definición: escrita en el nivel superior, se evalúa en el nivel superior y una vez en cada subcircuito inferior, examinando en cada caso únicamente los objetos de ese nivel. Con recursive=false surte efecto solo en el nivel donde está escrita.
T5 · Cables
Solo un punto compartido une cables
WIRE recibe una red y una lista ordenada de puntos, cada uno de los cuales es un terminal o un objeto punto. La red es solo una indicación; las conexiones las sigue definiendo el netlist. Que los cables dibujados se unan depende exclusivamente de si comparten el mismo objeto punto o terminal.
Seis modos de trazado
Se recorren todos los puntos de la lista; cómo va un cable entre dos puntos vecinos lo define mode. Salvo auto, cada modo es una regla estricta que los visores siguen fielmente. Haz clic en cualquier lugar del dibujo para mover el punto final.
Buses, tomas y agrupaciones
Los netlists no tienen buses: un bus es solo una manera de dibujar varias redes como una única línea gruesa. Un cable individual que comparte un punto con el bus constituye una toma (tap). Una agrupación (BUNDLE) dibuja un grupo de instancias como un solo símbolo cuyos pines representan los terminales del mismo nombre de sus miembros.
Para no escribir el trazado a mano, &D<1> @ROUTE confía toda la red al solucionador: las ramificaciones, las rutas y los puntos de unión quedan a su cargo.
T6 · Texto
El texto sobre un objeto es una etiqueta; sobre un punto, una anotación
A qué se acopla TEXT decide tres cosas: de quién lee las propiedades ${…}, dónde se coloca el texto por defecto y, cuando lleva key, de quién es objeto hijo. La posición propia del texto es independiente; puede fijarse con PLACE o mediante dx y dy.
Marcado de texto
El marcado de texto utiliza un pequeño subconjunto de LaTeX que los modelos de lenguaje conocen bien. Los subíndices y superíndices requieren llaves, por lo que g_m se muestra tal cual; ${…} lee las propiedades del objeto al que está acoplado el texto, aquí M1 (W=2u L=0.5u). Un comando desconocido se muestra tal como está escrito junto con una advertencia, y el texto sigue siendo válido.
T7 · Orientación
x hacia la derecha, y hacia arriba; ocho códigos de orientación
Las coordenadas son unidades de cuadrícula con y hacia arriba, igual que en Virtuoso. Una orientación actúa respecto al origen del símbolo: las posiciones de los pines y las direcciones de salida de los cables cambian con ella, pero los terminales a los que corresponden no. Solo se aceptan estos ocho códigos; R90 gira en sentido antihorario, y MYR90 y MXR90 primero reflejan y luego giran.
Relaciones de orientación
ORIENT-RELATION no fija ninguna dirección, sino únicamente la relación: la orientación de B es la de A seguida de esta transformación. $MIRRORED utiliza "MY": gire como gire A, B es su imagen especular de izquierda a derecha.
T8 · Prioridad
Los conflictos no son errores: primero por prioridad y luego por orden
Todo hecho geométrico tiene una prioridad: disabled, low, normal (por defecto) o high. Los hechos se incorporan por orden de prioridad, de mayor a menor, y dentro de una misma prioridad primero el escrito más tarde; cada hecho se conserva a menos que contradiga los ya conservados. Un PLACE consta de dos hechos, x e y, que pueden descartarse por separado; los hechos expandidos a partir de un uso ocupan, en el orden de sentencias, la posición de la sentencia que crea dicho uso.
Cómo conviven tres registros
Semántica y restricciones, con prioridad normal por defecto. Se edita libremente.
Coordenadas y cables, con prioridad high. Se reemplaza en bloque en cada resolución; hash registra la entrada que resolvió.
Las ediciones manuales se añaden a continuación, también con prioridad high: dentro de una misma prioridad prevalece la posterior, de modo que sustituyen a las del solucionador.
Cuando cambia la entrada y el hash deja de coincidir, el resultado anterior se sigue mostrando; el visor solo sugiere volver a resolver, sin dar error. En la siguiente resolución, las coordenadas de prioridad high del editor actúan como posiciones fijas y todo lo demás se reajusta.
T9 · Encabezado
El registro de encabezado: versión, paquetes de alias y terminales de dispositivos
El registro de encabezado es opcional; si se escribe, debe ser el primer registro del archivo, fuera de cualquier subcircuito, y puede haber como máximo uno. Se lee siempre con la grafía estándar, sin alias. Si se omite, el archivo se lee con la versión por defecto de la herramienta, y las herramientas añaden el encabezado al guardar el archivo.
Nombres de terminales para dispositivos de PDK
Un subcircuito no definido en el netlist, como sky130_fd_pr__nfet_01v8 de un PDK, no tiene nombres de terminales conocidos, de modo que solo se puede hacer referencia a sus terminales por índice de posición (como :1). @DEVICE declara los nombres de sus terminales, buscando coincidencias con las instancias mediante patrones de nombre y de modelo.
E · Ejemplos
Unos pocos ejemplos breves
El archivo está a la izquierda y el dibujo a la derecha. Pasa el cursor sobre una línea para ver qué parte del dibujo controla; pasa el cursor sobre una parte del dibujo para marcar las líneas que hacen referencia a ella.