Altifigence Academy

2 / 20 · Khái niệm

Tích có dấu và độ rộng bộ tích lũy

Suy ra độ rộng bộ tích lũy từ phạm vi toán hạng xấu nhất.

Tính cả đầu vào âm nhỏ nhất

Đầu vào bù hai W bit nằm trong khoảng −2^(W−1) đến 2^(W−1)−1. Tích dương lớn nhất xuất hiện khi cả hai đầu vào là giá trị âm nhỏ nhất. Với W=8, (−128)×(−128)=16384, vượt 127×127=16129. Tích có dấu đầy đủ của hai đầu vào W bit được biểu diễn an toàn bằng 2W bit.

Với phép rút gọn gồm K số hạng, khóa học chọn quy tắc bảo thủ sau. K phải dương; quy tắc giả định độ rộng toán hạng bằng nhau và không có bias bổ sung.

Wacc=2W+⌈log⁡2K⌉W_{acc}=2W+\lceil\log_2 K\rceil

Quy tắc là giới hạn an toàn đơn giản, không khẳng định độ rộng tối thiểu cho mọi K. Với W=8 và K=4, chọn mười tám bit. Bốn tích lớn nhất có tổng 65536. Bộ tích lũy mười bảy bit có dấu chỉ đạt 65535, nên sai đúng tại biên này. Mười tám bit bao phủ −131072 đến 131071. Khi K=1, không thêm bit tích lũy.

Giữ dấu rõ ràng

Khai báo tín hiệu trung gian thay vì đoán kích thước biểu thức. AW phải ít nhất bằng PW.

SystemVerilog
localparam int PW = 2*W;
localparam int AW = PW + $clog2(K);
logic signed [W-1:0] a, b;
logic signed [PW-1:0] product;
logic signed [AW-1:0] addend, acc;
assign product = $signed(a) * $signed(b);
assign addend = {{(AW-PW){product[PW-1]}}, product};

Mẫu tám bit 0xFE biểu diễn −2. Nhân với ba cho −6; mở rộng tích đó cần mở rộng dấu. Mở rộng bằng 0 biến số âm thành số dương. Ghi rõ nơi mẫu bit của giao diện không dấu trở thành giá trị số học có dấu.

Độ rộng phụ thuộc toàn bộ phép rút gọn được giữ trong bộ tích lũy. Chia K thành các khối không cho phép thu hẹp bộ tích lũy riêng nếu nó có thể tràn trước khi kết hợp. Thêm bias hoặc kết hợp nhiều phép rút gọn cần phân tích phạm vi mới.

Kiểm tra nhỏ nhất×nhỏ nhất, nhỏ nhất×lớn nhất, lớn nhất×lớn nhất và dấu xen kẽ. Giữ cả tham chiếu số nguyên rộng và kết quả theo độ rộng đã chọn. Tích lũy chính xác trong phạm vi xác định và quay vòng hoặc bão hòa ngoài phạm vi là các quy ước riêng; coi mọi sai lệch là tràn chung chung sẽ che giấu lỗi dấu thực sự.

Tự thử

Với W=4 và K=3, tìm AW bảo thủ và tổng dương lớn nhất. Bit nào mở rộng tích −8×7?

Đọc giải thích

PW=8 và ceil(log2 3)=2, nên AW=10. Tổng dương lớn nhất là 3×64=192. Tích là −56 và phải mở rộng bằng các bit 1. Mười bit có dấu bao phủ −512..511.

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.