11 / 37 · Khái niệm
Bộ mã hóa và ưu tiên: chọn một trong nhiều yêu cầu
Phân biệt giả thiết đầu vào one-hot với valid và kết quả lựa chọn của bộ mã hóa ưu tiên.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
Chiều ngược của bộ giải mã cũng cần điều kiện
Bộ giải mãBộ giải mã Mạch kích hoạt đường đầu ra tương ứng mã nhị phân. Nếu có enable, có thể đưa mọi đầu ra về 0 khi vô hiệu hóa. Tìm hiểu thêm đổi địa chỉ thành đường chọn one-hotOne-hot Biểu diễn có đúng một bit bằng 1. Nếu cho phép cả trường hợp tất cả bằng 0, gọi riêng là one-hot-or-zero. Tìm hiểu thêm; bộ mã hóa đổi vị trí đầu vào hoạt động thành địa chỉ. Nhưng bộ mã hóa one-hot thông thường giả định chỉ một đầu vào bật. Nếu nhiều đầu vào cùng 1, cần đặc tả thêm vị trí nào được báo.
Với yêu cầu bốn bit , quy định số lớn ưu tiên hơn. Khi mọi đầu vào bằng 0, đặt valid=0, index=00. Chỉ nhìn index=00 để kết luận không có yêu cầu sẽ nhầm với yêu cầu r0.
| Đầu vào r3r2r1r0 | valid | index |
|---|---|---|
| 1--- | 1 | 11 |
| 01-- | 1 | 10 |
| 001- | 1 | 01 |
| 0001 | 1 | 00 |
| 0000 | 0 | 00 |
Dấu - nghĩa là 0 hay 1 đều cho cùng kết quả, không có nghĩa được phép đưa X mô phỏng vào. Các mẫu từ trên xuống loại trừ lẫn nhau.
1011 cho index=11. Với 0110, r2 ưu tiên hơn r1 nên index=10.
Xem dữ liệu dạng sóng
| Tín hiệu | Dạng sóng | Giá trị bus |
|---|---|---|
| requests | 234523 | 0000 → 0001 → 0011 → 0110 → 1011 → 1000 |
| valid | 01.... | |
| index | 2.345. | 00 → 01 → 10 → 11 |
RTL phải thể hiện rõ ưu tiên
always_comb begin
valid = |request;
index = 2'b00;
if (request[3]) index = 2'd3;
else if (request[2]) index = 2'd2;
else if (request[1]) index = 2'd1;
endChỉ request[0]=1 thì giữ index mặc định bằng 0 và valid=1. Cấp mặc định cho mọi đường để mạch tổ hợp không sinh lưu trữ. Kiểm tra 16 đầu vào: khi valid=1, bit được chọn phải bằng 1, mọi bit cao hơn phải bằng 0.
Lựa chọn và công bằng là hai vấn đề
Nếu r3 luôn bằng 1, r0 sẽ mãi không được chọn. Mạch này chỉ thực hiện ưu tiên cố định. Muốn xử lý công bằng cần cơ chế phân xử nhớ lần chọn trước, khi đó trở thành mạch tuần tự.
Thực hành · Quan sát yêu cầu, địa chỉ chọn và grant
r3r2r1r0=1011; valid=1; index=11; grant=1000. Yêu cầu có số lớn hơn được ưu tiên. Khi valid=0, index không xác định yêu cầu được chọn.
Yêu cầu ban đầu 1011 chọn r3. Tắt r3 thì chọn r1, index=01, grant=0010. Bật tắt r0 không được đổi lựa chọn trong khi r1 vẫn bằng 1.
So sánh “Tắt tất cả” với chỉ bật r0. Cả hai đều index=00 nhưng valid và grant khác. Mạch sau chỉ đọc index có thể xử lý một yêu cầu không tồn tại.
grant chỉ có 1 tại yêu cầu được chọn là kết quả giải mã lại index và valid.
Có ba bất biến: grant có tối đa một bit 1; vị trí grant=1 phải có yêu cầu thật; mọi yêu cầu cao hơn vị trí chọn đều bằng 0. Thực hành này không tiêu thụ yêu cầu và không nhớ lựa chọn trước. Các yêu cầu thấp chờ khi r3 luôn bật là đặc tính ưu tiên cố định.
Tự thử
Viết index, valid, grant cho yêu cầu 0101 và 0001. Tại 0000, vì sao không được xử lý r0 chỉ vì index=00?
Đọc giải thích
0101 cho index=10, valid=1, grant=0100. 0001 cho index=00, valid=1, grant=0001. Với 0000, index=00 chỉ là mặc định; valid=0, grant=0000 nên không có yêu cầu để xử lý.