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.
Bài học miễn phí. Đăng ký để lưu tiến độ học tậ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.
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án | Kết quả rộng | Cách diễn giải sau thu hẹp |
|---|---|---|
| không dấu 255+1 | 256 | 0 kèm bit nhớ |
| có dấu 127+1 | 128 | -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.