Altifigence Academy

14 / 24 · Khái niệm

Thiết kế thanh ghi co giãn một ô

Chấp nhận vào ô trống hoặc thay phần tử được nhận đồng thời.

Suy ra ready từ chỗ lưu trữ còn trống

Bộ đệm một ô gồm một bit full và thanh ghi tải. Khi trống, nó có thể chấp nhận đầu vào ngay cả khi đích dừng. Khi đầy, nó có thể chấp nhận phần tử thay thế nếu đích nhận đầu ra hiện tại tại cạnh đó. Vì thế input-ready là !full OR output-ready, còn output-valid là full. Bộ đệm có thanh ghi này không cho dữ liệu đi xuyên tổ hợp.

Nếu input-ready cao, full tiếp theo bằng input-valid. Ghi nhận tải khi có đầu vào; nếu không, làm trống ô. Nếu input-ready thấp, giữ full và tải. Xóa full chỉ vì đầu ra đã truyền sẽ mất phần tử thay thế đồng thời. Chỉ ghi nhận theo input-valid sẽ ghi đè ô đầy đang dừng.

SystemVerilog
module elastic_byte (
  input logic clk, rst,
  input logic in_valid,
  output logic in_ready,
  input logic [7:0] in_data, in_tag,
  output logic out_valid,
  input logic out_ready,
  output logic [7:0] out_data, out_tag
);
  logic full;
  assign in_ready = !full || out_ready;
  assign out_valid = full;
  always_ff @(posedge clk) begin
    if (rst) full <= 1'b0;
    else if (in_ready) begin
      full <= in_valid;
      if (in_valid) begin
        out_data <= in_data;
        out_tag <= in_tag;
      end
    end
  end
endmodule
full cũout-readyin-validHành động
001Lưu đầu vào
101Từ chối đầu vào và giữ đầu ra
111Chuyển giao phần tử cũ và lưu phần tử thay thế
110Chuyển giao phần tử cũ và làm trống ô

Lưu tag0,y9 tại cạnh 0. Dừng tại cạnh 1. Tại cạnh 2, nhận tag0 và lưu tag1,y12; ô vẫn đầy. Tại cạnh 3, nhận tag1 và làm trống nếu không có đầu vào. Thay thế cho phép một giao dịch mỗi chu kỳ.

Nối nhiều tầng tạo đường ready tổ hợp ngược. Đăng ký ready qua thanh ghi cần thêm lưu trữ cho dữ liệu đến trước khi thông báo dừng có hiệu lực. Kiểm tra riêng các hạn chế đường tổ hợp của từng bus. Bất kể độ rộng tải, lưu dữ liệu và mọi trường đi kèm dưới cùng điều kiện, và kiểm chứng cả bốn trường hợp cập nhật.

Tự thử

Tại cạnh có full=1, out-ready=1 và in-valid=1, nhận tag7 và đưa ra tag8. full và out-tag tiếp theo là gì? Điều gì sai nếu luôn xóa full khi nhận?

Đọc giải thích

Input-ready cao, nên lưu tag8 và giữ full=1. Out-tag trở thành 8. Luôn xóa full sẽ mất tag8 sau khi đã chấp nhận nó.

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.