K-map, SOP và POS: gộp các hàng chỉ khác một biến
Tiên quyết
- Module A1: Biểu diễn số: Đang tải
- Boolean: từ yêu cầu đến bảng chân trị: Đang tải
- Gray code: một bit đổi ở mỗi bước kề nhau: Đang tải
Sau bài này bạn sẽ
- Đặt đúng thứ tự Gray và nhóm được cả biên bản đồ
- Viết SOP từ nhóm 1 và POS từ nhóm 0
- Dùng don’t-care theo hợp đồng thay vì hiểu nó là X lúc chạy
Hai hàng có thể dùng chung một điều kiện
Hai minterm A'B'C và A'B'C' khác nhau đúng ở C. OR chúng lại được A'B'·(C+C')=A'B'. Biến thay đổi đã biến mất khỏi điều kiện chung.
K-map đặt những hàng như thế cạnh nhau để nhìn thấy chỗ gộp. Bản đồ là cách sắp lại bảng chân trị, không thay đổi hàm cần thực hiện.
Nhãn Gray và các cạnh quấn vòng
Với hai biến, bản đồ là 2×2, mỗi chiều mang một biến. Với ba biến, dùng hai hàng A bằng 0/1 và bốn cột BC theo thứ tự Gray. Thêm biến thứ tư tạo bản đồ 4×4 bên dưới.
Bản đồ bốn biến dưới dùng AB cho hàng, CD cho cột; cả hai theo thứ tự 00, 01, 11, 10. A là bit cao nhất khi đánh số minterm.
| AB / CD | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 00 | 1 | 0 | 0 | 1 |
| 01 | 0 | 1 | 1 | 0 |
| 11 | 0 | 1 | 1 | 0 |
| 10 | 1 | 0 | 0 | 1 |
Cột đầu và cuối kề nhau; hàng đầu và cuối cũng vậy. Đi ngang hoặc dọc một ô kề chỉ đổi một biến. Đi chéo không phải quan hệ kề.
Bốn góc tạo thành một nhóm bốn ô hợp lệ nhờ quấn qua hai biên. Điều đó không có nghĩa mọi cặp góc đều kề nhau; hai góc đối diện khác hai biến.
Nhóm là hình chữ nhật có số ô lũy thừa hai
Để tìm SOP, nhóm các ô 1 thành hình chữ nhật có 1, 2, 4, 8 hoặc 16 ô, có thể quấn biên. Không nhóm chéo, hình chữ L hoặc ba ô.
Mỗi nhóm giữ các biến có giá trị cố định và bỏ biến thay đổi. Nhóm càng lớn thì tích có càng ít literal. Cho phép các nhóm chồng nhau; chỉ cần mọi ô 1 được phủ và không phủ ô 0.
Prime implicant là nhóm không mở rộng thêm được mà vẫn hợp lệ. Essential prime implicant là nhóm duy nhất phủ được ít nhất một ô 1. Chọn các nhóm thiết yếu trước, rồi phủ phần còn lại; không mặc định một lựa chọn tham lam bất kỳ sẽ cho lời giải nhỏ nhất.
Đọc SOP từ hai nhóm trong ví dụ
Bốn góc có B bằng 0, D bằng 0; A và C thay đổi, nên tạo tích B'D'. Bốn ô 1 ở giữa có B bằng 1, D bằng 1, nên tạo tích BD.
SOP thu được là F=B'D'+BD. Các minterm của bảng là 0, 2, 5, 7, 8, 10, 13, 15. Có thể kiểm lại từng hàng; hàm thực chất so B và D bằng nhau.
SOP tổng quát là OR của các tích, không bắt buộc mỗi tích chứa đủ bốn biến. Canonical SOP mới dùng một minterm đủ mọi biến cho từng hàng ra 1.
Đọc POS từ các nhóm 0
Với nhóm 0, lập tổng sao cho tổng ấy bằng 0 trên toàn nhóm. Biến cố định 0 xuất hiện trực tiếp; biến cố định 1 xuất hiện dạng đảo. AND các tổng lại để được POS.
Trong bảng, một nhóm 0 có B bằng 0, D bằng 1 → tổng B+D'. Nhóm còn lại có B bằng 1, D bằng 0 → tổng B'+D. Vì vậy F=(B+D')·(B'+D).
Canonical POS dùng một maxterm cho mỗi hàng ra 0, chứa mỗi biến đúng một lần. Minterm chọn một hàng ra 1; maxterm loại một hàng bằng cách bằng 0 tại hàng ấy. Đừng dùng cùng quy tắc đảo biến cho hai loại.
Don’t-care là phạm vi yêu cầu, không phải giá trị bí ẩn
X trong K-map chỉ một đầu vào mà yêu cầu cho phép không quan tâm đầu ra. Có thể dùng ô ấy như 0 hoặc 1 để nhóm thuận tiện; không bắt buộc phủ nó.
Ví dụ so một chữ số BCD có từ 5 trở lên. Trên mã hợp lệ 0 tới 9, biểu thức A+B·(C+D) cho kết quả đúng. Nhưng với các mã binary 10 tới 15, biểu thức này đều cho 1. Một bản có kiểm mã hợp lệ có thể cho 0 trên cả sáu mã ấy.
Hai bản chỉ tương đương theo hợp đồng loại bỏ 10 tới 15. Nếu đầu vào có thể nhận các mã đó, phải định nghĩa cách xử lý, không viện “don’t-care” để bỏ kiểm tra. Chữ X trong mô phỏng 4-state là khái niệm khác; nó không tự cấp phép tối ưu mọi hành vi.
Các lỗi nhóm và kết luận quá xa
- Đặt nhãn
00, 01, 10, 11làm hai ô cạnh nhau đổi hai biến. - Quên quấn biên hoặc cho các ô chéo là kề.
- Nhóm ba ô, hoặc bỏ sót một ô 1 chưa được phủ.
- Đọc nhóm 0 theo quy tắc nhóm 1.
- Tưởng SOP ít literal nhất luôn là phần cứng tốt nhất.
Hàm parity có thể không gộp được trong SOP hai mức mà vẫn viết rất gọn bằng XOR. K-map nhỏ giúp hiểu và kiểm; synthesis còn có phép factor nhiều mức và thư viện cell.
Tự gộp rồi kiểm lại bảng
- Vì sao nhóm bốn góc của bảng bỏ được A và C, nhưng giữ B và D?
- Chỉ ra minterm tương ứng ô hàng AB bằng 10, cột CD bằng 10.
- Thay B bằng 0, D bằng 1 trong cả SOP và POS đã tìm; kết quả có khớp không?
- Một thiết bị có thể gửi BCD không hợp lệ sau reset. Bạn có còn được coi mọi mã 10 tới 15 là don’t-care không?
- Bản đồ có hai nghiệm tối giản cùng số literal. Cần bằng chứng nào thêm trước khi chọn vì timing?
Kiểm tra
Bằng chứng kiểm chứng
Expected tính trước chạy: KMAP CHECK table=16 ones=8 bcd_valid=10 invalid_different=6 time_ns=32.
Tham chiếu bảng là literal A5A5, tương ứng tám minterm đã tính; canonical SOP, SOP rút gọn, POS và XNOR phải cùng khớp cả 16 hàng. Ví dụ BCD dùng một literal khác cho yêu cầu strict; kiểm riêng 10 mã hợp lệ và sáu mã ngoài hợp đồng relaxed, không dùng X để che sai.
Parsed/linted/simulated/synthesized đạt, không flip-flop/latch trong synthesis generic. Không claim một kiểu biểu thức luôn tốt nhất về cell/timing hoặc đủ cho mọi chiều rộng. Kết quả ngoài miền don’t-care là lựa chọn cụ thể của implementation đã viết, không phải cam kết chung của mọi phép tối ưu.
Nguồn và mức độ đối chiếu
- Karnaugh Maps — bản chụp resources.zip, Why a Map Works; Gray-Code Ordering and Wraparound; The Grouping Rules; Worked Example: 4 Variables; Prime and Essential Prime Implicants; Reading a POS Expression: Grouping the 0s; Don't-Care Conditions; Patterns a K-Map Cannot Simplify. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản A2.kmap, Sixteen canonical/SOP/POS truth rows and valid versus invalid BCD contracts. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, Scalar bitwise expressions, packed indexing and explicit defined outputs outside a BCD contract — chưa đối chiếu LRM. Chưa đối chiếu với văn bản nguồn (chưa mở).