Altifigence Academy

2 / 24 · Konsep

Lebar bit, perluasan tanda, dan overflow

Gunakan contoh numerik untuk membedakan penafsiran, perluasan, dan penyempitan.

Pisahkan pola bit dari maknanya

Pola delapan bit 1111_1101 mewakili 253 tak bertanda atau -3 bertanda dalam komplemen dua. Bit yang disimpan identik, tetapi perbandingan dan perluasannya berbeda. Nilai delapan bit bertanda berkisar dari -128 hingga 127; nilai tak bertanda berkisar dari 0 hingga 255. Lebar menentukan jumlah pola yang dapat direpresentasikan, sedangkan sifat bertanda menentukan penafsiran numeriknya.

Perluas 253 tak bertanda dengan nol ketika memindahkannya ke enam belas bit. Perluas tanda -3 dengan mengulang bit paling signifikan aslinya, sehingga menghasilkan 1111_1111_1111_1101. Perluasan dengan nol akan mengubah -3 menjadi 253. Dalam SystemVerilog, tetapkan tipe dan lebar operand secara eksplisit sebelum menghitung; jangan berasumsi bahwa konkatenasi atau pemilihan sebagian bit mempertahankan penafsiran bertanda yang Anda inginkan.

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;

Di sini kedua masukan menjadi sembilan bit sebelum penjumlahan. 255+1 tak bertanda menghasilkan 256, lalu nol pada delapan bit rendah. 127+1 bertanda juga menghasilkan nilai matematis 128, tetapi penyempitan menjadi delapan bit bertanda menghasilkan -128. Carry menunjukkan batas tak bertanda; overflow bertanda menunjukkan batas bertanda. Menjumlahkan operand dengan tanda yang sama lalu memperoleh tanda hasil yang berubah menandakan overflow bertanda. Menjumlahkan -1 dan 1 dapat menghasilkan carry tanpa overflow bertanda.

Rencanakan juga lebar hasil antara. Hasil perkalian terbesar dari operand delapan bit tak bertanda adalah 65025 dan membutuhkan enam belas bit. Empat nilai delapan bit tak bertanda dapat berjumlah 1020, sehingga memerlukan sepuluh bit. Memotong setiap jumlah parsial menjadi delapan bit menghilangkan informasi yang tidak dapat dipulihkan oleh register akhir yang lebih lebar.

OperasiHasil lebarPenafsiran setelah penyempitan
255+1 tak bertanda2560 dengan carry
127+1 bertanda128-128 dengan overflow
-3+2 bertanda-1-1 tanpa overflow

Gunakan peringatan WIDTH dari Verilator untuk menyelidiki perubahan ukuran yang tidak disengaja. Pemeriksaan Node dalam kursus ini menjalankan model numerik, bukan cuplikan HDL tersebut. Uji nol, nilai ekstrem, dan campuran tanda sebelum menganggap contoh positif biasa sebagai bukti kebenaran.

Coba sendiri

Cari hasil perluasan tanda -3 dan 2 dari delapan menjadi sembilan bit, lalu jumlahkan. Cari juga lebar minimum untuk jumlah tepat empat nilai tak bertanda sebesar 255.

Baca penjelasan

Operand sembilan bitnya adalah 111111101 dan 000000010. Jumlahnya 111111111, yaitu -1. Empat nilai 255 berjumlah 1020; sembilan bit tak bertanda hanya mencapai 511, sehingga diperlukan sepuluh bit.

Pilihan berlaku di peramban ini. Ubah kapan saja di bagian bawah halaman.