Altifigence Academy

14 / 24 · Khái niệm

Ready/valid và trạng thái dừng

Tầng đầu ra giữ A với out_ready=0 trong khi đầu vào B hợp lệ. Tầng và bên tạo phải làm gì tại cạnh tiếp theo?

Chỉ tiến khi truyền

Bên tạo kích hoạt valid khi phần tử hiện tại sẵn có. Bên nhận kích hoạt ready khi có thể chấp nhận phần tử đó. Tại cạnh lên có cả hai được kích hoạt, một lần truyền xảy ra. Chỉ lúc đó tiến tọa độ pixel, trạng thái bộ đệm dòng và đầu vào tích lũy tương ứng. Chỉ tiến theo valid làm mất dữ liệu khi bên nhận tạm dừng; chỉ tiến theo ready đếm đầu vào không tồn tại.

Khi valid cao và ready thấp, giữ cùng dữ liệu và valid. Để tiếp tục chấp nhận đầu vào khi đầu ra bị chặn, cung cấp lưu trữ và suy ra ready từ dung lượng còn lại. Ví dụ RTL là tầng một phần tử: chấp nhận phần tử mới khi trống hoặc phần tử hiện tại có thể rời đi.

Tính trình tự truyền

Với chu kỳ 0 đến 4, valid=[0,1,1,1,1] và ready=[0,1,0,1,1] cho fire=[0,1,0,1,1]. Năm xung nhịp chấp nhận ba pixel. Phần tử dừng trong chu kỳ hai giữ đến chu kỳ ba. Bộ đếm hàng rộng bốn chưa hoàn thành hàng đầu. Đếm xung nhịp thay vì lần truyền làm lệch mọi tọa độ cửa sổ sau.

Nếu tầng giữ A với out_valid cao và out_ready thấp, in_ready thấp và A vẫn lưu. Khi out_ready cao, nó có thể gửi A và chấp nhận B tại cùng cạnh. Không có đầu vào thay thế thì xóa valid đầu ra. Ghi rõ có cho phép thay thế đồng thời và độ trễ kéo theo là gì.

Reset xóa tính hợp lệ cùng dữ liệu. Khung mới cần đặt lại tọa độ và window-valid xác định. Nhận đầu vào cuối khác với nhận đầu ra cuối; kích hoạt done quá sớm có thể để khung mới ghi đè công việc đang chờ.

Mã là tầng truyền, không phải engine tích chập đầy đủ. Nếu quy trình đã cài hỗ trợ sửa và mô phỏng SystemVerilog, tạo tệp thủ công rồi kiểm tra ổn định khi tạm dừng cùng thay thế đồng thời. Ở đây không khẳng định thực thi trình mô phỏng RTL. Sơ đồ minh họa fire; không phải vết phần cứng được ghi.

SystemVerilog
module sample_stage (
  input logic clk, reset,
  input logic in_valid,
  output logic in_ready,
  input logic signed [7:0] in_data,
  output logic out_valid,
  input logic out_ready,
  output logic signed [7:0] out_data
);
  assign in_ready = !out_valid || out_ready;
  always_ff @(posedge clk) begin
    if (reset) begin
      out_valid <= 1'b0;
      out_data <= '0;
    end else if (in_ready) begin
      out_valid <= in_valid;
      if (in_valid) out_data <= in_data;
    end
  end
endmodule
Lần truyền được chấp nhận khi tạm dừng
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
clockp....
valid01111
ready01011
fire01011

Tự thử

Tầng đầu ra giữ A với out_ready=0 trong khi đầu vào B hợp lệ. Tầng và bên tạo phải làm gì tại cạnh tiếp theo?

Đọc giải thích

Tầng đưa in_ready thấp và giữ A cùng out_valid. Bên tạo giữ B cùng in_valid. Các phần tử ổn định có thể truyền đúng một lần về sau.

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.