Boolean: từ yêu cầu đến bảng chân trị

Khoảng 45 phútMức 1/3Bản nháp: một số khẳng định chưa đối chiếu spec

Tiên quyết

Sau bài này bạn sẽ

  • Viết bảng chân trị và biểu thức từ một yêu cầu nhỏ
  • Dùng các luật Boolean để biến đổi mà giữ chức năng
  • Phân biệt tương đương logic với timing và chi phí phần cứng

Mạch phải làm gì trước khi chọn cổng?

Một hệ thống chỉ cho phép thao tác khi có yêu cầu, quyền truy cập hợp lệ và không có tín hiệu chặn. Trước khi viết RTL, hãy diễn đạt chính xác điều kiện nào cho đầu ra 1.

Logic tổ hợp xác định đầu ra từ các đầu vào hiện tại khi mạch đã ổn định; không cần nhớ một trạng thái trước đó. “Không nhớ” không có nghĩa đầu ra phản ứng ngay trong phần cứng: độ trễ và glitch sẽ được học riêng.

Ba phép cơ bản và ký hiệu

Boolean dùng hai giá trị 0 và 1. Bài này dùng dấu chấm cho AND, dấu cộng cho OR và dấu nháy sau biến cho NOT. Dấu cộng ở đây không phải phép cộng số nguyên.

Phép Ví dụ Khi nào đầu ra bằng 1?
NOT A' A bằng 0
AND A·B Cả hai bằng 1
OR A+B Ít nhất một bằng 1
XOR A XOR B Hai đầu vào khác nhau
XNOR A XNOR B Hai đầu vào bằng nhau
NAND (A·B)' Không phải cả hai bằng 1
NOR (A+B)' Cả hai bằng 0

Ưu tiên đọc NOT trước AND, rồi OR; khi có thể gây nhầm, thêm ngoặc. A+B·C khác (A+B)·C.

Bảng chân trị liệt kê hết miền nhỏ

Với n đầu vào một bit chỉ nhận 0/1, có 2^n tổ hợp. Hai đầu vào cho bốn hàng:

A B AND OR XOR NAND NOR XNOR
0 0 0 0 0 1 1 1
0 1 0 1 1 1 0 0
1 0 0 1 1 1 0 0
1 1 1 1 0 0 0 1

OR và XOR chỉ khác nhau ở hàng cả hai bằng 1. Khi yêu cầu nói “A hoặc B”, cần hỏi có cho phép cả hai cùng xảy ra không.

Để bác bỏ một đẳng thức, chỉ cần một hàng khác kết quả. Để xác nhận hai hàm nhỏ tương đương trên miền Boolean đã nêu, so mọi hàng của miền ấy.

Luật giúp bỏ phần không đổi kết quả

Luật Dạng OR Dạng AND
Đồng nhất A+0=A A·1=A
Phần tử chặn A+1=1 A·0=0
Lũy đẳng A+A=A A·A=A
Bù A+A'=1 A·A'=0
Hấp thụ A+A·B=A A·(A+B)=A
Giao hoán A+B=B+A A·B=B·A
Kết hợp (A+B)+C=A+(B+C) (A·B)·C=A·(B·C)
Đảo hai lần (A')'=A Cùng một quy tắc đảo

Phân phối có hai dạng: A·(B+C)=A·B+A·C và A+B·C=(A+B)·(A+C). Dạng thứ hai dễ sai nếu suy từ đại số số thực.

Đối ngẫu đổi AND với OR, đồng thời đổi 0 với 1. Ví dụ đồng nhất OR cho một luật đồng nhất AND. Không được “rút gọn A” từ A·B=A·C để kết luận B bằng C; với A bằng 0, đẳng thức đúng dù B và C khác.

Đảo cả biểu thức phải đổi cả phép nối

De Morgan cho (A·B)'=A'+B' và (A+B)'=A'·B'. Khi đẩy phép đảo qua một nhóm, đảo từng thành phần và đổi AND ↔ OR.

Ví dụ điều kiện cho phép là REQ·READY·BLOCK'. Điều kiện không cho phép tương đương REQ'+READY'+BLOCK. Chỉ đảo tên từng tín hiệu mà giữ nguyên AND sẽ tạo hàm khác.

Với A=1, B=0, NOR (A+B)' bằng 0 còn A'+B' bằng 1. Hàng nhỏ này bắt ngay lỗi quên đổi OR thành AND.

Từ bảng ba đầu vào tới biểu thức ngắn

Giả sử tín hiệu đạt khi ít nhất hai trong ba kiểm tra A, B, C đạt. Các hàng ra 1 là 011, 101, 110, 111.

Viết một tích cho mỗi hàng: A'BC + AB'C + ABC' + ABC. Tích ấy chứa mỗi biến đúng một lần, gọi là minterm. Dùng luật Boolean, có thể viết gọn thành AB + AC + BC: chỉ cần một trong ba cặp cùng bằng 1.

Đếm số đầu vào bằng 1 là một cách tham chiếu khác để kiểm kết quả. Không chỉ đối chiếu hai bản viết cùng một biểu thức rồi kết luận đã kiểm đúng yêu cầu.

Luật consensus cho AB + A'C + BC = AB + A'C. Hạng BC dư về bảng chân trị nhưng có thể hữu ích về đường chuyển tín hiệu; bài hazard sẽ giải thích vì sao tương đương logic chưa nói hết hành vi theo thời gian.

Đừng biến một phép rút gọn thành kết luận vật lý

  • Đọc OR như XOR khi cả hai đầu vào có thể cùng bằng 1.
  • Dùng phép cộng Boolean như phép cộng số nguyên: 1+1 ở OR vẫn là 1.
  • Đảo biến nhưng không đổi phép nối theo De Morgan.
  • Bỏ ngoặc làm thay đổi bảng chân trị.
  • Suy ít literal hơn luôn ít transistor hơn, nhanh hơn hoặc ít điện hơn.

Chi phí thật còn phụ thuộc cell library, mapping, tải và constraint. Bảng chân trị chỉ mô tả giá trị ổn định; nó không cho độ trễ, công suất hoặc khả năng chống glitch.

Viết yêu cầu rồi tìm phản ví dụ

  1. Viết điều kiện cho phép ở ví dụ mở đầu và điều kiện chặn bằng De Morgan.
  2. Tìm một hàng làm A+B·C khác (A+B)·C.
  3. Chứng minh A+A'B=A+B bằng bốn hàng.
  4. Với ba đầu vào, điều kiện “đúng một đầu vào bằng 1” khác “ít nhất hai bằng 1” ở những hàng nào?
  5. Vì sao hai biểu thức tương đương chưa đủ kết luận chúng tạo hai netlist có cùng timing?

Kiểm tra

Tự kiểm tra: Boolean: từ yêu cầu đến bảng chân trị

  1. A và B cùng bằng 1 thì OR và XOR lần lượt bằng gì?
  2. Rút gọn A + A·B theo đại số Boolean được gì?
  3. Phủ định A+B là biểu thức nào?
  4. Ba đầu vào nào làm điều kiện ít nhất hai bit 1 đúng?
  5. Hai biểu thức có cùng bảng chân trị đã đủ chứng minh cùng timing chưa?

Bằng chứng kiểm chứng

Expected tính trước chạy: BOOLEAN CHECK gate_vectors=4 law_vectors=8 majority_ones=4 time_ns=12.

Bảng cổng và các luật Boolean trên miền ba bit

Kỳ vọng tính trước chạy: BOOLEAN CHECK gate_vectors=4 law_vectors=8 majority_ones=4 time_ns=12

boolean_core.sv RTL
`timescale 1ns/1psmodule boolean_core(input logic a,b,c,output wire [6:0] gates, output wire majority,absorbed,dist_l,dist_r,dm_l,dm_r,cons_l,cons_r); assign gates={~a,a&b,a|b,~(a&b),~(a|b),a^b,~(a^b)}; assign majority=(a&b)|(a&c)|(b&c); assign absorbed=a|(a&b); assign dist_l=a|(b&c); assign dist_r=(a|b)&(a|c); assign dm_l=~(a|b); assign dm_r=(~a)&(~b); assign cons_l=(a&b)|((~a)&c); assign cons_r=(a&b)|((~a)&c)|(b&c);endmodule
tb.sv testbench
`timescale 1ns/1psmodule tb_a2_boolean; logic a,b,c;wire [6:0] gates; wire majority,absorbed,dist_l,dist_r,dm_l,dm_r,cons_l,cons_r; boolean_core dut(.*); logic [6:0] lut[4]='{7'b1001101,7'b1011010,7'b0011010,7'b0110001}; int gate_vectors=0,law_vectors=0,majority_ones=0,ones; initial begin  c=0;  for(int i=0;i<4;i++)begin   a=1'(i/2);b=1'(i%2);#1;gate_vectors++;   if(gates!==lut[i])$fatal(1,"Boolean gate table mismatch vector=%0d",i);  end  for(int i=0;i<8;i++)begin   a=1'(i/4);b=1'((i/2)%2);c=1'(i%2);#1;law_vectors++;   ones=i/4+(i/2)%2+i%2;   if(majority!==(ones>=2)||absorbed!==a||dist_l!==dist_r||dm_l!==dm_r||cons_l!==cons_r)    $fatal(1,"Boolean law/majority mismatch vector=%0d",i);   if(majority)majority_ones++;  end  if(gate_vectors!=4||law_vectors!=8||majority_ones!=4||$time!=12)$fatal(1,"Boolean contract");  $display("BOOLEAN CHECK gate_vectors=%0d law_vectors=%0d majority_ones=%0d time_ns=%0d",gate_vectors,law_vectors,majority_ones,$time);  $finish; endendmodule

Đã kiểm chứng thế nào

  • Phân tích và elaborate theo LRM (pyslang 12.1.0)
  • Lint -Wall (Verilator 5.050)
  • Mô phỏng, exit 0 và output khớp kỳ vọng tính tay (Verilator 5.050, 2-state)
  • Tổng hợp, số cell khớp kỳ vọng (Yosys 0.70)

Output phải khớp: BOOLEAN CHECK gate_vectors=4 law_vectors=8 majority_ones=4 time_ns=12

Kỳ vọng sau tổng hợp: boolean_core: $_*DFF* = 0boolean_core: $_*LATCH* = 0

Finite known 0/1 input domains only. Generic synthesis, where claimed, is not technology mapping, STA or PPA. No all-width or X/Z language conformance claim.

Các kiểm tra chạy lúc xây dựng nội dung (2026-11-07), không chạy trong trình duyệt. Kỳ vọng được tính tay trước khi chạy.

Bảng bảy đầu ra cổng được viết literal trước chạy, không tạo từ các toán tử đang kiểm. Với tám hàng ba bit, số đầu vào 1 được tính bằng số nguyên để đối chiếu majority; đồng thời kiểm hấp thụ, phân phối, De Morgan và consensus.

Parsed/linted/simulated/synthesized đã đạt trên toolchain ghim. Yosys generic không có flip-flop/latch; không claim mapping PDK, timing, transistor count hoặc X/Z. Bằng chứng chỉ cho miền 0/1 và các biểu thức đã chạy; LRM đầy đủ vẫn chờ đối chiếu.

[1] [2] [3]

Nguồn và mức độ đối chiếu

  1. Boolean Logic — bản chụp resources.zip, Boolean Values and Operators; Logic Gates and Their Truth Tables; From Words to an Expression to a Circuit; The Laws of Boolean Algebra; Simplifying Expressions Step by Step; Minterms, Maxterms, and Canonical Forms. Trích dẫn; nguồn đã đọc các mục liên quan.
  2. Thí nghiệm nguyên bản A2.boolean, Four gate truth-table vectors and eight Boolean-law/majority vectors. Trích dẫn; nguồn đã đọc toàn văn.
  3. IEEE 1800-2023 SystemVerilog LRM, Bitwise Boolean operators, scalar expression widths and two-state truth tables — chưa đối chiếu LRM. Chưa đối chiếu với văn bản nguồn (chưa mở).