# Лекция 3. Цифровая арифметика. Арифметико-логическое устройство

На этой лекции мы вспомнили как складываются числа, на примере сложения в столбик. Для двоичных и десятичных чисел это делается одинаково. Разряды чисел складываются с учетом переносов от прошлых разрядов.

![../.pic/Lectures/03.%20Digital%20arithmetics/fig_01.png](../.pic/Lectures/03.%20Digital%20arithmetics/fig_01.png)

Особенностью цифровой арифметики является то, что она модульная, то есть ограничена некоторым максимальным числом, больше которого не существует. В данном случае модульная арифметика ограничена разрядностью цифрового устройства. Например, 3-битный сумматор не может выдать число, больше 111, то есть 7 в десятичной системе счисления. Можно сказать, что в такой арифметике не числовая прямая, а числовой круг. Операции сложения и вычитания — это движение по этому кругу в одну или в другую сторону. Благодаря особенностям такой арифметики можно выполнять вычитание используя операцию сложения. Выражение (**A — B**) эквивалентно выражению (**A + ~B + 1**). При этом к числам можно относиться либо как к беззнаковым (только положительным), либо как к знаковым (в таком случае старший бит числа указывает на знак, 1 — минус).

![../.pic/Lectures/03.%20Digital%20arithmetics/fig_02.png](../.pic/Lectures/03.%20Digital%20arithmetics/fig_02.png)

В зависимости от того используются ли числа в дополнительном коде (отрицательные) или нет по-разному определяется переполнение, то есть когда результат выходит за разрядную сетку и, следовательно, не является достоверным. Если предполагается, что операция производится только над положительными числами, то переполнением считается появление переноса от старшего разряда. Если же предполагается, что в операции используются и положительные и отрицательные числа, то переполнением является ситуация, в которой знак результата операции отличается от одинаковых знаков операндов.

![../.pic/Lectures/03.%20Digital%20arithmetics/fig_03.png](../.pic/Lectures/03.%20Digital%20arithmetics/fig_03.png)

Операции сложения и вычитания выполняются на об одном из основных модулей процессора — сумматоре. Он строится из нескольких простых *однобитных полных сумматоров*, складывающих три бита: по одному биту от каждого из операндов и входной бит переноса (от предыдущего разряда), и формировать в качестве результата два бита: бит суммы и бит переноса для следующего разряда.

![../.pic/Lectures/03.%20Digital%20arithmetics/fig_04.png](../.pic/Lectures/03.%20Digital%20arithmetics/fig_04.png)

Чем больше однобитных сумматоров, тем выше разрядность обрабатываемых данных — это хорошо. Однако, в таком случае удлиняется и цепь переноса проходящая через все разряды, а значит удлиняется критический путь, то есть устройство работает медленнее — это плохо.

![../.pic/Lectures/03.%20Digital%20arithmetics/fig_05.png](../.pic/Lectures/03.%20Digital%20arithmetics/fig_05.png)

Если вложиться хитростью и дополнительными аппаратными затратами, то можно реализовать ускоренный перенос, уменьшающий критический путь. К таким устройствам относятся *схема с ускоренным переносом* и *префиксный сумматор*.

Один из основных операционных устройств (то есть устройств, выполняющих операции над данными) является АЛУ (арифметико-логическое устройство). *АЛУ — это комбинационная схема* выполняющая различные арифметические и поразрядно логические (то есть не использующие бит переноса) операции над входными данными. Выполняемая операция определяется управляющими сигналами. Помимо результата на выходе могут формироваться флаги, например, переполнения, знак результата и тому подобное.

Мы рассмотрели два основных подхода к проектированию. При первом подходе операции над данными мультиплексируются, и выбор операции происходит за счет управления мультиплексором.

![../.pic/Lectures/03.%20Digital%20arithmetics/fig_06.png](../.pic/Lectures/03.%20Digital%20arithmetics/fig_06.png)

В рассмотренном АЛУ поддерживается 7 операций (операция 011 бессмысленна). Плюс такого подхода — простота проектирования, простота изменения структуры.

Другой подход к построению АЛУ предполагает выведения оптимальных выражений, в которых конкретные значения управляющих сигналов преобразуют выражение так, чтобы оно выполняло требуемую операцию. В рассмотренном примере поддерживается 48 операций (но некоторые повторяются):

- 32 арифметических:
  - 16 операций когда M=1, P<sub>i-1</sub>=0;
  - 16 операций когда M=1, P<sub>i-1</sub>=1;
- 16 логических, когда M=0 (от P<sub>i-1</sub> ничего не зависит).

![../.pic/Lectures/03.%20Digital%20arithmetics/fig_02.png](../.pic/Lectures/03.%20Digital%20arithmetics/fig_07.png)

*S* — управляющее слово, *a*, *b* — операнды, *P* — перенос, *M* — выключатель переноса, *R* - результат операции. Индексы внизу указывают на то, что выражение относится к отдельному *i*-ому биту результата.

Например, чтобы выполнить операцию A ИЛИ B, надо подать управляющие сигналы S = 0001, M = 0, тогда в выражении R сократятся импликанты с S3, S2, S1 и M, потому что они равны нулю, и останется только R = a | b. Разработка, отладка и изменение конфигурации таких АЛУ сложнее, чем при первом подходе, однако можно получить гораздо больше (пусть и не часто используемых) операций, при меньшем критическом пути.

В конце лекции посмотрели на организацию блоков сравнения, логического и арифметического сдвигов.

## Основные материалы лекции

1. [Ссылка](https://www.youtube.com/watch?v=eXW6Q4jPkmQ) на видеозапись лекции
2. Как и всегда в этом источнике, отличное доступное описание работы и принципов построения сумматоров, в том числе с ускоренным и префиксным переносом, компараторов, АЛУ и схем сдвига [**Харрис и Харрис**. *Цифровая схемотехника и архитектура компьютера —* параграфы 5.2.1 — 5.2.5]
3. Про вариант синтезируемого через выражения АЛУ читай тут [**Кафедра ВТ**. *Микропроцессорные средства и системы* — Лекция 1.2]

## Дополнительные материалы к лекции для саморазвития

1. Еще один вариант АЛУ, с коротким описанием на страничку, можно посмотреть тут [**Таненбаум и Остин**. *Архитектура компьютера* — Глава 3., Основные логические схемы, Арифметические схемы, подраздел Арифметико-логические устройства]

## Популярные материалы

1. Если есть хоть малейшая толика непонимания ***как*** все происходит внутри сумматора и ***как*** это все может быть физически реализовано, то крайне рекомендую посмотреть это 14-минутное [видео](https://www.youtube.com/watch?v=YuSgZ173Utg), в котором очень доступно все рассказано
