Урок 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 (три).
Четыре FA подряд — это четыре столбика. CO каждого разряда идёт в CI следующего, поэтому перенос бежит справа налево через все разряды, как волна. Старший перенос CO — пятый разряд суммы: 15 + 15 = 30 не помещается в 4 бита.
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 |
| OR | I0 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 |
| ADDER4 | A0 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…A0 | B | Тумблеры B3…B0 | Табло S | |
|---|---|---|---|---|---|
| 3 | 0011 | 4 | 0100 | 7 | |
| 7 | 0111 | 9 | 1001 | 16 | перенос: S4 горит |
| 15 | 1111 | 15 | 1111 | 30 | максимум |
| 0 | 0000 | 0 | 0000 | 0 |
В колонках «Тумблеры» слева — старший тумблер (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)Не получается? Что-то не работает →