Boolean: từ yêu cầu đến bảng chân trị
Tiên quyết
- Module A1: Biểu diễn số: Đang tải
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ụ
- Viết điều kiện cho phép ở ví dụ mở đầu và điều kiện chặn bằng De Morgan.
- Tìm một hàng làm
A+B·Ckhác(A+B)·C. - Chứng minh
A+A'B=A+Bbằng bốn hàng. - 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?
- 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
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 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.
Nguồn và mức độ đối chiếu
- 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.
- 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.
- 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ở).