邏輯閘圖

關於邏輯閘圖

邏輯閘圖展示布林函數在硬體中的實作方式——輸入從左側流經組合邏輯閘和正反器,在右側產生輸出。數位設計工程師使用它來記錄 RTL 意圖、驗證閘級網路表,以及教授布林代數。Schematex 的符號集源自 IEEE Std 91-1984 / ANSI Y32.14(特殊形狀的 ANSI 符號,美國預設)和 IEC 60617-12(均一矩形符號,國際預設),可在每張圖中自行選擇。

DSL 採用函數式:你宣告訊號,並依名稱描述每個閘的輸入。版面配置和連線由相依性圖自動計算——無需手動指定座標。

logic-gate·§ IEEE 91-1984
↘ preview
100%
1-bit Full Adder Logic gate diagram with 5 gates, 3 inputs, 2 outputs XOR AND XOR AND OR A B Cin Sum Cout 1-bit Full Adder
UTF-8 · LF · 10 lines · 200 chars✓ parsed·0.5 ms·5.3 KB SVG

1. 你的第一張邏輯閘圖

最小的實用圖:兩個輸入、一個閘、一個輸出。

logic-gate·§ IEEE 91-1984
↘ preview
100%
NAND check Logic gate diagram with 1 gates, 2 inputs, 1 outputs NAND A B F NAND check
UTF-8 · LF · 4 lines · 53 chars✓ parsed·0.3 ms·3.0 KB SVG

四條規則涵蓋 80% 的使用情境:

  1. 以關鍵字 logic 開頭,後面可選擇性地加上引號標題及 style: ansistyle: iec
  2. inputoutput 行宣告埠——逗號分隔的訊號名稱。
  3. 每個閘的格式為 id = GATE_TYPE(input1, input2, …)id 成為一個命名訊號線。
  4. 名稱與閘 id 相符的 output 會自動連線;當名稱不同時,使用 OUTPUT <- gate_id

註解必須以 #-- 在一行的開頭(或在閘行的最後一個符記之後)。


2. 閘類型

2.1 組合邏輯閘

DSL 關鍵字函數ANSI 形狀IEC 符號
ANDA · BD 形本體矩形 + &
ORA + B曲線本體矩形 + ≥1
NOTĀ三角形 + 氣泡矩形 + 1 + 氣泡
NAND¬(A · B)AND + 氣泡矩形 + & + 氣泡
NOR¬(A + B)OR + 氣泡矩形 + ≥1 + 氣泡
XORA ⊕ BOR + 額外弧線矩形 + =1
XNOR¬(A ⊕ B)XOR + 氣泡矩形 + =1 + 氣泡
BUFA(緩衝器)三角形,無氣泡矩形 + 1
logic-gate·§ IEEE 91-1984
↘ preview
100%
Gate gallery Logic gate diagram with 5 gates, 3 inputs, 5 outputs AND OR XOR NAND NOT A B C Y_and Y_or Y_xor Y_nand Y_not Gate gallery
UTF-8 · LF · 8 lines · 174 chars✓ parsed·0.5 ms·6.3 KB SVG

2.2 特殊輸出緩衝器

DSL 關鍵字函數
TRISTATE_BUF三態緩衝器——當致能為低時輸出 Z
TRISTATE_INV三態反相緩衝器
OPEN_DRAIN開汲極 / 開集極輸出(需要外部上拉)
SCHMITT史密特觸發器——本體內帶有遲滯符號
logic-gate·§ IEEE 91-1984
↘ preview
100%
Special buffers Logic gate diagram with 3 gates, 2 inputs, 3 outputs EN TRISTATE_BUF EN OPEN_DRAIN SCHMITT A EN Y_tri Y_od Y_sch Special buffers
UTF-8 · LF · 6 lines · 141 chars✓ parsed·1.0 ms·4.4 KB SVG

2.3 正反器與門閂

DSL 關鍵字類型主要接腳
DFFD 正反器(緣觸發)D、CLK、Q、Q̄
JKFFJK 正反器J、K、CLK、Q、Q̄
SRFFSR 正反器S、R、CLK、Q、Q̄
TFFT(切換)正反器T、CLK、Q、Q̄
LATCH_SRSR 門閂(電位觸發,無時脈)S、R、Q、Q̄
LATCH_DD 門閂(致能 = 1 時透明)D、EN、Q、Q̄
logic-gate·§ IEEE 91-1984
↘ preview
100%
Flip-flop gallery Logic gate diagram with 3 gates, 5 inputs, 3 outputs D Q DFF J K Q JKFF D E Q LATCH_D D J K CLK EN Q_dff Q_jk Q_latch Flip-flop gallery
UTF-8 · LF · 6 lines · 156 chars✓ parsed·0.6 ms·6.3 KB SVG

2.4 複雜組合邏輯

DSL 關鍵字函數
MUX多工器
DEMUX解多工器
DECODER二進位解碼器
ENCODER優先編碼器
logic-gate·§ IEEE 91-1984
↘ preview
100%
Combinational MSI Logic gate diagram with 2 gates, 3 inputs, 2 outputs I0 I1 I2 MUX I0 I1 DECODER A B S Y_mux Y_dec Combinational MSI
UTF-8 · LF · 5 lines · 114 chars✓ parsed·0.4 ms·4.3 KB SVG

2.5 複雜時序邏輯

DSL 關鍵字函數
COUNTER通用二進位計數器(CTR 標籤,CLK/RESET/Q0–Q3)
SHIFT_REG通用移位暫存器(SRG 標籤,CLK/SER/Q0–Q7)
logic-gate·§ IEEE 91-1984
↘ preview
100%
Sequential MSI Logic gate diagram with 2 gates, 3 inputs, 2 outputs I0 I1 COUNTER I0 I1 SHIFT_REG DATA CLK RESET Q_cnt Q_sr Sequential MSI
UTF-8 · LF · 5 lines · 132 chars✓ parsed·0.3 ms·4.2 KB SVG

3. 輸入與輸出

3.1 宣告埠

input A, B, Cin          # three input ports
output Sum, Cout         # two output ports

inputoutput 清單中的每個名稱都成為整張圖中可用的命名訊號線。

3.2 低態動作輸入

在輸入清單中為訊號名稱加上 ~ 前綴,以標記為低態動作。算圖器在埠符號處繪製氣泡。

input ~nRESET, CLK, DATA

低態動作表示法也適用於閘的輸入清單內:

g1 = AND(~nRESET, CLK)

3.3 輸出接至閘

若輸出 ID 與閘 ID 相符,連線為隱式:

output Sum        # Sum is also a gate id → auto-wired
Sum = XOR(s1, Cin)

當名稱不同時,使用明確的賦值運算子:

output F
q1 = NOR(A, B)
F <- q1           # F draws from q1's output
logic-gate·§ IEEE 91-1984
↘ preview
100%
SR latch from NOR gates Logic gate diagram with 2 gates, 4 inputs, 2 outputs NOR NOR S R Qn Q Q Qn SR latch from NOR gates
UTF-8 · LF · 7 lines · 121 chars✓ parsed·0.4 ms·4.3 KB SVG

4. 符號樣式

標頭行上的 style: 選項選擇符號標準。它套用到圖中的每個閘。

標準適用情境
ansi(預設)IEEE Std 91 — 特殊曲線形狀美國教育、硬體文件
iecIEC 60617-12 — 均一矩形 + 函數標籤國際、歐洲工業
logic "ALU slice" style: iec
logic-gate·§ IEEE 91-1984
↘ preview
100%
1-bit Full Adder Logic gate diagram with 5 gates, 3 inputs, 2 outputs =1 & =1 & ≥1 A B Cin Sum Cout 1-bit Full Adder
UTF-8 · LF · 10 lines · 199 chars✓ parsed·0.5 ms·5.3 KB SVG
logic-gate·§ IEEE 91-1984
↘ preview
100%
Gate gallery — IEC style Logic gate diagram with 5 gates, 3 inputs, 5 outputs & ≥1 =1 & 1 A B C Y_and Y_or Y_xor Y_nand Y_not Gate gallery — IEC style
UTF-8 · LF · 8 lines · 185 chars✓ parsed·0.5 ms·6.3 KB SVG

5. 模組區塊

使用 module 將閘分組到一個帶標籤的子電路框中。模組區塊適合用來記錄階層式設計——每個模組算圖為圍繞其成員閘的命名矩形。

logic "Hierarchical adder"
input A, B, Cin
output Sum, Cout

module "Half Adder" {
  s1 = XOR(A, B)
  c1 = AND(A, B)
}

Sum = XOR(s1, Cin)
Cout = OR(c1, AND(s1, Cin))

模組語法規則:

  • module "Label" { — 開啟一個模組(引號標籤或裸識別符)。{ 必須與 module 在同一行。
  • 獨立行上的 } 關閉最近開啟的模組。
  • 模組可以嵌套。

6. 標籤與註解

  • 圖標題: logic "Full Adder" — 僅限第一行。
  • 閘訊號名稱: id = GATE(…) 中的 id 既是閘名稱也是輸出線名稱。
  • 輸出標籤: output Sum — 輸出埠標籤預設與訊號名稱相符。
  • 低態動作標記: 埠或閘輸入上的 ~ 前綴。
  • 註解: #-- 在一行的開頭,或在行中最後一個有意義的符記之後。

7. 保留字與跳脫

行首保留字: logic(標頭)、inputoutputmodule}

保留運算子符記 — 避免在訊號名稱中使用:=(),<-~

訊號名稱規則: 必須符合 [a-zA-Z_][a-zA-Z0-9_]*。大寫和小寫均接受;閘類型關鍵字(ANDOR 等)在解析器中不區分大小寫。


8. 常見錯誤

你寫的解析器的回應修正方式
f = and(A, B)(小寫閘)接受——閘類型不區分大小寫ANDand 均有效
output F 後接 F <- q1q1 未宣告LogicParseError: Unknown signal "q1"在參照之前將 q1 宣告為閘
input A B C(空格,無逗號)解析器只取 ABC 被忽略使用逗號:input A, B, C
F = BUFFER(A)LogicParseError: Unknown gate type: BUFFER使用 BUF
module FullAdder {(無 { 大括號)行不符合模組模式——靜默跳過開頭的 { 必須與 module 在同一行
標頭上的 style: IEEE未知的樣式值——靜默預設為 ansi使用 style: ansistyle: iec

9. 語法(EBNF)

document    = header statement*

header      = "logic" ( WS quoted-string )? ( WS "style:" WS style )? NEWLINE
style       = "ansi" | "iec"
quoted-string = '"' any-char-but-quote* '"'

statement   = blank | comment | input-decl | output-decl | gate-def | assign | module-block

comment     = ( "#" | "--" ) any NEWLINE

input-decl  = "input" WS port-list NEWLINE
output-decl = "output" WS port-list NEWLINE
port-list   = port-id ( "," WS? port-id )*
port-id     = "~"? id

gate-def    = id WS "=" WS gate-type "(" input-list ")" NEWLINE
input-list  = ( "~"? id ) ( "," WS? ( "~"? id ) )*

assign      = id WS "<-" WS id NEWLINE

module-block = module-open ( statement | module-block )* module-close
module-open  = "module" WS ( quoted-string | id ) WS? "{" NEWLINE
module-close = "}" NEWLINE

gate-type   = "AND" | "OR" | "NOT" | "NAND" | "NOR" | "XOR" | "XNOR" | "BUF"
            | "TRISTATE_BUF" | "TRISTATE_INV" | "OPEN_DRAIN" | "SCHMITT"
            | "DFF" | "JKFF" | "SRFF" | "TFF"
            | "LATCH_SR" | "LATCH_D"
            | "MUX" | "DEMUX" | "DECODER" | "ENCODER"
            | "COUNTER" | "SHIFT_REG"
            // all case-insensitive

id          = [a-zA-Z_] [a-zA-Z0-9_]*

權威來源:src/diagrams/logic/parser.ts。若本頁與解析器有出入,以解析器為準——請開立 issue 回報。


10. 標準合規性

Schematex 邏輯閘圖遵循 IEEE Std 91-1984 / ANSI Y32.14(特殊形狀符號)和 IEC 60617-12(帶函數限定符的矩形符號)。

目前已實作的內容:

  • ✅ 全部八種組合邏輯閘:AND、OR、NOT、NAND、NOR、XOR、XNOR、BUF
  • ✅ 特殊輸出緩衝器:TRISTATE_BUF、TRISTATE_INV、OPEN_DRAIN、SCHMITT
  • ✅ 四種緣觸發正反器:DFF、JKFF、SRFF、TFF
  • ✅ 兩種門閂:LATCH_SR、LATCH_D
  • ✅ 組合 MSI:MUX、DEMUX、DECODER、ENCODER
  • ✅ 時序 MSI:COUNTER、SHIFT_REG
  • ✅ 輸入和埠上的低態動作(~)表示法
  • ✅ ANSI 和 IEC 符號樣式,可在每張圖中選擇
  • ✅ 模組分組區塊
  • ✅ 自動 DAG 版面配置(拓撲排序,從左到右的訊號流)
  • ⏳ 明確扇出線路由(帶接合點的共享網路)
  • ⏳ 多位元匯流排表示法(線上的 /N 斜線標注)
  • ⏳ 正反器上的低態時脈輸入

參考資料:

  • IEEE Std 91-1984 / ANSI Y32.14: IEEE Standard Graphic Symbols for Logic Functions
  • IEEE Std 91a-1991: Supplement to IEEE Std 91
  • IEC 60617-12: Graphical symbols for diagrams — binary logic elements

11. 相關範例

logic·§ IEEE 91
1-bit Full Adder Logic gate diagram with 5 gates, 3 inputs, 2 outputs XOR AND XOR AND OR A B Cin Sum Cout 1-bit Full Adder
1-bit full adder
1-bit full adder built from XOR, AND, and OR gates — the foundational building block of every arithmetic logic unit, from a functional description.
education

12. 路線圖

計畫中——目前尚無法解析。 請勿在今天生成的 DSL 中使用;解析器會拒絕或忽略它們。

  • 明確扇出 / 接合點 — 由多個閘輸入共享的命名線路,在分支點以接合點渲染。
  • 多位元匯流排表示法 — 線上的 bus N 標注,表示 N 位元訊號群組。
  • 低態時脈 — 正反器輸入清單中的 ~CLK,在時脈三角形上渲染氣泡。
  • 回授弧 — 從閘輸出明確連回較早閘輸入的線路,路由在主訊號路徑上方。
  • 參數化閘扇入AND(A, B, C, D) 直接渲染一個 4 輸入 AND 閘。

如果你需要其中任何功能,請在 GitHub issues 中追蹤進度。

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.