Altifigence Academy

2 / 20 · Теория

Знаковые произведения и разрядность аккумулятора

Выведите разрядность аккумулятора из наихудшего диапазона операндов.

Учитывайте минимальный отрицательный вход

W-битный вход в дополнительном коде лежит от −2^(W−1) до 2^(W−1)−1. Наибольшее положительное произведение получается, когда оба входа имеют минимальное отрицательное значение. При W=8 получаем (−128)×(−128)=16384, что превышает 127×127=16129. Полное знаковое произведение двух W-битных входов безопасно представляется в 2W битах.

Для свёртки из K членов этот курс выбирает приведённое ниже консервативное правило. K должно быть положительным; правило предполагает одинаковую разрядность операндов и отсутствие дополнительного смещения bias.

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

Это простая безопасная граница, а не утверждение о минимальной разрядности для любого K. При W=8 и K=4 выберите восемнадцать бит. Четыре максимальных произведения дают 65536. Знаковый семнадцатибитный аккумулятор ограничен 65535, поэтому ошибается именно на этой границе. Восемнадцать бит покрывают −131072–131071. При K=1 дополнительные биты накопления не добавляются.

Сохраняйте знак явно

Объявляйте промежуточные сигналы, а не угадывайте размеры выражения. AW должен быть не меньше 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};

Восьмибитный шаблон 0xFE представляет −2. Умножение на три даёт −6; расширение этого произведения требует знакового расширения. Расширение нулями превращает отрицательное число в положительное. Документируйте точку, где беззнаковый битовый шаблон интерфейса становится знаковым арифметическим значением.

Разрядность зависит от полной свёртки, удерживаемой в аккумуляторе. Разбиение K на блоки не оправдывает сужение частичного аккумулятора, если он может переполниться до объединения. Добавление bias или объединение нескольких свёрток требует нового анализа диапазона.

Проверяйте минимум×минимум, минимум×максимум, максимум×максимум и чередующиеся знаки. Сохраняйте и широкий целочисленный эталон, и результат выбранной разрядности. Точное накопление внутри заданного диапазона и циклическое переполнение или насыщение вне него — отдельные требования; трактовка всех несовпадений как общего переполнения скрывает реальные ошибки знака.

Попробуйте сами

При W=4 и K=3 найдите консервативное AW и максимальную положительную сумму. Какой бит расширяет произведение −8×7?

Прочитать объяснение

PW=8 и ceil(log2 3)=2, поэтому AW=10. Максимальная положительная сумма — 3×64=192. Произведение равно −56 и должно расширяться единицами. Десять знаковых бит покрывают −512..511.

Выбор действует в этом браузере. Его можно изменить внизу страницы.