Классификация всех унарных троичных логических элементов

Но оказалось, что всё не так сложно - для начала их все можно разбить на 3 группы, из 3, 6 и 18 элементов. Самую крупную группу из 18 - ещё на 3, и получившиеся 4 подгруппы по 6 в каждой - ещё пополам, на "прямые" и "инверсные". Как это лучше всего развернуть на плоскости - не знаю, пока что расположил 3×9, это больше для экрана смартфона.

Под катом некоторые пояснения, моё страшное недовольство вордом и бонусная Марта.
В первую очередь мы выбираем, сколько различных значений может принимать выход элемента при всех 3 возможных входах. Если значение всего одно - то это и унарным элементом не очень-то является, скорее это нуль-арный элемент, т.е элемент БЕЗ ВХОДОВ, только с выходом. Или, говоря русским языком, это КОНСТАНТА. Таковых у нас будет три: ЛОЖЬ, ВОЗМОЖНО и ИСТИНА. Или "-1", 0, 1. Вещь, безусловно, полезная, реализация очень простая - никаких транзисторов не нужно и в помине, надо просто к соответствующему источнику питания подсоединиться.
Следующим рассмотрим вариант, когда на выходе элемента будет все три возможных значения: "-1", 0, 1. Тогда можно сказать, что элемент "перемешивает", переставляет местами входные значения. Всего таких перестановок возможно 3! = 6. Три из них мы уже рассматривали: это Девушка, Генерал и Дипломат. Самые полезные элементы, на мой взгляд, Генерал, он же буферный элемент - основа для построения вообще всей последовательной логики. Из буфера и аналогового переключателя получается прозрачный D-триггер (latch), а из двух таких - непрозрачный (flip-flop, или просто ff), со срабатыванием по фронту или спаду (см зазеркалье отрицательных фронтов). Из "девушки" получается троичный счётчик "вверх", из "дипломата" - троичный счётчик "вниз".
Ещё 3 элемента со всеми тремя возможными значениями на выходе - это инверсия от трёх уже рассмотренных. Пока что, не придумав имён получше, окрестил их антидипломатом, антигенералом и антидевушкой. Хотя антигенерала я же чуть ранее называл инвертором, но когда речь заходит о троичности, инвертор - слишком размытое понятие. Антигенерал определённо полезен, хотя бы потому, что из двух антигенералов получается генерал, и не очень понимаю, как его можно сделать иначе. Про антидипломата и антидевушку пока ничего сказать не могу - ни разу не реализовывал. Наверняка пригодится. Благо, реализуется не сложнее, хватит трёх транзисторов, если в наличии прямой и инверсный вход. (мы собираемся делать последовательную логику, где комбинаторная логика "запитывается" с выходов регистров, и организовать там инверсный выход не составит труда, "нахаляву")
Так мы рассмотрели 9 элементов из 27. Остаётся 18, они все попадают в категорию "два различных выхода из трёх". И тут же можно эту группу разбить на 3 поменьше:
- выходы "-1" и 1, тогда как 0 отсутствует,
- выходы 0 и 1, тогда как "-1" отсутствует,
- выходы "-1" и 0, тогда как 1 отсутствует.
Они очень схожи между собой, у них у всех "двоичный" выход, весь вопрос в выборе двух напряжений. Т.е масштабированием и смещением одна в другую переводится.
Элемент полностью можно охарактеризовать тремя битами: первый бит показывает реакцию на "1" на входе, второй бит - реакцию на "0", третий - реакцию на "-1". И просто пересчитать их как двоичные числа:
000 001 010 011 100 101 110 111
Получается 8 штук, только вот 000 и 111 имеют лишь одно значение на выходе, такой вариант мы уже рассмотрели ранее в группе "КОНСТАНТЫ". Так что нужно рассмотреть 6 оставшихся.
На рисунке показан логичный способ их пересчитать: один элемент выдаёт высокий уровень только на "-1" и низкий уровень на всё остальное, это мы записываем как X == -1. Второй выдаёт высокий уровень только на 0, третий - только на 1. И ещё три элемента - инверсных, выдают высокий уровень на "не равно".
Именно в таком виде они и будут использоваться для дешифровки адреса. Т.е захочется мне сделать троичный процессор по архитектуре TTA (Transport-triggered architecture), где команда всего одна, MOV DEST, SRC (взять данные с адреса SRC и поместить их по адресу DEST), только вот адреса не так просты - это не всё память, а ещё АЛУ, Program Counter (запись по его адресу вызовет безусловный прыжок, а запись по "соседнему" адресу - условный, только если один из флагов соответствует) и пр. Каждый модуль должен будет определять, не его ли адрес выбран в данный момент. Такая "проверка адреса" и будет сделана из нескольких унарных элементов, проверяющих каждый свой разряд, а уже их выходы будут объединяться по И, а может по ИЛИ, уж что выйдет удобнее. Тут, уж извините, до последнего держать троичность я не собираюсь - модуль или выбран, или не выбран. Скорее всего, здесь наиболее подходящей будет группа с максимальным размахом, т.е выдающая "-1" или 1. Выходы можно будет с чистой совестью подключить к стандартной двоичной логике - и они вполне подружатся.
Реализуются эти 18 элементов достаточно просто - некоторые на 1 транзисторе, но есть и на 4 транзисторах, например, "X==0". Тут нужно два чувствительных транзистора верхней ветви, последовательно соединённых, подключённых к X и ~X, чтобы только на нуле открылись оба. И ещё два малой чувствительности в "нижней ветви", один к X и второй к ~X, чтобы они надёжно подсоединяли выход к "-1" в ответ на "-1" или 1.
Вот, собственно, и всё. Все 27 синтезируемы, и, как минимум 15 вполне полезны.
Думал в пол-пинка эту табличку нарисовать в Ms Word, и поначалу действительно пошло шустро. Включил сетку, и начал по клеточкам все эти линии рисовать. Но когда где-то половину закончил, а на лист А4 оно перестало влезать, я сменил формат на А3 и то ли поэтому, то ли само по себе, вдруг сетка нахрен куда-то съехала и вообще чуть ли не перестала быть квадратной. И назад пытался формат вернуть, и выключал-включал программу, жмакал undo - ничего не помогло, съехала и всё тут. Ещё и заметил, что эти линии "притягиваются" не только к сетке, но и к каждому кончику пунктирной линии, причём там две точки очень близко, и хрен выберешь правильную - в последний момент курсор дрогнет. Так что где-то горизонтальные линии перестали таковыми быть.
Ну, худо-бедно выправил, "сойдёт для сельской местности". А затем начался новый квест: А как же теперь эту хрень сохранить в виде картинки??? Тут вообще сохранение во что угодно, кроме .docx, оказалось сопряжено с непонятными глюками. В .pdf - сжираются "минус единицы", т.е единицы с черточкой сверху. Не пойдёт... Просто всё выделить, Ctrl-C и Ctrl-V в paint - обрезает низ. То же самое, но в paint.net - пишет, недостаточно памяти. То же самое, но в Inkscape - вставляет, притом в векторном виде, но НЕ ВСЁ - часть прямых куда-то исчезает! В итоге сохранил сначала в старый формат .doc, а из него уже нормально преобразовалось в .pdf. Но потерь избежать не удалось - та самая "минус единица" растеризовалась с недостаточным разрешением, кончик единицы как-то "поблек".
В общем, последний раз я такой фигнёй страдал - в следующий раз думаю в Inkscape такое рисовать. Хотя зачастую мне быстрее программку наваять, которая через старый добрый GDI (все эти Pen, Brush, Rectangle, Fill, Ellipse и пр) чего надо нарисует и в png сохранит.
Обещанная Марта, сегодняшние фото:


Очень прошу коллективный разум придумать более ёмкие названия для антидипломата, антигенерала и антидевушки!
|
</> |