Урок 2. Полный сумматор и 4 бита: перенос бежит по разрядам

В картинках

После этого урока табло покажет сумму двух четырёхбитных чисел — от 0 + 0 до 15 + 15 = 30. Соберём полный сумматор одного разряда FA и поставим четыре таких разряда цепочкой — получится ADDER4.


2.1. Идея: сложение столбиком

Двоичные числа складывают так же, как десятичные в школе, — столбиком, справа налево. В каждом столбике складываются три цифры: два разряда чисел и перенос из соседнего справа. Результат — цифра суммы и перенос дальше:

  • A, B — разряды чисел, CI (carry in) — перенос, пришедший справа;
  • S — цифра суммы этого столбика, CO (carry out) — перенос в следующий столбик.

Три бита складываются двумя полусумматорами: первый — A + B, второй — к их сумме прибавляет CI. Перенос дальше нужен, если его дал хотя бы один из них: CO = c1 OR c2. Оба сразу перенос дать не могут — сумма трёх битов не больше 11 (три).

A=1B=1CI=1HAA + Bs1=0c1=1HAs1 + CIS = 1c2=0ORCO = 11 + 1 + 1 = 11 (три): сумма 1, перенос 1
Полный сумматор FA на примере A = 1, B = 1, CI = 1. Первый полусумматор складывает A + B = 10 (s1 = 0, перенос c1 = 1), второй прибавляет CI: 0 + 1 = 1. Перенос дальше CO = c1 OR c2 = 1.

Четыре FA подряд — это четыре столбика. CO каждого разряда идёт в CI следующего, поэтому перенос бежит справа налево через все разряды, как волна. Старший перенос CO — пятый разряд суммы: 15 + 15 = 30 не помещается в 4 бита.

FAA0=1B0=1S0=0c1=1FAA1=1B1=0S1=0c2=1FAA2=1B2=0S2=0c3=1FAA3=0B3=1S3=0CI=0CO=10111 + 1001 = 1 0000 (7 + 9 = 16): перенос рождается в разряде 0 и бежит до конца
ADDER4 — четыре FA цепочкой, младший разряд справа, как при сложении столбиком. CO каждого разряда идёт в CI следующего. На примере 7 + 9 перенос рождается в разряде 0 и бежит влево через все разряды; старший перенос CO — пятый разряд суммы.

2.2. Сборка

Тот же проект, что урок 1. Стенд урока 1 (тумблеры A, B, чип HA на холсте, лампы) удали; Power/Ground с метками VCC/GND оставь. Чипы HA и OR остаются в библиотеке. Всё на метках (провода тоже можно).

Если у тебя есть FA из набора «Часы и игра из вентилей» — бери его, ноги те же: A, B, CI → S, CO.

Шаг 1. FA — полный сумматор

Складывает три бита: A, B и перенос из младшего разряда CI. Сначала A + B полусумматором, потом к сумме — перенос вторым полусумматором; перенос дальше CO — если перенос дал хоть один из них.

ДетальНогаМетка
Порт входавыходA
Порт входавыходB
Порт входавыходCI
HA (1-й)A
B
S
C
A
B
s1
c1
HA (2-й)A
B
S
C
s1
CI
S
c2
ORI0
I1
O0
c1
c2
CO
Порт выходавходS
Порт выходавходCO

Ctrl+G → имя FA. Ноги чипа: входы A, B, CI, выходы S, CO.

Шаг 2. ADDER4 — четыре разряда

Перенос бежит от младшего разряда к старшему: CO каждого FA идёт в CI следующего.

ДетальНогаМетка
Порт входавыходA0
Порт входавыходA1
Порт входавыходA2
Порт входавыходA3
Порт входавыходB0
Порт входавыходB1
Порт входавыходB2
Порт входавыходB3
Порт входавыходCI
FA (разряд 0)A
B
CI
S
CO
A0
B0
CI
S0
c1
FA (разряд 1)A
B
CI
S
CO
A1
B1
c1
S1
c2
FA (разряд 2)A
B
CI
S
CO
A2
B2
c2
S2
c3
FA (разряд 3)A
B
CI
S
CO
A3
B3
c3
S3
CO
Порт выходавходS0
Порт выходавходS1
Порт выходавходS2
Порт выходавходS3
Порт выходавходCO

Ctrl+G → имя ADDER4. Ноги: входы A0–A3, B0–B3, CI; выходы S0–S3, CO.

Шаг 3. Холст: тумблеры, сумматор, табло

ДетальНогаМетка
InputвыходA0
InputвыходA1
InputвыходA2
InputвыходA3
InputвыходB0
InputвыходB1
InputвыходB2
InputвыходB3
ADDER4A0
A1
A2
A3
B0
B1
B2
B3
CI
S0
S1
S2
S3
CO
A0
A1
A2
A3
B0
B1
B2
B3
GND
S0
S1
S2
S3
S4
Display⚙ширина 4, DEC, шина A
Display⚙ширина 4, DEC, шина B
Display⚙ширина 8, DEC, шина S

Перенос CO на холсте — метка S4: это пятый разряд суммы, поэтому табло S показывает число до 30. CI пока на GND (перенос в младший разряд = 0) — в уроке 3 он станет кнопкой вычитания.

2.3. Проверка

AТумблеры A3…A0BТумблеры B3…B0Табло S
30011401007
701119100116перенос: S4 горит
15111115111130максимум
00000000000

В колонках «Тумблеры» слева — старший тумблер (A3), справа — A0; 1 — включён, 0 — выключен.

Если сумма неверна только в старших разрядах — проверь, что перенос идёт c1 → c2 → c3 и CO последнего FA — на CO чипа.


Вставка урока 2 (Cmd+I)

Нужны HA и OR из урока 1.

# Урок 2 — полный сумматор FA и 4-битный сумматор ADDER4 с входом переноса.# Вставка: Cmd+I поверх урока 1 (нужны HA и OR). Стенд урока 1 можно удалить, кроме питания. # --- полный сумматор: два полусумматора и ИЛИ переносов ---chip FA {  portIn(A)  portIn(B)  portIn(CI)  portOut(S)  portOut(CO)  HA(A, B, s1, c1)  HA(s1, CI, S, c2)  OR(c1, c2, CO)} # --- 4 разряда: перенос бежит от младшего к старшему ---chip ADDER4 {  portIn(A0)  portIn(A1)  portIn(A2)  portIn(A3)  portIn(B0)  portIn(B1)  portIn(B2)  portIn(B3)  portIn(CI)  portOut(S0)  portOut(S1)  portOut(S2)  portOut(S3)  portOut(CO)  FA(A0, B0, CI, S0, c1)  FA(A1, B1, c1, S1, c2)  FA(A2, B2, c2, S2, c3)  FA(A3, B3, c3, S3, CO)} # --- на холст: 8 тумблеров, сумматор, табло ---input(A0)input(A1)input(A2)input(A3)input(B0)input(B1)input(B2)input(B3)ADDER4(A0=A0, A1=A1, A2=A2, A3=A3, B0=B0, B1=B1, B2=B2, B3=B3, CI=GND, S0=S0, S1=S1, S2=S2, S3=S3, CO=S4)

Не получается? Что-то не работает →