RNLRich Netlist
繁中

The English terms are the normative ones. Glossary

RICH NETLIST · LANGUAGE 0.3標準系列 0.3

語言導覽

先一覽語言全貌,接著透過九個章節每次認識一個概念,最後搭配數個範例,全部皆可實際操作

介紹頁說明了 RNL 為何誕生;本導覽則展示語言的樣貌,並深入介紹語言標準 0.3 中未在介紹頁展開的規則。除刻意示範錯誤的例子外,所有範例皆經工具鏈的 rnl check 檢查且沒有錯誤;圖面座標則為本頁手動排列。

  1. T0語言一覽敘述的結構剖析、關鍵字家族、單一層級如何生效
  2. T1句子與寫法記號與標準例句
  3. T2定義AS 與 ATTACH;自訂定義
  4. T3標準套件預設行為什麼都不寫時會自動完成哪些事
  5. T4集合與篩選展開一層、條件篩選、每個層級各評估一次
  6. T5連線共用點、六種走線模式、匯流排與疊畫
  7. T6文字標籤、標註、key 與文字標記語法
  8. T7朝向y 軸向上、八種朝向代碼、朝向關係
  9. T8優先順序衝突如何取捨;三筆記錄如何共存
  10. T9檔頭記錄語言版本、別名套件、PDK 器件端子名稱
  11. E綜合範例階層結構、自訂符號、規則與自動補齊、手動編輯與衝突

T0 · 語言一覽

RNL 語言的樣貌

下方語法遵循語言標準 0.3:共 46 個關鍵字;依標準例句編寫時,每條敘述讀起來就像流暢的散文,且同樣可以用中文編寫。工具鏈的執行階段程式庫已完整實作所有關鍵字。0.x 各版本之間不承諾相容性,但工具仍可讀取 0.2 的檔案。

剖析一條敘述

關鍵字 網表物件 本層級名稱 定義 自由文字
* @RNL(author="designer") { * Input pair: %dp1 = #M1(in_p) and #M2(in_n) treated @AS $DIFFERENTIAL_PAIR; * }
小提示將游標懸停在任一部分上,或按 Tab 鍵逐一檢視。

同一條敘述的兩種寫法

自由文字僅供人類閱讀,因此同一條敘述可以只寫精簡記號,也可以寫成標準例句。機器讀取到的內容完全一致,且工具可在不同寫法之間雙向轉換。

僅寫記號
英文例句

引用前綴記號(Sigils)

一眼區分哪些屬於網表、哪些屬於 RNL。

網表中的實例僅引用,絕不建立新實例
網路網表中的節點
端子依端子名稱,或依序號如 #M1:1(從 1 開始)
本層子電路的連接埠由 .subckt 定義;單獨一個 # 代表該子電路本身
本層級的名稱每個層級內僅綁定一次,且僅在該層級可見
定義符號、樣式、一般定義或集合;向子層級繼承
定義中的角色套用時由實際物件填入;在符號定義中,單獨一個 ? 代表使用該符號繪製的實例
點座標「_」表示該軸交由求解器決定;%j = (10, 10) 為具名點
集合有序集合;放入另一個集合時會展開一層,而 {{…}} 則維持為單一成員
匯流排帶有索引範圍的一組網路或實例,例如 #XI<3:0>
子物件例如以 key 命名的標籤
管線(Pipe)將前一段的結果傳遞給後一段;=> %x 可為其命名

敘述的常見形態

物件 + 關鍵字

將 M1 置於 (10, 20)。亦可僅指定單一座標軸,如 @PLACE(x=10);另一軸交由求解器決定。

集合

大括號表示一組有序物件:M1 與 M2 具有相同的 y 座標。

角色

緊接在物件後方的括號標明該物件填入定義的哪個角色;「and」與「are treated」為自由文字。

命名

為此敘述產生的物件命名,後續即可引用 %g0(例如指定其位置);寫在末尾的 => %g0 效果相同。

管線(Pipe)

每段將結果傳遞給下一段:先指定位置,再進行左右翻轉。

記錄

一筆記錄,內部敘述以分號分隔。記錄標頭會作用於內部的每一條敘述:author 記錄作者,priority 設定預設優先順序(AS 與 ATTACH 除外,它們僅在記錄的優先順序為 disabled 時才繼承)。

關鍵字家族

46 個關鍵字分為九大家族。點選任一關鍵字即可查看其用途與標準例句。

五種佈局約束

所有佈局意圖最終皆歸結為這五種關係:前四種作用於 x 或 y 座標,第五種作用於朝向。僅指定座標軸的約束不限定方向;指定如 "left-to-right" 的方向才會固定先後順序。

對齊(Align):y 座標相同,排成同一列。

順序(Order):沿 x 軸嚴格排列。僅指定座標軸時,正向與反向皆符合;寫 "left-to-right" 才會固定方向。

等距(Distribute):相鄰成員之間的間距相等,例如使尾端電晶體置中。

距離(Distance):B 在 A 右側至少 3 單位;若方向寫 "x" 則不分左右先後。

朝向關係(Orientation relation):B 為 A 的左右鏡像;至於兩者各自面向哪一邊,則由求解器決定。

單一電路層級如何生效

讀取完整個層級後,會依九個固定階段依序處理。因此名稱可以先使用後定義,格式錯誤的敘述也僅影響自身;由規則產生的物件(例如標準套件自動補上的接地符號)同樣會獲得符號與位置。

語言導覽九個可實際操作的章節:句子、定義、標準套件預設行為、集合與篩選、連線、文字、朝向、優先順序以及檔頭記錄。

T1 · 句子與寫法

敘述即為陳述事實:記號與標準例句

機器只讀取記號:以 # & % $ 開頭的引用、以 @ 開頭的關鍵字、括號內的參數、大括號、分號與 =>。記號之間的文字皆為自由文字,可寫可不寫。標準例句為每個關鍵字配上了固定詞彙,使同類敘述在各處讀起來一致;中文別名套件則能將相同的句子轉為中文。

機器讀取內容
語義解讀

標準例句的編寫原則

  • 陳述事實,而非下達指令每條敘述描述的是圖面上成立的事實,而非要執行的動作。物件為主詞,關鍵字為動詞或名詞,參數為其數值;中間僅加入 is、are、has、there is(或中文的「是、位於、有、按……排列」)等連接詞。
  • 不誇大語義不寫 must、only、「必須」等超出敘述本身語義的字眼:人類讀者會當真,但機器會直接忽略。
  • 補充說明(Gloss)朝向代碼或座標軸後方可加上「, i.e., …」(或中文「,即……」),以白話說明其含義:#M2 @ORIENT("MX"), i.e., flipped upside down。
  • 自由文字可包含的字元在括號之外,除了 @ # & % $ ? " ; = { } ( ) [ ] < > 以外的任何字元(包含中文字與標點符號)皆可寫在記號之間;每個 @ 前方則必須留有一個空格。

四個常見筆誤

寫在自由文字中的引用依然會被視為引用,而漏寫前綴的名稱則會被當成自由文字。

自由文字中的 M3 與實例 #M3 同名;是否漏寫了前綴?

M3 沒有加上 #,因此被視為自由文字:這條敘述只會對齊 M1 與 M2。

無任何提示:這條敘述完全合法。

即使寫在「補充說明」裡,#M2 依然是一個物件:PLACE 接收到兩個物件並分別放置,導致 M2 也被放到 x = 0。單純的註解請寫在 /* */ 中。

引用後方緊接著 . 與名稱:端子應使用 :,此處的 .d 會被當成自由文字。

這條敘述指涉的是 M1 本身而非其汲極;CURRENT 僅接受端子,因此整條敘述失效。請改寫為 #M1:d。

引用後方緊接著 !:包含特殊字元的名稱必須加上雙引號,例如 &"vdd!"。

未加雙引號時,會被剖析為網路 vdd 加上自由文字「!」,而本層級並沒有名為 vdd 的網路。

完整檔案範例

介紹頁中的五電晶體 OTA,此處顯示其在步驟 2 時的完整檔案。

ota5t.sp 在檢視器中開啟

T2 · 定義

AS 說明「是什麼」;ATTACH 說明「為它們套用什麼」

一般定義(@DEFINE)包含角色、參數與定義本體。使用 AS 或 ATTACH 套用定義時,會產生一個「用例(usage)」物件,可供命名與篩選。差動對、鏡像對、接地與連接埠標籤皆是由此機制產生,而它們的定義皆位於標準套件中。

@AS

前方物件共同構成該結構。定義寫在最後,物件依角色填入:M1 填入 in_p,M2 填入 in_n。

@ATTACH

將前方的定義套用至後方的物件上。定義寫在最前面:為網路 vss 套用一個接地符號;它僅供顯示而存在,不產生電氣連接。

「是什麼」與「怎麼畫」

$CURRENT_MIRROR 的定義本體為空:套用它僅記錄「這是一個電流鏡」,不會改變圖面。$MIRRORED 的定義本體內含約束;套用時會將角色替換為實際物件,並將約束展開至本層級。$DIFFERENTIAL_PAIR 則兩者兼備:既記錄差動對語義,其定義本體也將尾端電晶體置於差動對中央下方。標準套件定義本體中的約束優先順序皆為 low:作者編寫的設定優先,且可對用例套用 PRIORITY 將其關閉。

套用與展開
繪製結果

自訂一個定義

在定義本體中,角色寫作 ?a,參數寫作 ?gap。套用時將參數寫在 AS 的括號內;未指定時使用預設值。拖曳滑桿改變 gap,觀察檔案與圖面如何同步變化。

pair.sp
繪製結果

min=?gap 代表最小距離:求解器可以排得更寬;此圖展示的是最緊湊的排列。

標準套件中的定義

RNL 語言本身並不認識差動對。下方這些皆是標準套件以 RNL 編寫的一般定義,點選任一項即可查看其原始定義。檔案中若有同名定義,將會覆寫它們。

T3 · 標準套件預設行為

即使什麼都不寫,依然能繪出原理圖

標準套件是一份 RNL 檔案,內含預設符號、樣式、定義與自動補齊規則。它在每個檔案之前載入,因此檔案中編寫的任何內容都能覆寫它;各套件的內容請見標準套件圖庫。下方的共射極放大級起初僅有原始網表;依序切換兩個預設情境,加入三行 RNL,觀察標準套件的自動補齊(以灰色顯示)如何隨之變化。

ce.sp
RNL 檢視器

    預設符號

    在 SPICE 網表中,先依實例名稱首字母、再依模型類型指定符號;在 Spectre 網表中,則依 master 與模型類型指定。檔案中編寫的 SET-SYMBOL 排在後面,因此會覆寫這些規則。

    實例符號端子
    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;類型 pmos $PMOS_4TERMd g s b
    Q*$NPN;類型 pnp $PNPc b e

    F、H、B、S、W、J、T、U 等其他器件的符號及各符號的外觀,請參閱標準套件圖庫。

    自動補齊規則(節選)

    標準套件本身即以 RNL 寫成。它透過幾個集合為檔案預留了擴充方式:只要向集合新增或移除成員,自動補齊行為就會隨之調整。

    T4 · 集合與篩選

    集合在巢狀時展開一層;篩選即是規則

    大括號用來表示有序集合。在集合中引用另一個集合時,會將其成員展開併入;若要將其保留為單一成員,只需再套一層大括號。透過條件篩選出的物件同樣構成集合,且篩選會在所在層級及下方每個層級各評估一次。

    展開一層,或保留為單一成員

    設 %s1 = {#M1 #M2} 且 %s2 = {#M3 #M4}。在我們的大型語言模型編寫基準測試中,約有 15 次執行想表達右側的群組排序,卻寫成了左側的形式。點選「換一種排法」,查看兩種寫法各自允許哪些排列方式。

    成員:M1 M2 M3 M4

    四個實例逐一排序:僅允許 M1 M2 M3 M4 或完全反向。

    成員:{M1 M2} {M3 M4}

    兩個群組依各自的中心排序;群組內部的先後順序則不拘。

    依條件篩選

    篩選(Selection)會從指定範圍中依條件挑出物件:範圍為 # 時代表整個層級;範圍為網路時則代表連接在該網路上的物件。點選任一敘述以查看其篩選結果。

      enable.sp

      每個層級各評估一次

      規則的繼承方式與定義相同:寫在頂層時,會在頂層及下方每個子電路中各評估一次,且每次僅檢查該層級內的物件。若加上 recursive=false,則僅在編寫該規則的層級生效。

      頂層M9 nchXA ampXB ampR1
      子電路 ampM1 nchM2 nchM3 pch
      子電路 bias(位於 amp 內)MB nchRB

      T5 · 連線

      唯有共用同一個點物件,連線才會相接

      WIRE 接受一個網路與一串有序的點(每個點可為端子或點物件)。網路名稱僅作為標記,實際電氣連接依然由網表定義。繪製出的連線是否相接,完全取決於它們是否共用同一個點物件或端子。

      tee.sp
      繪製結果

      六種走線模式

      點列表中的每個點皆會依序經過;相鄰兩點之間的路徑走法則由 mode 決定。除了 auto 之外,每種模式皆為檢視器嚴格遵循的幾何規則。點選圖面任意位置可移動終點。

      匯流排、分接(Tap)與疊畫(Bundle)

      網表本身沒有匯流排概念:匯流排只是將多個網路畫成一條粗線的呈現方式。單一連線與匯流排共用一個點即構成「分接(tap)」。疊畫(BUNDLE)則將一組實例繪製為單一符號,其接腳代表各成員的同名端子。

      bus.sp
      繪製結果

      若不想手寫走線路徑,可使用 &D<1> @ROUTE 將整個網路交由求解器處理:分支、路徑與交接圓點皆由求解器決定。

      T6 · 文字

      附著於物件上的文字是標籤;附著於點上的是標註

      TEXT 附著的對象決定了三件事:${…} 讀取誰的屬性、文字預設擺放的位置,以及指定 key 時它成為誰的子物件。文字自身的位置則是獨立的,可透過 PLACE 或 dx、dy 設定。

      text.sp
      繪製結果

      文字標記語法

      文字標記採用大型語言模型熟悉的一小部分 LaTeX。上下標必須加上大括號,因此 g_m 會原樣顯示;${…} 會讀取文字所附著物件的屬性(此處為 M1 的 W=2u L=0.5u)。遇到未知命令時會原樣顯示並發出警告,該段文字依然有效。

      顯示結果

      T7 · 朝向

      x 向右、y 向上;共八種朝向代碼

      座標採用 y 軸向上的網格單位,與 Virtuoso 一致。朝向變換以符號的原點為中心:接腳位置與出線方向會隨之改變,但接腳所對應的端子不變。僅接受下方八種代碼;R90 為逆時針旋轉,而 MYR90 與 MXR90 則是先鏡像翻轉再旋轉。

      朝向關係

      ORIENT-RELATION 不固定絕對朝向,僅固定兩者之間的相對關係:B 的朝向為 A 的朝向再套用指定變換。$MIRRORED 使用的正是 "MY":無論 A 如何旋轉,B 永遠是它的左右鏡像。

      T8 · 優先順序

      衝突並非錯誤:先依優先順序,再依先後順序

      每項幾何事實皆具有優先順序:disabled、low、normal(預設)或 high。系統會依優先順序由高至低(同一優先順序內後寫者優先)逐一處理事實;每項事實皆予以保留,除非與已保留的事實矛盾。一條 PLACE 包含 x 與 y 兩項事實,可個別捨棄;由用例展開的事實,在敘述順序中位於建立該用例的敘述所在位置。

      三筆記錄如何協同運作

      1設計者

      編寫語義與約束,預設為 normal。可隨時修改。

      2求解器

      輸出座標與連線,優先順序為 high。每次求解時整段替換;以 hash 記錄求解時的輸入。

      3編輯器

      手動修改附加於後方,優先順序同樣為 high:同一優先順序中後寫者生效,因此會覆寫求解器結果。

      當輸入變更導致 hash 不再相符時,舊結果仍可照常顯示;檢視器僅建議重新求解,不會報錯。下次執行求解時,編輯器寫入的 high 座標會被視為固定位置,其餘器件則隨之調整。

      E · 綜合範例

      幾個完整的小範例

      左側為檔案內容,右側為繪製結果。將游標懸停在某一行上,可查看它控制圖面中的哪個部分;反過來將游標懸停在圖面中的某個部分上,也會標示出相關的敘述行。

      RNL 檢視器