Памятка по универсальным логическим вентилям
5 июня 2023
Универсальным логическим вентилем (universal logic gate) называется такой логический вентиль, имея который, можно построить все остальные вентили, а в пределе и целый компьютер общего назначения. Такими вентилями являются NAND, он же И-НЕ или штрих Шеффера, а также NOR, он же ИЛИ-НЕ или стрелка Пирса. Рассмотрим все это чуть более детально и с примерами.
Вспомним таблицу истинности для NAND и NOR:
A | B | NAND(A,B) | NOR(A,B) |
---|---|---|---|
0 | 0 | 1 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 0 |
А вот как эти вентили можно сделать на N-канальных полевых транзисторах:
Получили так называемую NMOS-логику. Именно на ней работает Intel 8080, или, к примеру, оригинальный Zilog Z80. Позднее Z80 появился и в CMOS варианте. Конечно, детали чуть сложнее. Так в 8080 на самом деле нет резисторов. Их роль выполняют частично открытые полевые транзисторы, что оказалось удобнее при производстве. Это же является причиной, почему 8080 для работы нужно больше одного напряжения.
Заметьте, что никто не говорил, что высокое напряжение должно означать единицу, а низкое — ноль. Также никто не говорил, что логические вентили обязаны строится на полевых транзисторах. С тем же успехом подойдут биполярные транзисторы, лампы, реле и не только.
Если есть операция NAND, то из нее можно получить NOR, и наоборот. По этой причине они взаимозаменяемы. Имея только NAND или NOR, можно получить любой другой логический вентиль. Это называется NAND-логикой и NOR-логикой соответственно. Используя только NAND-логику или только NOR-логику мы не обязательно получим самую простую реализацию вентиля, но работать будет.
В качестве простого примера рассмотрим, как из NAND получить AND:
Если соединить входы NAND, то получаем NOT. Теперь считаем NOT(NAND(A,B))
и получаем AND(A,B)
. Если в лоб заменять NAND вентили на транзисторы, то понадобится четыре транзистора. Но можно заметить, что для NOT достаточно и одного транзистора. Итого на AND требуется три транзистора.
А так из NOR вентиля можно получить OR:
Все остальные логические вентили получаются из NAND и/или NOR по тем же принципам. Формулы, а также схемы для NMOS, CMOS и т.д. есть в Википедии. По этой причине я не вижу смысла их здесь перерисовывать.
Логических вентилей достаточно для построения АЛУ. Также на NAND или NOR вентилях реализуются триггеры. Триггер — это уже примитив синхронизации между блоками процессора, а также один бит памяти. Объединив воедино много триггеров, получаем статическую память.
Сколько транзисторов нужно, чтобы сделать процессор? В 8-и битном Intel 8080 их содержится 4500 штук. Инженеры Zilog использовали уже 8500 транзисторов в своем Z80. Это более сложный процессор с большим количеством инструкций, оттого в нем и больше транзисторов.
Если подумать, то несколько тысяч транзисторов — это не слишком много, и даже не слишком дорого, особенно если использовать SMD компоненты. Так 5000 штук 2N7002 обойдутся вам примерно в 50-100$, смотря где и в каком количестве вы будете их покупать. При желании можно сделать свой собственный процессор на дискретных компонентах. Более того, такие проекты существуют, и даже не один.
Можно использовать и не транзисторы вовсе. Так Артем Кашканов сначала сделал релейный компьютер BrainfuckPC, а затем ламповый DekatronPC. Также Артем экспериментирует со струйной логикой.
Если не хочется паять, то всегда есть вариант воспользоваться ПЛИС. Когда-то в этом блоге публиковался обзор Icicle, реализации RISC-V процессора на ПЛИС семейства Lattice ICE40. В 2018-м году Icicle требовалось 2500 логических ячеек. Сейчас проект подрос и требует уже 3000 ячеек.
В заключение стоит сказать, что компьютеры вообще-то не обязаны использовать нули и единицы. Например, существовали троичные и десятичные компьютеры. Нынче разработка и производство таких компьютеров, конечно же, экономически нецелесообразны. Однако в качестве хобби, чтобы интересно провести время, радиолюбитель может творить все что пожелает.
Метки: Электроника.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.