3

Правильные умножители(окончание)

Чтобы уже закончить тему с умножителями.

Указанные в предыдущей теме(см. Решение головоломки про умножение ) умножители обеспечивают минимальное время выполнения, но к сожалению, трудно расширяемы. То есть для умножения трёхбитных чисел надо придумывать схему почти заново. Даже сами схемы выглядят как-то по кустарному – нет в них что ли симметричности и красоты.

Нужна какая-то ещё идея и такая идея есть. Всем известно устройство дешифратора. На входе оно имеет допустим два проводка, каждый из которых означает бит. На входе уже будет 4 провода, каждый из которых означает комбинацию 00, 01, 10 и 11. После того, как мы получили дешифрацию обоих множителей, нетрудно будет получить и каждый бит произведений в зависимости от множителей причём за один так.

Логическую схему дешифратора можно найти даже в Википедии . Мы её несколько оптимизируем с учётом наших идеальных устройств А и В так, чтобы всё выполнялось за один такт.

Итак логическая схема умножения двух чисел будет представлять из себя следующее

Первый такт (дешифрация)

a11=A(a0,a1)

a10=B(a1,a0)

a01=B(a0,a1)

a00 – нет отдельной линии.

Второй такт(получение результатов умножения)

с3=A(a01,b01) or A(a11,b11)

c2= A(a01,b10) or A(a10,b01) or A(a11,b10) or A(a10,b11)

c1= A(a11,b10)* or A(a10,b11)* or A(a10,b10)

c0=A(a11,b11)*

Где

* - дублирующие линии

A(x,y) - это устройство А, которое на входе получает значения x и y

or – закороченные на выходе провода. Так как мы помним, что по условия у нас 1 сильнее 0

Наглядно, на рисунке это будет выглядеть так.

Правильные умножители(окончание)

Если нам надо перемножить 2 числа на 3 бита, то получим

Четыре бита

Первый такт

a11_=A(a0,a1)

a10_=B(a1,a0)

a01_=B(a0,a1)

a11=A(a2,a3)

a10=B(a3,a2)

a01=B(a2,a3)

Второй такт

a1111=A(a11_,a11)

a1110= A(a11_,a10)

a1100=B( a11* or a10* or a01*,a11_)

a0011= B( a11_* or a10_* or a01_*,a11)

Таким образом за n тактов можно дешифровать 2^n битов.

Получение же результата после дешифровки всегда занимает 1 такт.

Итого, 32 битное умножение будет занимать 6 тактов. А 64 битное – 7 тактов.

Расплатой будет конечно огромное количество элементов, поэтому увы, данную методику всё же надо сочетать с традиционной – суммированием.

Лига программистов

2.1K поста11.9K подписчика

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества