"Сетунь"

История компьютера на основе троичной логики

В предыдущей статье я рассказал о первом и единственном в мире компьютере "Сетунь", основанном на троичной логике. Теперь, пожалуй, стоит рассказать о самой троичной логике и о её применении.


Основы

Сегодня вся цифровая техника основана на двоичных сигналах (битах) и двух стабильных элементах памяти. Если какой-то объект принимает более двух значений, они реализуются в виде совокупности битов. Так, десятичные цифры представлены четвёрками битов, символы алфавита, цифры и другие знаки - восьмёрками битов (байтами). Операции, совершаемые над недвузначными объектами, реализованы в виде наборов операций двузначной логики, производимых над битами, совокупностями которых представлены эти объекты.

Троичная цифровая техника, так и не получившая широкого распространения, основана на трёхзначных сигналах и трёхстабильных элементах памяти (тритах). Объекты, которые имеют более трёх значений, реализуются как совокупности тритов. Операции над этими объектами реализованы в виде наборов операций трёхзначной логики. Аналог байта - шестёрка тритов (трайт).

Одна из основных проблем троичной техники - то, что трёхзначные вентили и элементы памяти оказываются сложнее в производстве и намного дороже, чем двузначные. Кроме того, трёхзначная логика изначально сложнее двузначной. С другой стороны, трёхзначные элементы памяти мощнее (трит соответствует примерно 1,585 бита), а операционные возможности трёхзначных вентилей богаче. В результате обработка данных троичной техникой происходит (при аналогичном физическом быстродействии элементов) быстрее, а структура троичного устройства оказывается проще, чем структура равнозначного по функциональности двоичного устройства. Иначе говоря, троичная техника имеет более сложные элементы, объединённые в более простые структуры, по сравнению с двоичной техникой.


Троичная логика

Согласно энциклопедическому определению, троичная логика - один из видов многозначной логики, использующий три истинностных значения:

1 - истина,

0 - неизвестно,

-1 - ложь.

Если не использовать значение "неизвестно", троичная логика сводится к обычной двоичной логике. В троичной логике над числами могут производиться следующие операции: логическое умножение (конъюнкция), логическое сложение (дизъюнкция), логическое отрицание, логическая связка "если..., то..." (импликация).

В реальной жизни большинство вопросов предполагают тройственный ответ. Как в знаменитом примере Аристотеля: "Будет ли завтра в полдень морской бой? - Да - Нет - Может быть". Спросите у вашего знакомого, был ли вчера дождь в Бобруйске. Если только сосед не приехал из Бобруйска сегодня утром рейсом через Москву или не пообщался с кем-то в Бобруйске, ответ его будет не "Да" или "Нет", а "Не знаю" или "Может быть". Хотя речь идёт о событии в прошедшем времени. Тройственность ответа обусловлена не тем, что вопрос касается неопределённого будущего, а отсутствием у отвечающего информации для утвердительного или отрицательного ответа. Если в этой ситуации ваш знакомый окажется "двоичным" (т.е. способным отвечать только "Да" или "Нет"), то его придётся спрашивать о дожде в Бобруйске в два приёма. Сначала надо будет спросить, знает ли он о том, был или нет вчера дождь в Бобруйске. При утвердительном ответе на этот вопрос можно спросить, был ли, собственно, дождь.

Этот пример показывает, что трёхзначная логика - не нечто противоестественное или необыкновенное. На практике люди пользуются преимущественно трёхзначной логикой. Так, система умозаключений, составляющая логическую основу естественных языков, - силлогистика (также впервые описанная Аристотелем) - построена именно на принципе трёхзначности.


Троичная цифровая техника

Двоичная техника не полностью использует возможность различать сигнал как по амплитуде, так и по полярности. В троичной технике это позволяет увеличить значность с двух до трёх без ужесточения допусков. По крайней мере, именно с такой позиции подходит к теории троичных вычислительных систем создатель компьютера "Сетунь" Николай Брусенцов. В рамках его подхода троичный сигнал x можно рассматривать как суперпозицию его положительной (x+) и отрицательной (x-) двоичных составляющих: x = x+-x-, x+•x- не равно 0. То есть троичная техника определяется как оперирующая не только троичными сигналами, но и их положительными и отрицательными двоичными компонентами. Их можно отделять от троичного сигнала, обрабатывать по отдельности и снова соединять в троичный сигнал. Физически в троичных вычислительных системах вентили, обладающие двоичным выходом положительной полярности, используются совместно с вентилями, обладающими двоичным выходом отрицательной полярности. На входах этих вентилей допускаются сигналы как положительной, так и отрицательной полярности. Это и есть трёхзначная логика. Выходы положительной и отрицательной полярности можно объединять, что в 1,5-2 раза увеличивает интенсивность использования соединений и, соответственно, сокращает количество соединений между вентилями.

При создании ЭВМ "Сетунь" разработчики старались не предоставить программисту возможно больший набор различных команд, а, наоборот, сделать этот набор как можно меньшим. Такой подход способствовал удешевлению ЭВМ и, с другой стороны, облегчал её освоение программистами. В результате в набор команд "Сетуни" вошли только 24 команды.

Архитектуру машины "Сетунь" Брусенцов характеризует как "одно-аккумуляторную, с индекс-регистром и одноадресным форматом команд". Длина аккумулятора - 18 тритов, а длина ячеек главной памяти - 9 тритов (это эквивалентно 14,3 бита). Команды занимают по одной ячейке памяти, а операнды могут занимать как по одной, так и по две ячейки, которые рассматриваются как одно 18-тритное слово.

Девять тритов, кодирующих команду К(1:9), разделяются на код операции К(6:8) и адресную часть К(1:5)К(9). Первые четыре трита К(1:4) адресной части составляют адрес пары 9-тритных ячеек, обращение к которым производится трояко, в зависимости от значения К(5): при К(5)=0 доступна одна из этих ячеек, при К(5) =1 - другая, при К(5)=-1 - 18-тритное слово, младшая часть которого - ячейка, соответствующая К(5)=1, а старшая - ячейка, соответствующая К(5)=0. Трит К(9) управляет индексацией так, что исполнительный адрес ЕА определяется выражением EA(1:5)=K(1:5)+K(9)*F(1:5), где F(1:5) - индекс-регистр. Поскольку K(9) принимает значения 0, 1, -1, то EA равно либо К(1:5), либо K(1:5)+F(1:5), либо K(1:5)-F(1:5).

Адресное пространство главной памяти "Сетуни" - от -(35-1)/2 до (35-1)/2, т.е. от -121 до +121. Но поскольку каждый третий адрес используется для указания пары ячеек, обладающих отдельными адресами, адресовать можно только 162 девятитритных ячейки и 81 пару ячеек.

При обмене с внешней памятью - она реализована на магнитном барабане и является основной памятью машины, - а также при вводе/выводе данных главная память разделяется на страницы, содержащие по 54 ячейки. Номер страницы - значение старшего трита принадлежащих этой странице адресов. То есть память структурирована как массив m(-1:1, -80:81, 1:9), в котором средняя компонента индекса пропускает каждое третье значение. Обмен с магнитным барабаном производится целыми страницами, причём трит K(1) в команде обмена указывает номер участвующей в обмене страницы главной памяти, а триты К(2:5) - номер страницы магнитного барабана. Ввод/вывод в девятеричном коде - целыми страницами, а в алфавитно-цифровом коде - записями произвольной длины.

Тройка тритов K(6:8) командного слова используется в качестве кода операции и принимает 27 различных значений - этим ограничивается количество команд машины. В реальности, правда, набор состоит из 24 команд: три значения кода операции были зарезервированы и не использовались в серийных машинах. Из предоставленных программисту 24 команд две команды управляют страничным обменом между главной памятью и магнитным барабаном, одна команда задаёт операции ввода/вывода.

В процессоре есть пять программно доступных регистров: аккумулятор S(1:18), регистр множителя K(1:18), индекс-регистр F(1:5), программный счётчик С(1:5), регистр знака результата w(1:1). Над аккумулятором и указываемой адресной частью ячейкой памяти определены следующие операции:

  • засылка в аккумулятор S:=m(EA);
  • сохранение результата m(EA):=S;
  • сложение S: = S+m (ЕА);
  • вычитание S:=S - m(EA);
  • умножение тритов S:=SДm(EA);
  • сдвиг S:=S*3m(EA, 1:5);
  • нормализация m(EA):=Sнорм; S:=0; S(1:5):=nсдв.

Операция нормализации - это преобразование путём сдвига значения S в Sнорм, удовлетворяющее условию 0,5<|Ѕнорм|<1,5. При этом Sнорм сохраняется в главной памяти, а число произведённых сдвигов nсдв помещается в S(1:5). В случае S=0 принято Sнорм=0, nсдв=0.

Всё же, с точки зрения практики, больший интерес представляют архитектурные особенности более "продвинутой" ЭВМ "Сетунь-70". Минимальная непосредственно адресуемая единица главной памяти "Сетуни-70" - 6-тритный трайт (~9,5 бита). Трайт лишь немногим больше 8-битного байта, но уже достаточно велик, чтобы закодировать, например, алфавит, включающий русские и латинские заглавные и строчные буквы, цифры, математические и служебные знаки. В трайте целое число как 9-ричных, так и 27-ричных цифр. Два трайта - это 19 битов, три трайта - почти 29 битов и т.д.

Важным новшеством в "Сетуни-70" стала стековая организация процессора. Введение арифметического стека (т.е. магазина для автоматического запоминания промежуточных результатов) было связано с тем, что в качестве языка машины разработчики выбрали польскую инверсную запись (ПОЛИЗ). Её предпочли как удобный и компактный выходной язык трансляторов.

Для экономии дорогой памяти использовались короткие 6-тритные слова (трайты). Операционный трайт в двух старших тритах содержит нули, а в остальных 4-х тритах - код одной из 81 операций. Операции разбиты на три класса: 27 основных, 27 служебных и 27 макроопераций, программируемых пользователем. Соответственно, этим классам имеется три режима работы машины: основной или пользователя, прерывания и макро.

Виктор ДЕМИДОВ

Версия для печатиВерсия для печати

Номер: 

15 за 2009 год

Рубрика: 

Вчера
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Комментарии

Аватар пользователя Беларус
Сравним трит и 2 бита.

трит:

(1) - истина, (0) - неизвестность, (-1) - ложь.

2 бита (условно):

01 - истина

10 - ложь

00 - неизвестность без предопределённости

11 - неизвестность с предопределённостью

00 - неизвестно какое там значение, и неизвестно есть ли даже оно вообще (варианты последующего результата: истина, ложь, неизвестность без предопределённости)

11 - неизвестно какое там значение, но точно известно что оно уже предопределено (это точно или истина, или ложь - варианты последующего результата: истина, ложь)

Итак, троичность против двоичности. На какой логике основано мироздание - чётной или нечётной?

Аватар пользователя Беларус
Кстати ещё, Ноль - в информатике - это не просто число, а число-состояние (число-статус). Смысл этого состояния = "нет значения". В БАЙТЕ: 00 (00000000)

Также существует противоположное число-статус - АнтиНоль (операция NOT 0). Смысл состояния = "пограничное значение". В БАЙТЕ: FF (11111111)

Если преставить одну из вселенных в виде ограниченной гиперсферы, то антиноль является как раз величиной радиуса.

Аватар пользователя mike
Беларус, срочно статью в "КВ"!
Аватар пользователя mike
>Смысл этого состояния = "нет значения"

Ржал. Значение нуля вполне определённое: НОЛЬ. Вопрос: ск. бабок у тебя на счету? Почувствуй разницу в ответах: "Ноль" и "Не знаю". :)

Кстати, дибиты (так называются "2 бита") впервые стали применяться в связи для упрощения процесса модуляции на скорости 2400.

Аватар пользователя mike
>На какой логике основано мироздание - чётной или нечётной?

Это всё равно, как спросить: "Вот если бы мы обнаружили обитаемую планету, то количество генов у её обитателей было бы чётным или нечётным?" Неосхоластика! Поупражняйся с трибитами, потом добавь ещё бит и т.д., пока не надоест. :)

Аватар пользователя Беларус
Всё верно, mike. Поправка:

"нет положительного (отрицательного) значения"

"пограничное положительное (отрицательное) значение"