Altifigence Academy

2 / 20 · Konsep

Hasil perkalian bertanda dan lebar akumulator

Turunkan lebar akumulator dari rentang operand pada kondisi terburuk.

Sertakan masukan paling negatif

Masukan komplemen dua selebar W bit berkisar dari −2^(W−1) hingga 2^(W−1)−1. Hasil perkalian positif terbesar terjadi ketika kedua masukan bernilai paling negatif. Untuk W=8, (−128)×(−128)=16384, yang melebihi 127×127=16129. Hasil perkalian bertanda penuh dari dua masukan W bit dapat direpresentasikan dengan aman dalam 2W bit.

Untuk reduksi berisi K suku, kursus ini memilih aturan konservatif berikut. K harus positif; aturan ini mengasumsikan lebar operand sama dan tidak ada bias tambahan.

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

Aturan tersebut merupakan batas aman sederhana, bukan klaim lebar minimum untuk setiap K. Dengan W=8 dan K=4, pilih delapan belas bit. Empat hasil perkalian maksimum berjumlah 65536. Akumulator bertanda tujuh belas bit hanya mencapai 65535, sehingga gagal tepat pada batas ini. Delapan belas bit mencakup −131072 hingga 131071. Ketika K=1, tidak ditambahkan bit akumulasi.

Pertahankan tanda secara eksplisit

Deklarasikan sinyal antara alih-alih menebak ukuran ekspresi. AW harus sekurang-kurangnya 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};

Pola delapan bit 0xFE mewakili −2. Mengalikannya dengan tiga menghasilkan −6; memperlebar hasil itu memerlukan perluasan tanda. Perluasan dengan nol mengubah bilangan negatif menjadi positif. Dokumentasikan titik ketika pola bit antarmuka tak bertanda menjadi nilai aritmetika bertanda.

Lebar bergantung pada keseluruhan reduksi yang dipertahankan dalam akumulator. Membagi K ke dalam tile tidak membenarkan penyempitan akumulator parsial jika dapat mengalami overflow sebelum penggabungan. Penambahan bias atau penggabungan beberapa reduksi memerlukan analisis rentang baru.

Uji minimum×minimum, minimum×maksimum, maksimum×maksimum, dan tanda berselang-seling. Simpan acuan bilangan bulat lebar serta hasil dengan lebar yang dipilih. Akumulasi tepat dalam rentang yang ditetapkan dan perilaku berputar atau saturasi di luar rentang merupakan kontrak terpisah; menganggap semua ketidakcocokan sebagai overflow umum menyembunyikan kesalahan tanda yang nyata.

Coba sendiri

Untuk W=4 dan K=3, cari AW konservatif dan jumlah positif maksimum. Bit mana yang memperluas hasil perkalian −8×7?

Baca penjelasan

PW=8 dan ceil(log2 3)=2, jadi AW=10. Jumlah positif maksimum adalah 3×64=192. Hasil perkaliannya −56 dan harus diperluas dengan bit satu. Sepuluh bit bertanda mencakup −512..511.

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