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ộ.
Bài học miễn phí. Đăng ký để lưu tiến độ học tập.
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.
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
endChấ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.