Урок 0. Вентили из транзисторов: для тех, кто начинает с нуля
В картинкахЭтот урок — по желанию. Если вентили NOT, NAND, NOR, AND, OR, XOR уже есть в библиотеке из другого набора серии — переходи сразу к уроку 1. Если хочешь собрать всё сам, с транзисторов, — начни здесь: шесть вентилей, из которых дальше строится вся фрактальная машина.
0.1. Идея: транзистор — выключатель
В симуляторе транзистор — выключатель с тремя ногами: затвор G управляет, проводит ли канал между верхней и нижней ногой. nmos проводит при G = 1, pmos — при G = 0. Пара «P сверху к VCC, N снизу к GND» с общим затвором — это NOT: на выходе всегда противоположное входу. Из таких пар собираются NAND и NOR, а из них — все остальные.
0.2. Сборка
Урок для тех, кто собирает всё с нуля. Если вентили NOT, NAND, NOR, AND, OR, XOR уже есть в библиотеке (из наборов «Знакогенератор», «Как считает процессор» или «Часы и игра из вентилей») — этот урок можно пропустить.
Новый пустой проект. Сначала поставь питание: Power → метка VCC, Ground → метка GND (внутри чипов они общие). Каждый вентиль собирается на пустом месте холста, потом выделить его детали с метками → Ctrl+G → в библиотеке двойной клик по имени → имя чипа. Транзистор: затвор G слева, канал — верх и низ (равноправны); pmos проводит при затворе 0, nmos — при 1.
Если есть вентили из набора «Часы и игра из вентилей» — тоже подойдут: у них ноги A, B, Y — это то же, что I0, I1, O0 в таблицах.
Шаг 1. NOT — переворот: 1 → 0, 0 → 1
| Деталь | Затвор (G) | Канал соединяет |
|---|---|---|
| Порт входа | — | имя I0, выход → I0 |
| pmos | I0 | VCC ↔ O0 |
| nmos | I0 | O0 ↔ GND |
| Порт выхода | — | имя O0, вход ← O0 |
Ctrl+G → имя NOT.
Частая ошибка. Перепутать N и P: если сверху (к VCC) стоит N, а снизу (к GND) — P, вентиль не переворачивает, а повторяет вход. Сверху всегда P, снизу — N. Тип меняется Alt + щелчком по транзистору (на Mac — ⌥ или ⌘ + щелчок); обычный щелчок тип не трогает.
Шаг 2. NAND — И-НЕ: 0 только когда оба входа 1
| Деталь | Затвор (G) | Канал соединяет |
|---|---|---|
| Порт входа | — | имя I0, выход → I0 |
| Порт входа | — | имя I1, выход → I1 |
| pmos | I0 | VCC ↔ O0 |
| pmos | I1 | VCC ↔ O0 |
| nmos | I0 | O0 ↔ mid |
| nmos | I1 | mid ↔ GND |
| Порт выхода | — | имя O0, вход ← O0 |
Ctrl+G → имя NAND.
Шаг 3. NOR — ИЛИ-НЕ: 1 только когда оба входа 0
| Деталь | Затвор (G) | Канал соединяет |
|---|---|---|
| Порт входа | — | имя I0, выход → I0 |
| Порт входа | — | имя I1, выход → I1 |
| pmos | I0 | VCC ↔ mid |
| pmos | I1 | mid ↔ O0 |
| nmos | I0 | O0 ↔ GND |
| nmos | I1 | O0 ↔ GND |
| Порт выхода | — | имя O0, вход ← O0 |
Ctrl+G → имя NOR.
Шаг 4. AND — И: И-НЕ в узле n, потом переворот
| Деталь | Затвор (G) | Канал соединяет |
|---|---|---|
| Порт входа | — | имя I0, выход → I0 |
| Порт входа | — | имя I1, выход → I1 |
| pmos | I0 | VCC ↔ n |
| pmos | I1 | VCC ↔ n |
| nmos | I0 | n ↔ mid |
| nmos | I1 | mid ↔ GND |
| pmos | n | VCC ↔ O0 |
| nmos | n | O0 ↔ GND |
| Порт выхода | — | имя O0, вход ← O0 |
Ctrl+G → имя AND.
Шаг 5. OR — ИЛИ: ИЛИ-НЕ в узле n, потом переворот
| Деталь | Затвор (G) | Канал соединяет |
|---|---|---|
| Порт входа | — | имя I0, выход → I0 |
| Порт входа | — | имя I1, выход → I1 |
| pmos | I0 | VCC ↔ mid |
| pmos | I1 | mid ↔ n |
| nmos | I0 | n ↔ GND |
| nmos | I1 | n ↔ GND |
| pmos | n | VCC ↔ O0 |
| nmos | n | O0 ↔ GND |
| Порт выхода | — | имя O0, вход ← O0 |
Ctrl+G → имя OR.
Шаг 6. XOR — «хотя бы один, но не оба»
Из готовых вентилей: XOR = AND(OR, NAND).
| Деталь | I0 | I1 | O0 (выход) |
|---|---|---|---|
| Порт входа | — | — | I0 |
| Порт входа | — | — | I1 |
| OR | I0 | I1 | o |
| NAND | I0 | I1 | n |
| AND | o | n | O0 |
| Порт выхода | O0 | — | — |
Ctrl+G → имя XOR.
0.3. Проверка
Выдели чип в библиотеке или на холсте и нажми T — откроется таблица истинности. Сверь:
| Чип | O0 при I1 I0 = 00 01 10 11 |
|---|---|
| NOT | (один вход I0) 1 0 |
| NAND | 1 1 1 0 |
| NOR | 1 0 0 0 |
| AND | 0 0 0 1 |
| OR | 0 1 1 1 |
| XOR | 0 1 1 0 |
Вставка урока 0 (Cmd+I)
Вставка содержит только определения чипов: вентили появятся в библиотеке, холст не изменится.
# Урок 0 — вентили серии из транзисторов: NOT, NAND, NOR, AND, OR, XOR. Только определения чипов — холст не меняется.# Вставка: Cmd+I в любой проект — вентили появятся в библиотеке. Транзистор: nmos/pmos(затвор, верх, низ). # --- вентили из транзисторов ---chip NOT { portIn(I0) portOut(O0) pmos(I0, VCC, O0) nmos(I0, O0, GND)} # И-НЕ: два P параллельно сверху, два N последовательно снизуchip NAND { portIn(I0) portIn(I1) portOut(O0) pmos(I0, VCC, O0) pmos(I1, VCC, O0) nmos(I0, O0, mid) nmos(I1, mid, GND)} # ИЛИ-НЕ: два P последовательно сверху, два N параллельно снизуchip NOR { portIn(I0) portIn(I1) portOut(O0) pmos(I0, VCC, mid) pmos(I1, mid, O0) nmos(I0, O0, GND) nmos(I1, O0, GND)} # И = И-НЕ + переворот (6 транзисторов)chip AND { portIn(I0) portIn(I1) portOut(O0) pmos(I0, VCC, n) pmos(I1, VCC, n) nmos(I0, n, mid) nmos(I1, mid, GND) pmos(n, VCC, O0) nmos(n, O0, GND)} # ИЛИ = ИЛИ-НЕ + переворот (6 транзисторов)chip OR { portIn(I0) portIn(I1) portOut(O0) pmos(I0, VCC, mid) pmos(I1, mid, n) nmos(I0, n, GND) nmos(I1, n, GND) pmos(n, VCC, O0) nmos(n, O0, GND)} # исключающее ИЛИ: «хотя бы один, но не оба» = AND(OR, NAND)chip XOR { portIn(I0) portIn(I1) portOut(O0) OR(I0, I1, o) NAND(I0, I1, n) AND(o, n, O0)}Не получается? Что-то не работает →