universal-logic-gate/

Универсальным логическим вентилем (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-канальных полевых транзисторах :

NAND и NOR вентили на N-канальных полевых транзисторах (NMOS)

Получили так называемую NMOS-логику . Именно на ней работает Intel 8080 , или, к примеру, оригинальный Zilog Z80 . Позднее Z80 появился и в CMOS варианте. Конечно, детали чуть сложнее. Так в 8080 на самом деле нет резисторов. Их роль выполняют частично открытые полевые транзисторы, что оказалось удобнее при производстве. Это же является причиной , почему 8080 для работы нужно больше одного напряжения.

Заметьте, что никто не говорил, что высокое напряжение должно означать единицу, а низкое — ноль. Также никто не говорил, что логические вентили обязаны строится на полевых транзисторах. С тем же успехом подойдут биполярные транзисторы, лампы , реле и не только .

Если есть операция NAND, то из нее можно получить NOR , и наоборот . По этой причине они взаимозаменяемы. Имея только NAND или NOR, можно получить любой другой логический вентиль. Это называется NAND-логикой и NOR-логикой соответственно. Используя только NAND-логику или только NOR-логику мы не обязательно получим самую простую реализацию вентиля, но работать будет.

В качестве простого примера рассмотрим, как из NAND получить AND:

Как из NAND вентиля получить AND

Если соединить входы NAND, то получаем NOT. Теперь считаем NOT(NAND(A,B)) и получаем AND(A,B) . Если в лоб заменять NAND вентили на транзисторы, то понадобится четыре транзистора. Но можно заметить, что для NOT достаточно и одного транзистора. Итого на AND требуется три транзистора.

А так из NOR вентиля можно получить OR:

Как из 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 ячеек.

В заключение стоит сказать, что компьютеры вообще-то не обязаны использовать нули и единицы. Например, существовали троичные и десятичные компьютеры. Нынче разработка и производство таких компьютеров, конечно же, экономически нецелесообразны. Однако в качестве хобби, чтобы интересно провести время, радиолюбитель может творить все что пожелает.

EnglishRussianUkrainian