Прибавление 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 в редакторе схем, чтобы собрать такой счётчик.