Умножитель Дадда — это аппаратный двоичный умножитель, разработанный ученым-компьютерщиком Луиджи Дадда в 1965 году. [1] Он использует выбор полных и половинных сумматоров для суммирования частичных произведений поэтапно ( дерево Дадда или редукция Дадда ) до тех пор, пока не останется два числа. Конструкция похожа на множитель Уоллеса , но другое дерево редукции уменьшает необходимое количество вентилей (для всех размеров операндов, кроме самых маленьких) и делает его немного быстрее (для всех размеров операндов). [2]
Умножители Дадда и Уоллеса имеют одинаковые три шага для двух битовых строк длиной и соответственно :
Умножить ( логическое И ) каждый бит на каждый бит , получив результаты, сгруппированные по весу в столбцах.
Уменьшаем количество частичных произведений, используя полные и половинные сумматоры , пока не останется не более двух бит каждого веса.
Сложите конечный результат с помощью обычного сумматора.
Как и в случае с множителем Уоллеса, продукты умножения первого шага имеют разные веса, отражающие величину исходных значений битов в умножении. Например, произведение битов имеет вес .
В отличие от умножителей Уоллеса, которые максимально сокращают на каждом слое, умножители Дадда пытаются минимизировать количество используемых вентилей, а также задержку ввода/вывода. Из-за этого умножители Дадда имеют менее затратную фазу сокращения, но конечные числа могут быть на несколько бит длиннее, что требует немного больших сумматоров.
Описание
Для достижения более оптимального конечного продукта структура процесса редукции регулируется немного более сложными правилами, чем в множителях Уоллеса.
Прогресс снижения контролируется последовательностью максимальной высоты , определяемой:
, и
Это дает такую последовательность:
Начальное значение выбирается как наибольшее значение, такое что , где и — число бит во входном множимом и множителе. Меньшая из двух длин бит будет максимальной высотой каждого столбца весов после первого этапа умножения. Для каждого этапа редукции целью алгоритма является уменьшение высоты каждого столбца так, чтобы она была меньше или равна значению .
Для каждого этапа из , уменьшите каждый столбец, начиная со столбца с наименьшим весом, в соответствии со следующими правилами:
Если столбец не требует сокращения, перейдите к столбцу
Если сложить два верхних элемента в полусумматоре, поместив результат в конец столбца, а перенос в конец столбца , то перейти к столбцу
В противном случае сложите три верхних элемента в полном сумматоре, поместив результат в конец столбца, а перенос в конец столбца , и перезапустите с шага 1.
Пример алгоритма
Пример на соседнем изображении иллюстрирует сокращение множителя 8 × 8, описанное здесь.
Начальное состояние выбирается как наибольшее значение меньше 8.
Этап ,
все они меньше или равны шести битам по высоте, поэтому никаких изменений не вносится
, поэтому применяется полусумматор, уменьшающий его до шести бит и добавляющий его бит переноса к
включая бит переноса из , поэтому мы применяем полный сумматор и полусумматор, чтобы сократить его до шести бит
включая два бита переноса из , поэтому мы снова применяем полный сумматор и полусумматор, чтобы сократить его до шести бит
включая два бита переноса из , поэтому мы применяем один полный сумматор и уменьшаем его до шести бит
все они меньше или равны шести битам по высоте, включая биты переноса, поэтому никаких изменений не вносится
Этап ,
все они меньше или равны четырем битам по высоте, поэтому никаких изменений не вносится
, поэтому применяется полусумматор, уменьшающий его до четырех бит и добавляющий его бит переноса к
включая бит переноса из , поэтому мы применяем полный сумматор и полусумматор, чтобы сократить его до четырех бит
включая предыдущие биты переноса, поэтому мы применяем два полных сумматора, чтобы сократить их до четырех бит
включая предыдущие биты переноса, поэтому мы применяем полный сумматор, чтобы сократить его до четырех бит
все они меньше или равны четырем битам по высоте, включая биты переноса, поэтому никаких изменений не вносится
Этап ,
все они меньше или равны трем битам по высоте, поэтому никаких изменений не вносится
, поэтому применяется полусумматор, уменьшающий его до трех бит и добавляющий его бит переноса к
включая предыдущие биты переноса, поэтому мы применяем один полный сумматор, чтобы сократить их до трех бит
все они меньше или равны трем битам по высоте, включая биты переноса, поэтому никаких изменений не вносится
Этап ,
все они меньше или равны двум битам по высоте, поэтому никаких изменений не вносится
, поэтому применяется полусумматор, уменьшающий его до двух бит и добавляющий его бит переноса к
включая предыдущие биты переноса, поэтому мы применяем один полный сумматор, чтобы сократить их до двух бит
включая бит переноса из , поэтому никаких изменений не вносится
Добавление
На выходе последнего этапа остается 15 столбцов высотой два или меньше, которые можно передать в стандартный сумматор.
^ Дадда, Луиджи (май 1965 г.). «Некоторые схемы параллельных умножителей». Альта Фрекенца . 34 (5): 349–356. Dadda, L. (1976). "Некоторые схемы для параллельных умножителей". В Swartzlander, Earl E. (ред.). Computer Design Development: Principal Papers . Hayden Book Company. стр. 167–180. ISBN 978-0-8104-5988-5. OCLC 643640444.
^ Таунсенд, Уитни Дж.; Шварцлендер, младший, Эрл Э.; Абрахам, Джейкоб А. (декабрь 2003 г.). "Сравнение задержек умножителей Дадда и Уоллеса" (PDF) . SPIE Advanced Signal Processing Algorithms, Architectures, and Implementations XIII . Международное общество . doi :10.1117/12.507012.
Дальнейшее чтение
Savard, John JG (2018) [2006]. "Advanced Arithmetic Techniques". quadibloc . Архивировано из оригинала 2018-07-03 . Получено 2018-07-16 .