Синтезировать сдвиг влево на 1 только с вентилями И-НЕ?

У меня есть алгоритм, который выполняет деление 2 64-битных целых чисел без знака с использованием побитовых операторов C (‹‹, &, ^, |, ~) в цикле.

Теперь я хотел бы полностью исключить оператор сдвига влево ‹‹, чтобы понять, как это делается, поскольку я уже могу синтезировать AND, OR, XOR, НЕ используя вентили NAND.

Можно ли также выполнить сдвиг влево на 1 с вентилями JUST NAND? Я немного читал о триггерах в электронике, но я реализую это в чистом программном обеспечении, просто чтобы понять это.

Я хочу полностью избежать использования операторов ‹‹ или ›› и не хочу использовать существующие арифметические операторы из любого компьютерного языка, включая ассемблер.


person ytrehod1    schedule 26.12.2014    source источник
comment
насколько я могу судить, вы можете сдвинуться влево на один только с проводами   -  person Jasen    schedule 26.12.2014


Ответы (1)


Аппаратно вы можете реализовать сдвиг влево на 1 вообще без каких-либо логических вентилей. Просто подключите линии данных следующим образом:

Сдвиг влево на единицу

Если вы хотите что-то более общее, вы можете реализовать переключатель бочек. Это может быть синтезировано из мультиплексоров:

Переключатель бочек
(источник: books24x7.com)

который, в свою очередь, может быть синтезирован из вентилей И-НЕ.

Вот подробная магистерская диссертация на эту тему: Barrel Shifter Дизайн, оптимизация и анализ.

person NPE    schedule 26.12.2014