MUX và DEMUX: chọn đường dữ liệu, không giữ dữ liệu
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
Sau bài này bạn sẽ
- Đọc ánh xạ select của mux và xây một cây chọn
- Phân biệt mux, demux và decoder theo vai trò tín hiệu
- Tạo một hàm nhỏ bằng dữ liệu mux lấy từ bảng chân trị
Một đầu ra đang lấy dữ liệu từ đâu?
Một khối cần chọn một trong bốn nguồn để đưa tới đầu ra. MUX, hay multiplexer, làm việc chọn đó; hai bit select chỉ ra nguồn có số thứ tự từ 0 tới 3.
DEMUX làm việc ngược về hướng phân phối: một đầu vào được chuyển tới một trong nhiều đầu ra. Hai khối đều là tổ hợp trong bài này; không tự lưu giá trị của lượt chọn trước.
Đọc select theo đúng thứ tự bit
Với mux 4:1, gọi select là S1/S0, S1 là bit cao. Mỗi nguồn dữ liệu có thể là một bit hoặc một bus cùng độ rộng.
S1 |
S0 |
Đầu ra lấy từ |
|---|---|---|
| 0 | 0 | D0 |
| 0 | 1 | D1 |
| 1 | 0 | D2 |
| 1 | 1 | D3 |
Mux 2:1 có biểu thức Y=S'·D0+S·D1. Thay S bằng 0 sẽ chặn nhánh D1; thay S bằng 1 sẽ chặn nhánh D0.
Một mux chọn giữa bốn bus tám bit vẫn chỉ cần hai bit select. Số nguồn quyết định số bit chọn; độ rộng mỗi nguồn quyết định số lane dữ liệu.
Ghép mux nhỏ thành cây
Mux 4:1 có thể dựng từ ba mux 2:1. Tầng đầu dùng S0 chọn trong cặp D0/D1 và D2/D3; tầng sau dùng S1 chọn giữa hai kết quả.
Mux 8:1 có thể dùng hai mux 4:1 và một mux 2:1. Các bit thấp chọn trong mỗi nửa, bit cao chọn nửa. Với số nguồn là lũy thừa hai, một cây 2:1 đầy đủ có N-1 mux và log2(N) tầng chọn.
Nếu có sáu nguồn thì cần ít nhất ba bit select, nhưng còn hai mã chưa dùng. Phải định nghĩa đầu ra cho các mã ấy; công thức cây đầy đủ tám nguồn không tự quyết định hợp đồng sáu nguồn.
Một nguồn, nhiều đích và các đầu ra không được chọn
Trong demux 1:4 active-high của bài, đầu ra được chọn đi theo bit dữ liệu D; ba đầu ra còn lại bằng 0.
| Select | D | Vector Y3..Y0 |
|---|---|---|
| 00 | 1 | 0001 |
| 10 | 1 | 0100 |
| 11 | 0 | 0000 |
Khi select đổi, đầu ra cũ không giữ dữ liệu. Nếu cần mỗi kênh giữ một giá trị giữa các lượt, phải thêm phần tử lưu và điều kiện cập nhật riêng.
Decoder active-high có enable dùng cùng dạng hàm: enable đóng vai trò dữ liệu của demux. Decoder cũng có thể active-low; luôn đọc mức kích hoạt cụ thể trước khi nối mạch.
Dùng MUX để tạo một hàm
Xét F=A·B+B'·C, chọn A/B làm hai bit select. Với mỗi cặp A/B, xét hai giá trị C:
| A B | F khi C=0 | F khi C=1 | Nối vào mux |
|---|---|---|---|
| 00 | 0 | 1 | D0=C |
| 01 | 0 | 0 | D1=0 |
| 10 | 0 | 1 | D2=C |
| 11 | 1 | 1 | D3=1 |
Các đầu dữ liệu trở thành C hoặc hằng. Mux lựa đúng cột hàm theo A/B, không cần viết SOP từng minterm ở đường ra.
Đây là cách nhìn theo phân rã Shannon: F=S'·F(S=0)+S·F(S=1). Một LUT có thể chọn giữa các bit cấu hình từ bảng chân trị; đó là liên hệ về chức năng, không khẳng định mọi LUT vật lý có đúng sơ đồ mux cụ thể ở bài.
Binary select khác one-hot select
Binary select mã hóa số thứ tự. One-hot select dành một bit cho mỗi nguồn và yêu cầu đúng một bit được kích hoạt; mạng AND-OR có thể dùng các bit đó trực tiếp.
Nếu có nhiều bit one-hot cùng bằng 1, mạng OR có thể trộn dữ liệu của nhiều nguồn. Nó không tự quyết định ưu tiên như priority mux. Nếu không bit nào bằng 1, cần biết đầu ra mong muốn và có cờ valid hay không.
Thêm enable hoặc quy tắc giữ giá trị đều là thay đổi hợp đồng. Bỏ gán trong một nhánh RTL có thể suy latch; đừng dùng cách đó để “tắt mux” mà không chủ đích.
Những lỗi chọn đường thường gặp
- Đảo
S1/S0làm tráo thứ tự nguồn. - Nhầm số nguồn với số bit của bus.
- Nghĩ demux lưu dữ liệu ở đầu ra cũ.
- Bỏ hành vi của mã select không dùng.
- Cho rằng tổ hợp không có trễ hoặc không thể glitch khi select đổi.
Các so sánh ở ví dụ dùng bit 0/1 đã ổn định. Với select X/Z, các cách viết ternary, case và mạng cổng có thể khác hành vi mô phỏng; không suy kết quả miền Boolean thành quy tắc 4-state chung.
Lần đường dữ liệu
- Một mux chọn giữa 16 bus 32 bit cần bao nhiêu bit select? Đầu ra rộng bao nhiêu?
- Với cây
4:1,S1/S0bằng 10 đi qua nguồn nào? - Demux đang D bằng 1, select đổi 01→11;
Y1có giữ 1 không? - Lập bảng dữ liệu cho
F=A XOR Bbằng mux2:1lấy A làm select. - Nếu one-hot select vi phạm và hai nguồn khác nhau, mạng AND-OR có bảo đảm chọn đúng một nguồn không?
Kiểm tra
Bằng chứng kiểm chứng
Expected tính trước chạy: MUX CHECK vectors=64 demux=8 functions=8 time_ns=80.
Kiểm 16 pattern dữ liệu qua bốn select cho mux phẳng và cây; tham chiếu trích bit bằng phép chia số nguyên. Demux kiểm đủ hai bit dữ liệu qua bốn select. Hàm mux đối chiếu literal E2 của tám hàng đã tính, tách khỏi biểu thức gốc.
Parsed/linted/simulated/synthesized đạt. Không có flip-flop/latch trong synthesis generic. Không claim timing/4-state tương đương của mọi kiểu viết hoặc cấu trúc cell chính xác sau mapping.
Nguồn và mức độ đối chiếu
- Digital Multiplexer Circuit — bản chụp resources.zip, The 2-to-1 and 4-to-1 Multiplexer; Building Bigger Multiplexers; Implementing Functions With a Multiplexer; Multiplexer Cells and One-Hot Selects. Trích dẫn; nguồn đã đọc các mục liên quan.
- Thí nghiệm nguyên bản A2.mux, Sixty-four mux selections, eight demux vectors and eight independently tabulated function rows. Trích dẫn; nguồn đã đọc toàn văn.
- IEEE 1800-2023 SystemVerilog LRM, Variable packed indexing, concatenation, conditional expressions and logical shifts — chưa đối chiếu LRM. Chưa đối chiếu với văn bản nguồn (chưa mở).
- Digital Demultiplexer Circuit — bản chụp resources.zip, Quick Answer: Demultiplexer vs. Decoder; The 1-to-2 and 1-to-4 Demultiplexer; A Demultiplexer Is a Decoder With the Data on Enable; Steering a Write Enable. Trích dẫn; nguồn đã đọc các mục liên quan.