Я реализовывал ALU по спецификациям, приведенным в моей книге «Элементы вычислительных систем». Я застрял только на одной проблеме. Как я могу найти, если данное число равно нулю или нет. Одна вещь, которую я могу сделать, - это каждый бит в шине, а затем применить к нему не гейты. Но должно быть какое-то другое элегантное решение.
16
Ответы:
Там просто нет способа обойти все биты, как бы неудовлетворительно это ни казалось. Однако вы не ограничены двумя входными вентилями в кремнии. Вы можете построить 4-входной вентиль NOR в логике CMOS, поместив 4 серии транзисторов p-типа в сеть с понижением и 4 параллельных транзистора n-типа в сеть с понижением. Это уменьшает глубину топологии вашего дерева и, следовательно, вашу задержку распространения. Вы можете принять эту теорию до сих пор, хотя до того, как кумулятивное падение напряжения на последовательных транзисторах сделает подтягивание не достаточным, чтобы стать «1» ... четыре - хорошее эмпирическое правило, если я правильно помню.
источник
Логическая функция - это вентиль NOR. Это самая простая логическая функция, которая существует.
источник
Типичное решение для 8-битных машин состояло в том, что ALU будет генерировать несколько битов «флага», которые будут представлять результат самой последней операции. Хотя было бы возможно иметь любое количество битов флага (т. Е. Вы могли бы иметь флаг 'Z' для каждого регистра в вашем ЦП), обычно наиболее интересным является то, что вы только что вычислили, поэтому имеет определенный смысл делать это таким образом.
Некоторые из этих старых процессоров автоматически устанавливают биты флагов почти для каждого перемещения данных, в то время как другие требуют, чтобы вы вставили в код определенную инструкцию «сравнения», если вам просто вдруг понадобится узнать, равен ли определенный регистр нулю. И независимо от того, предоставляете ли вы проверку на ноль для каждого регистра или только для того, что только что было вычислено, на самом деле нет более простого способа проверить «это слово ноль», чем просто ИЛИ все биты вместе взятые.
источник
Некоторые процессоры, например MIPS, имеют регистр, который всегда содержит ноль, что делает тестирование другого регистра на ноль очень быстрым.
источник
Я большой поклонник
or_reduce
- большинство инструментов синтеза оптимизируют его до наилучшей реализации, поскольку они точно знают, что вы делаете.источник