Altifigence Academy

9 / 24 · Khái niệm

Lưu toàn bộ giao dịch tại ranh giới pipeline

Chia phép cộng rồi nhân tỷ lệ, đồng thời giữ valid, thẻ và độ rộng đồng bộ.

Ranh giới thanh ghi mang ý nghĩa cùng các bit

Chia f(a,b)=3(a+b) thành hai tầng. Tầng thứ nhất lưu tổng chín bit của hai toán hạng tám bit không dấu. Tầng thứ hai tạo giá trị đã nhân tỷ lệ mười một bit và lưu tám bit thấp. Kết quả rộng lớn nhất là 1530. Thu hẹp tổng trung gian tình cờ giữ nguyên giá trị modulo-256 cuối của biểu thức số nguyên này, nhưng sẽ mất thông tin cần cho báo tràn hoặc so sánh về sau. Giữ độ rộng trung gian rõ ràng.

Mỗi tầng lưu valid và thẻ cùng dữ liệu. Valid bằng 0 biểu thị một ô trống. Bit dữ liệu cũ có thể còn trong tầng trống, nhưng không được tính là giao dịch. Thẻ cần cùng độ trễ thanh ghi như giá trị của nó. Hai thanh ghi dữ liệu với chỉ một thanh ghi thẻ sẽ gắn danh tính giao dịch B vào kết quả giao dịch A.

Lõi này giả định không dừng và các cổng luôn sẵn sàng. Mở rộng s1 và xác định kích thước hằng trước khi nhân. Tầng thứ hai đọc s1 và t1 cũ; đầu vào mới không thể đi qua cả hai thanh ghi tại một cạnh.

SystemVerilog
logic [8:0] s1;
logic [7:0] s2, t1, t2;
logic v1, v2;
logic [10:0] scaled;
assign scaled = {2'b00, s1} * 11'd3;
always_ff @(posedge clk) begin
  if (rst) begin
    v1 <= 1'b0;
    v2 <= 1'b0;
  end else begin
    v1 <= in_valid;
    v2 <= v1;
    if (in_valid) begin
      s1 <= {1'b0, a} + {1'b0, b};
      t1 <= in_tag;
    end
    if (v1) begin
      s2 <= scaled[7:0];
      t2 <= t1;
    end
  end
end

Chấp nhận A=(1,2) tại cạnh 0: sau đó s1=3. Chấp nhận B=(250,10) tại cạnh 1: s1 thành 260 trong khi s2 lưu kết quả 9 của A. A hợp lệ sau cạnh 1 và có thể truyền tại cạnh 2. B sau đó tạo ra 780 modulo 256, tức 12.

Cũng chuyển các ô trống qua thanh ghi valid. Giữ v1=1 cũ khi thiếu đầu vào có thể nhân đôi giao dịch. Đặt lại xóa trạng thái valid để dữ liệu cũ không trở thành kết quả mới. Tại mỗi ranh giới, liệt kê mọi trường đi kèm: phép toán, thẻ, ngoại lệ, địa chỉ hoặc dấu kết thúc gói. Kiểm tra các trường này vẫn thuộc cùng một giao dịch xuyên suốt pipeline.

Tự thử

A=(1,2,tag=10) và B=(250,10,tag=11) được chấp nhận liên tiếp. Nếu dùng t2<=in_tag, thẻ nào đi cùng kết quả A? Nêu kết nối đúng.

Đọc giải thích

Tại cạnh 1, s2 tính giao dịch A cũ trong khi in_tag hiện tại là 11, nên kết quả 9 nhận thẻ 11. Dùng t2<=t1 để ghi nhận thẻ 10 cũ của A từ tầng thứ nhất.

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.