2 / 20 · Теория
Знаковые произведения и разрядность аккумулятора
Выведите разрядность аккумулятора из наихудшего диапазона операндов.
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Учитывайте минимальный отрицательный вход
W-битный вход в дополнительном коде лежит от −2^(W−1) до 2^(W−1)−1. Наибольшее положительное произведение получается, когда оба входа имеют минимальное отрицательное значение. При W=8 получаем (−128)×(−128)=16384, что превышает 127×127=16129. Полное знаковое произведение двух W-битных входов безопасно представляется в 2W битах.
Для свёртки из K членов этот курс выбирает приведённое ниже консервативное правило. K должно быть положительным; правило предполагает одинаковую разрядность операндов и отсутствие дополнительного смещения bias.
Это простая безопасная граница, а не утверждение о минимальной разрядности для любого K. При W=8 и K=4 выберите восемнадцать бит. Четыре максимальных произведения дают 65536. Знаковый семнадцатибитный аккумулятор ограничен 65535, поэтому ошибается именно на этой границе. Восемнадцать бит покрывают −131072–131071. При K=1 дополнительные биты накопления не добавляются.
Сохраняйте знак явно
Объявляйте промежуточные сигналы, а не угадывайте размеры выражения. AW должен быть не меньше PW.
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.