Altifigence Academy

2 / 24 · Khái niệm

Độ rộng, mở rộng dấu và tràn số

Dùng ví dụ số để phân biệt cách diễn giải, mở rộng và thu hẹp.

Tách mẫu bit khỏi ý nghĩa của nó

Mẫu tám bit 1111_1101 biểu diễn số không dấu 253 hoặc số có dấu bù hai -3. Các bit được lưu giống nhau, nhưng phép so sánh và cách mở rộng khác nhau. Giá trị tám bit có dấu nằm trong khoảng -128 đến 127; giá trị không dấu nằm trong khoảng 0 đến 255. Độ rộng quyết định số lượng mẫu có thể biểu diễn, còn tính có dấu quyết định cách diễn giải số của chúng.

Mở rộng bằng bit 0 cho số không dấu 253 khi chuyển sang mười sáu bit. Mở rộng dấu cho -3 bằng cách lặp lại bit cao nhất ban đầu, tạo ra 1111_1111_1111_1101. Mở rộng bằng bit 0 sẽ biến -3 thành 253. Trong SystemVerilog, hãy xác định rõ kiểu và độ rộng toán hạng trước khi tính; đừng giả định phép nối hoặc chọn một phần giữ được cách diễn giải có dấu bạn mong muốn.

SystemVerilog
logic [7:0] ua, ub;
logic [8:0] usum;
logic signed [7:0] sa, sb;
logic signed [8:0] sax, sbx, ssum;
assign usum = {1'b0, ua} + {1'b0, ub};
assign sax = {sa[7], sa};
assign sbx = {sb[7], sb};
assign ssum = sax + sbx;

Ở đây cả hai đầu vào trở thành chín bit trước khi cộng. Phép cộng không dấu 255+1 cho 256, rồi cho 0 ở tám bit thấp. Phép cộng có dấu 127+1 cũng có giá trị toán học 128, nhưng thu hẹp về tám bit có dấu tạo ra -128. Bit nhớ báo giới hạn không dấu; tràn số có dấu báo giới hạn có dấu. Khi cộng hai toán hạng cùng dấu mà dấu kết quả thay đổi, đã xảy ra tràn số có dấu. Cộng -1 và 1 có thể sinh bit nhớ mà không tràn số có dấu.

Hãy tính cả độ rộng trung gian. Tích lớn nhất của hai số tám bit không dấu là 65025 và cần mười sáu bit. Bốn giá trị tám bit không dấu có thể có tổng 1020, cần mười bit. Cắt từng tổng riêng về tám bit làm mất thông tin mà thanh ghi cuối rộng hơn không thể khôi phục.

Phép toánKết quả rộngCách diễn giải sau thu hẹp
không dấu 255+12560 kèm bit nhớ
có dấu 127+1128-128 kèm tràn số
có dấu -3+2-1-1 không tràn số

Dùng cảnh báo WIDTH của Verilator để tìm các thay đổi kích thước ngoài ý muốn. Các phép kiểm tra Node trong khóa học chạy mô hình số, không chạy các đoạn HDL này. Hãy kiểm tra 0, các giá trị cực hạn và các dấu khác nhau trước khi coi ví dụ số dương thông thường là bằng chứng đúng đắn.

Tự thử

Tìm kết quả khi mở rộng dấu của -3 và 2 từ tám bit lên chín bit rồi cộng. Đồng thời tìm độ rộng tối thiểu để biểu diễn chính xác tổng của bốn giá trị không dấu 255.

Đọc giải thích

Hai toán hạng chín bit là 111111101 và 000000010. Tổng là 111111111, tức -1. Bốn giá trị 255 có tổng 1020; chín bit không dấu chỉ đạt tối đa 511, nên cần mười bit.

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.