Altifigence Academy

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.

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 r3r2r1r0r_3r_2r_1r_0, 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 r3r2r1r0validindex
1---111
01--110
001-101
0001100
0000000

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.

valid=r3+r2+r1+r0,index1=r3+r2,index0=r3+r2‾r1valid=r_3+r_2+r_1+r_0,\quad index_1=r_3+r_2,\quad index_0=r_3+\overline{r_2}r_1

1011 cho index=11. Với 0110, r2 ưu tiên hơn r1 nên index=10.

Mỗi cột là một tổ hợp yêu cầu độc lập
Xem dữ liệu dạng sóng
Dữ liệu dạng sóng: mỗi ký tự là một khoảng; dấu chấm giữ trạng thái trước; p là một chu kỳ đồng hồ.
Tín hiệuDạng sóngGiá trị bus
requests2345230000 → 0001 → 0011 → 0110 → 1011 → 1000
valid01....
index2.345.00 → 01 → 10 → 11

RTL phải thể hiện rõ ưu tiên

SystemVerilog
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;
end

Chỉ 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

Chỉ chọn một yêu cầu đến đồng thời

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.

granti=valid∧(index=i)grant_i=valid\land(index=i)

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ý.

Lựa chọn áp dụng cho trình duyệt này. Có thể đổi ở chân trang bất cứ lúc nào.