Инкременторы, декременторы и счётчики команд
← Все статьи

Инкременторы, декременторы и счётчики команд

6 мин

Прибавление 1 — частный случай

Цепочка полных сумматоров вычисляет A+B для двух произвольных N-битных чисел, но инкремент (прибавление ровно 1) всегда прибавляет константу — и когда один операнд зафиксирован как 000...001, большая часть вентилей внутри переносовой логики каждого полного сумматора упрощается, оставляя более дешёвую цепочку из одних только вентилей XOR и AND.

Инкрементор со сквозным переносом

Разберём это побитно:

  • Бит 0 всегда переключается (0⊕1 или 1⊕1), а перенос из бита 0 — это просто текущее значение самого бита 0.
  • Каждый следующий бит переключается только тогда, когда все младшие биты уже равны 1 — то есть перенос дошёл до него от бита 0 — это и есть поведение «перенос в каждый разряд» при прибавлении единицы, и это на один вентиль дешевле на каждой ступени, чем полный сумматор.

Декременторы работают так же, только наоборот

Декрементор вычитает 1 тем же приёмом, применённым к вычитанию в дополнительном коде: каждый бит переключается только тогда, когда все младшие биты уже равны 0. В Boolflow оба варианта доступны как готовые блоки INC4 и DEC4.

Счётчик команд

Счётчик команд процессора — это обычный загружаемый регистр с блоком INC4, подключённым от его выхода обратно к его же входу: на каждом такте он либо загружает адрес перехода, либо увеличивает собственное текущее значение на единицу — именно так выборка команд продвигается по памяти адрес за адресом. Соедините выход INC4 со входом REG4 в редакторе схем, чтобы собрать такой счётчик.

Собрать инкрементор в редакторе схем →