Сумматоры и триггеры
| English | Русский |
|---|---|
| carry/ˈkæri/ | перенос |
| half adder/hɑːf ˈædə/ | полуаддитор |
| full adder/fʊl ˈædə/ | полный сумматор |
| flip-flop/flɪp flɒp/ | триггер |
| ripple-carry adder/ˈrɪpl ˈkæri ˈædə/ | сумматор с переносом |
| bistable/baɪˈsteɪbl/ | бистабильный элемент |
| counters/ˈkaʊntəz/ | счетчики |
| SRAM/ˈesræm/ | SRAM |
| SR flip-flop/ˌes ˈɑː flɪp flɒp/ | SR-триггер |
| JK flip-flop/ˌdʒeɪ ˈkeɪ flɪp flɒp/ | JK-триггер |
| toggle/ˈtɒɡl/ | триггер |
Как машина, знающая только «истина» и «ложь», выполняет арифметику
- Процессор не имеет сумматора в том смысле, что это устройство, знающее числа. У него есть логические элементы, выдающие истину или ложь, и ничего больше.
- Тем не менее $1 + 1 = 10$ получается из двух элементов: XOR дает разряд суммы, AND дает перенос. Это весь арифметический узел в миниатюре, а каскадирование его копий позволяет складывать числа любой разрядности.
- Другая половина компьютера — это память, а один бит памяти также состоит лишь из логических элементов, соединенных так, что их выходы подают сигналы обратно на входы и удерживают состояние.
- Этот урок посвящен полусумматору, полному сумматору и триггеру, хранящему один бит.
Полусумматор
- Полусумматор складывает два однобитных числа, $A$ и $B$, выдавая сумму $S$ и перенос $C$.
| A | B | S | C |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
- Прочитайте столбцы: $S$ равен 1, когда ровно один вход равен 1, это XOR. $C$ равен 1 только тогда, когда оба входа равны 1, это AND. Следовательно, $S = A \oplus B$ и $C = A \cdot B$.
- Он игнорирует входящий перенос, поэтому является лишь «половиной» сумматора и не может быть соединен последовательно сам по себе.

Два элемента, и существует двоичное сложение
Вентили внутри сумматора
Бит суммы полусумматора — это вентиль XOR, а бит переноса — вентиль AND — измените A и B и посмотрите, как загорится соответствующая строка таблицы истинности.
В полусумматоре выход S формируется каким вентилем?
$S = A \text{ XOR } B$ (1, когда входы различаются); перенос равен $A \text{ AND } B$.
В полусумматоре выход C формируется каким одним вентилем?
C равен 1 только тогда, когда оба входа равны 1, что соответствует логике AND. Сумма S равна 1, когда ровно один вход равен 1, что соответствует логике XOR.
Полный сумматор
- Полный сумматор складывает три бита: $A$, $B$ и входящий перенос, выдавая сумму и исходящий перенос. $S = A \oplus B \oplus C_{\text{in}}$.
- Его можно собрать из двух полусумматоров плюс элемент OR: первый полусумматор складывает $A$ и $B$, второй складывает эту сумму с входящим переносом, а элемент OR объединяет два переноса.
- Соедините полные сумматоры так, чтобы каждый исходящий перенос подавался на следующий входящий перенос, и вы получите многоразрядный сумматор со стробильным переносом: четыре таких сумматора складывают два 4-битных числа.

Перенос — это то, что должно распространяться, поэтому он называется стробильным (ripple)
Соотнесите каждый базовый элемент с его функцией.
Сумматоры складывают биты (для многобитного сложения соединяют полные сумматоры последовательно); триггеры хранят бит (JK устраняет запрещенное состояние SR).
Чем полный сумматор отличается от полусумматора?
Полный сумматор складывает A, B и перенос на входе (так можно соединять сумматоры каскадом) — собирается из двух полусумматоров и вентиля OR.
Разбор примера: почему используется полный сумматор, а не два полусумматора
- Объясните, почему 4-битный сумматор собирается из полных сумматоров, а не из полусумматоров.
- При сложении двух 4-битных чисел по разрядам каждый разряд, кроме самого правого, может получить перенос от соседнего разряда справа, поэтому ему нужно складывать три входа, а не два.
- Полусумматор не имеет входящего переноса, поэтому не может принять этот третий вход, и перенос будет просто потерян.
- Только самый младший разряд не имеет входящего переноса, поэтому там подошел бы полусумматор; на практике же все четыре являются полными сумматорами, а первый входящий перенос подключен к 0.
Почему 4-битный сумматор должен использовать полные сумматоры, а не полусумматоры?
Полусумматор действительно генерирует перенос; ему не хватает переноса на входе, поэтому он не может принять перенос, поступающий от предыдущего разряда.
Расставьте этапы сборки 4-битного сумматора с распространением переноса в правильном порядке.
Вентили образуют полусумматор, полусумматоры образуют полный сумматор, полные сумматоры соединяются каскадом в сумматорword-ширины. Распространение переноса вдоль цепи дает ему название.
Триггеры
- Триггер — это бистабильная схема: она имеет два устойчивых состояния, 0 и 1, и помнит то, в котором находится. Она хранит ровно один бит.
- Это базовый элемент регистров, где $n$ бит означает $n$ триггер, счетчиков и ячеек SRAMRAM.
- В отличие от сумматора, выход которого зависит только от текущих входов, выход триггера зависит от его прошлых входов. Именно это означает память на уровне схем.
Триггер используется для:
У триггера два устойчивых состояния, он хранит один бит — это базовый элемент регистров и SRAM.
Триггер бистабилен — имеет два устойчивых состояния и запоминает один бит — что делает его базовым элементом регистров и SRAM.
Соединение триггеров образует регистры и счетчики; кэш SRAM собирается из них (не требуется обновление, в отличие от DRAM).
SR и JK
- SR-триггер SR имеет входы S (установка) и R (сброс) и выходы $Q$ и $\overline{Q}$, собранный из двух перекрестно связанных элементов NOR.
S=1, R=0устанавливает $Q$ в 1.S=0, R=1сбрасывает $Q$ в 0.S=0, R=0удерживает текущее состояние, что и является памятью.S=1, R=1недопустим: он требует установки и сброса одновременно.- JK-триггер JK устраняет этот недостаток, придавая входу
1,1значение: переключение, так что выход инвертируется. Это делает его идеальным для счетчиков, поскольку цепочка переключающихся триггеров считает в двоичном коде. - JK обычно работает от синхронизации (clock): входы действуют только по фронту сигнала синхронизации, что удерживает все триггеры машины в одном ритме.

Недопустимый вход превращен в полезный
Для SR-триггера какие утверждения верны? Выберите все подходящие варианты.
Переключение на 1,1 — это улучшение JK-триггера. В SR-триггере этот вход требует одновременно установки и сброса, что является некорректным состоянием.
Поведение переключения JK-триггера делает его подходящим для построения счетчиков.
Цепочка триггеров, каждый из которых переключается по своему входу, считает в двоичной системе. Синхронизация их тактирования удерживает все разряды в едином ритме.
Разбор примера: прослеживание работы SR-триггера
- $Q$ сейчас равен 0. Определите $Q$ после подачи входов S=1 R=0, затем S=0 R=0, затем S=0 R=1.
- S=1, R=0 устанавливает выход, поэтому $Q$ становится 1.
- S=0, R=0 удерживает состояние, поэтому $Q$ остается 1. Это шаг, демонстрирующий наличие памяти: входы ничего не говорят, а выход сохраняется.
- S=0, R=1 сбрасывает, поэтому $Q$ становится 0. Если бы были поданы S=1 и R=1, ответ был бы тем, что вход недопустим, а не значением.
Потерянные баллы
- $S = A \oplus B$ и $C = A \cdot B$: XOR для суммы, AND для переноса. Их замена лишит обоих баллов.
- «Половина» означает отсутствие входящего переноса, а не «половину битов».
- Полный сумматор — это два полусумматора плюс OR, а OR объединяет два переноса.
- На SR-триггере
0,0удерживает состояние, а1,1недопустим. Улучшение JK заключается в том, что1,1переключается.
Вы поняли
- полусумматор: два входа, $S = A \oplus B$ из XOR и $C = A \cdot B$ из AND; нет входящего переноса
- полный сумматор: три входа, собран из двух полусумматоров плюс OR; соединяйте их, исходящий перенос на входящий, для получения сумматора со стробильным переносом
- триггер является бистабильным и хранит один бит; $n$ триггеров образуют регистр на $n$ бит, и они являются ячейками SRAM
- SR: установка, сброс,
0,0удерживает,1,1недопустим · JK:1,1переключается, что необходимо для счетчиков, и он синхронизируется по тактовому сигналу