Немного про сумматоры

Nov 02, 2008 05:07

Основная особенность железок -- их количество и состав не меняется в процессе работы. Сколько проектировщик нарисовал, столько и есть, всё время. Это довольно-таки очевидно, но следствия интересны.

Раз железка есть, значит к ней и от неё идут какие-то проводочки, на которых есть какое-то напряжение. Напряжения не может не быть, оно может быть нулевым, но это ничего не меняет.

А это значит, что все они всё время как-то работают. Чтобы железка перестала работать, у неё должен быть специальный вход, который её "выключает". Почему в кавычках -- потому что это достаточно условное отключение. Грубо говоря, это блокирование выходов, т.е. перевод в такое состояние, когда она другим не мешает. Если же их не отключать, то они все работают одновременно, как рабочие на конвейере; только таких "конвейеров" несколько и соединения не линейное-последовательные, а посложнее.

Обычный n-разрядный сумматор складывает два n-разрядных числа и имеет 2n входов и (n+1) выход. Он состоит из n одноразрядных сумматоров. Одноразрядный сумматор имеет три входа и два выхода. На входе у него i-е разряды чисел и перенос из младшего разряда. На выходе -- i-й разряд результата и перенос в старший разряд, который цепляется к (i+1)-му одноразрядному сумматору.

Выглядит это как-то так (нарисовано, скорее всего, не по стандарту, ну да ладно):


Слева -- младшие разряды, справа -- старшие. Входы у сумматоров слева, выходы справа.

Что в этой картинке печально: маленькие сумматоры работаю быстро, но не мгновенно. Значит перенос в следующий разряд они вычисляют с задержкой. Значит результат работы следующего сумматора становится адекватным только тогда, когда до него дойдёт перенос... В общем, чтобы посчитать последний разряд, нужно дождаться пока до него дойдёт перенос от самого первого. В результате время работы n-разрядного сумматора что-то около n * время_работы_одноразрядного_сумматора. Хотя, казалось бы, у нас их n штук и все могли бы одновременно... Но вот не получается.

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

Разряды числа делятся пополам, младшая часть складывается как обычно. Старшая часть зависит от переноса из младшей части... Но бывает только два разных переноса: 0 и 1. Поэтому мы на двух сумматорах вычисляем старшую часть для этих двух случаев, а потом, получив настоящий перенос, выбираем из них подходящий. На картинке это выглядит так:


Перенос от младшей части идёт в мультиплексор.

Проигрыш в количестве железа -- 1,5 раз; выигрыш во времени -- 2 раза.

Мультиплексор относительно простая и быстрая штука, им при подсчётах пренебрегли. Это можно делать только до какой-то степени; например, при помощи мультиплексоров довести время работы до времени работы одноразрядного сумматора точно не получится.

политех

Previous post Next post
Up