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.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
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.
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-ready | in-valid | Hành động |
|---|---|---|---|
| 0 | 0 | 1 | Lưu đầu vào |
| 1 | 0 | 1 | Từ chối đầu vào và giữ đầu ra |
| 1 | 1 | 1 | Chuyển giao phần tử cũ và lưu phần tử thay thế |
| 1 | 1 | 0 | Chuyể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ó.