Урок 5: Комбинационная логика и ALU
Мы видели логические вентили, которые вычисляют AND, OR и NOT, и видели, как числа записываются в двоичном виде. Теперь соединим эти две вещи: возьмём простые вентили и построим из них схему, которая по-настоящему вычисляет — складывает два числа. Каждая схема в этом уроке — это «комбинационная логи
Если дать нескольким логическим вентилям одни и те же биты, они всегда вернут один и тот же ответ — у них нет памяти. В этом уроке мы объединим такие вентили в маленькую суммирующую машину, а затем в большой калькулятор процессора под названием ALU.
- Комбинационная логика
- Схема, выход которой определяется исключительно входами в текущий момент, без памяти о предыдущем состоянии. Одни и те же входы всегда дают один и тот же выход.
- Полусумматор
- Схема, которая складывает два одиночных бита и выдаёт два бита: сумму от вентиля XOR и перенос от вентиля AND.
- Полный сумматор
- Схема, которая складывает три бита — два входных бита и входной перенос — и выдаёт бит суммы и бит выходного переноса.
- Перенос
- Бит, который «переносится» в следующий столбец, когда сумма текущего столбца превышает то, что может вместить одна цифра (в двоичной системе — когда сумма равна 2 или больше).
- Сумматор со сквозным переносом
- Цепочка полных сумматоров, по одному на столбец битов; выходной перенос каждого каскада поступает на входной перенос следующего каскада и «перекатывается» вдоль цепочки.
- Мультиплексор
- Селектор: схема с несколькими входными линиями, которая выбирает одну из них для передачи на выход в соответствии с линиями выбора, действующими как управляющий переключатель.
- ALU (арифметико-логическое устройство)
- Большая комбинационная схема в сердце процессора, которая выполняет арифметические и логические операции (сложение, вычитание, AND, OR, сравнения). Опкод выбирает, какая операция выполняется.
- Опкод
- Короткий набор битов, который сообщает ALU, какую операцию выполнить над входами, — как номер в меню, выбирающий нужное действие.
- Флаги состояния
- Отдельные биты, которые ALU устанавливает для сообщения о результате: флаг нуля, когда результат равен 0, и флаг переноса, когда перенос вышел за пределы разрядности числа.