Найти в Дзене
IT. Как это работает?

Зачем нужны умножители 17*17 бит?

Оглавление

Всем привет! Пришло время обсудить возможное назначение умножителя с весьма странными характеристиками, входящего в структуру ЦОС-процессора TMS320c5416 из одного из прошлых выпусков.

Структурная схема процессора TMS320c5416. Обратите внимание на модуль MAC (17x17) MPY
Структурная схема процессора TMS320c5416. Обратите внимание на модуль MAC (17x17) MPY

Немного напомню о чем шла речь и что конкретно вызывает недоумение. В цифровой обработке сигналов разрядность чисел определяет шумы квантования при переходе от аналоговых величин к цифровым. Чем больше разрядов у аналого-цифрового преобразователя (АЦП), тем точнее вычисления. Однако, для большинства задач разрядности 16 бит хватает с запасом, потому как в этом случае шумы квантования оцениваются в -98 дБ по отношению к динамическому диапазону АЦП.

Динамический диапазон АЦП - это отношение между самым сильным и самым слабым сигналом, которое может быть переведено в цифровой вид без искажений.

Зачем понадобились 17-битные умножители?

Существуют задачи, где необходима повышенная разрядность отсчетов сигнала. Например, после умножения 16-битного отсчета на 16-битный коэффициент импульсной характеристики фильтра по всем правилам математики получается 32-битный результат, сохраняющий абсолютную точность.

Пример умножения 6-битных чисел с 12-битным результатом
Пример умножения 6-битных чисел с 12-битным результатом

Чтобы не терять точность на округлениях до исходного 16-битного формата (не получать шум округления) можно продолжить вычисления с 32-битными отсчетами. В этом случае сложение еще не вызовет сложностей, потому как разрядность арифметико-логического устройства (АЛУ) и регистра-аккумулятора 40 бит.

Схема соединения умножителя, АЛУ и аккумулятора в процессоре TMS320c5416
Схема соединения умножителя, АЛУ и аккумулятора в процессоре TMS320c5416

Однако, умножение теперь будет происходит по одному из следующих сценариев...

"Школьный" способ умножения

Поскольку изучаемая нами в школе таблица умножения содержала множители от 1 до 9, то и весь процесс умножения чисел с несколькими десятичными разрядами состоял из множества табличных умножений и затем сложений. В двоичном представлении все будет в точности также, однако не будем забывать, что сложения чисел происходят с переносом между разрядами:

-4

Если схема выше вызывает подозрения, то ниже будет поясняющая немного больше:

При сложении чисел появляются разрядные переносы, которые также участвуют в сложениях
При сложении чисел появляются разрядные переносы, которые также участвуют в сложениях

Итого: младшие 16 бит результата умножения младших 16 бит множителей просто сносятся в результат. Остальные результаты умножения 16х16 бит складываются с переносом и составляют старшие биты результата. Как можно заметить, умножить 32-битные числа на 16-битном умножителе сложно, но вполне возможно. Необходимо большое количество дополнительных действий, среди которых будет 4 умножения 16х16 бит.

Умножение Карацубы

В свое время Анатолий Карацуба сделал нам хороший подарок в виде своего алгоритма умножения чисел.

Схема умножителя чисел способом Карацубы
Схема умножителя чисел способом Карацубы

Особенностью этого способа умножения чисел является использование всего 3-х умножений и для нашего примера необходимо выполнить 2 умножения 16х16 бит, а потом произвести умножение двух сумм 16-битных чисел. Однако, есть одно немаловажное уточнение! Суммы 16-битных чисел это 17-битные числа, потому как при сложении двоичных появляется бит переноса. В этом видео есть пояснение:

Итого: есть обоснованное предположение, что 17-битный умножитель в составе ЦОС-процессора нужен именно для экономичности умножений чисел без потери точности на округления.

Поддержите статью лайком если понравилось и подпишитесь чтобы ничего не пропускать.

Также не обойдите вниманием канал на YouTube. Подписки и лайки будут приятным ответом от аудитории.