Троичный компьютер ТРИНИТИ-2004

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Shaos wrote: Пожалуй дисплей 9x9 надо сделать опциональным дополнением, втыкаемым в троичную шину расширения (о ней позже), основным же методом вывода информации надо сделать линейку светодиодов, отображающую содержимое теневого регистра PC (9 светодиодов), одну триаду данных (3 светодиода) и также содержимое регистра A - всего 15 штук. Под светодиодами можно расположить троичные переключатели - 9 для задания адреса, 3 для задания вводмых данных и 3 переключателя управления:

1) переключатель управляющий вводом-выводом:
P (верхнее положение) - по установленному адресу записывается установленная триада, которая также отображается на светодиодах триады данных;
O (среднее положение) - установленный адрес и установленная триада игнорируются (т.е. переключатели адреса и данных в этом режиме можно переключать), а на светодиодах триады данных отображается содержимое ячейки с адресом PC;
N (нижнее положение) - установленная триада игнорируется, а на светодиодах триады данных отображается содержимое ячейки по установленному адресу;

2) переключатель выбирающий подпрограммы работы:
P (верхнее положение) - прервать работу основной программы и запустить подпрограмму по установленному адресу;
O (среднее положение) - не препятствовать работе основной программы или ранее запущенной подпрограммы;
N (нижнее положение) - прервать работу основной программы и запустить дополнительную подпрограмму, что является расширением на будущее;

3) переключатель управляющий пошаговой отладкой:
P (верхнее положение) - осуществить один шаг вперед;
O (среднее положение) - режим паузы;
N (нижнее положение) - обычный прогон программы.
Как это будет выглядеть можно посмотреть здесь: http://www.nedopc.org/ternary/java.php?applet=3
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Re: Троичный компьютер ТРИНИТИ

Post by Mac Buster »

"Светодиоды" светятся, "переключатели" переключаются, в общем и целом - работает :)
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Решил слегка подправить спецификацию (изменения обозначены жирным):

2) переключатель выбирающий подпрограммы работы:
P (верхнее положение) - прервать работу основной программы сохранив текущий адрес и запустить подпрограмму по установленному адресу;
O (среднее положение) - не препятствовать работе основной программы или ранее запущенной подпрограммы;
N (нижнее положение) - прервать работу ранее запущенной подпрограммы и вернутся к основной программе по сохранённому адресу

Теперь надо подумать об обозначениях: 9 левых светодиодов и переключателей будут называться A8,A7,A6,A5,A4,A3,A2,A1,A0; далее 3 сетодиода и переключателя будут называться Dh,Dm,Dl; далее 3 светодиода будут называться Ah,Am,Al; а вот с тремя переключателями под ними немного сложнее, так как там надо называть отдельные положения переключателей:

Code: Select all

WR IR ST
[] [] []
RD RT GO
где:
WR - write (запись);
RD - read (чтение);
IR - interrupt (прерывание);
RT - return (возврат);
ST - step (шаг);
GO - go (поехали ;).
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Shaos wrote:
Как это будет выглядеть можно посмотреть здесь: http://www.nedopc.org/ternary/java.php?applet=3
Реализовал полную систему команд 3niti alpha

Получилось чуть менее 1000 строк джава-кода (для работы с апплетом нужна виртуальная машина)

Переходим к тестированию!
Last edited by Shaos on 20 Sep 2012 19:39, edited 2 times in total.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Переименовал флаг ASF в RSF, который будет меняться только после арифметических и логических операций (копирование и сдвиги его значение менять не будут):

-4 N: триада из ячейки памяти с адресом DPn (см. ниже);
-3 O: триада из ячейки памяти с адресом DPo (см. ниже);
-2 P: триада из ячейки памяти с адресом DPp (см. ниже);
-1 F: регистр флагов (см. ниже);
0 A: регистр аккумулятора;
+1 B: дополнительный регистр;
+2 L: младшая триада текущего регистра DP (см. ниже);
+3 M: средняя триада текущего регистра DP (см. ниже);
+4 H: старшая триада текущего регистра DP (см. ниже).

Регистр F состоит из 3 троичных флагов:
Старший трит: RSF (Result Sign Flag) - флаг знака результата
Средний трит: DPF (Data Pointer Flag) - флаг указателя данных
Младший трит: BCF (Borrow Carry Flag) - флаг переноса-заёма

Также существют три 9-тритовых регистра указателя данных (data pointer = DP) - DPn, DPo, DPp, доступные через имена регистров L/M/H когда флаг DPF имеет значение N, O, P соответственно.

Теневой регистр программного счётчика (program counter = PC) напрямую недоступен - только через команды копирования между PC и текущим DP.

Полный список команд:
#NNN (-13) SAN - сохранить регистр A в регистре N (ячейка памяти с адресом DPn);
#NNO (-12) SAO - сохранить регистр A в регистре O (ячейка памяти с адресом DPo);
#NNP (-11) SAP - сохранить регистр A в регистре P (ячейка памяти с адресом DPp);
#NON (-10) SAF - сохранить регистр A в регистре F;
#NOO (-9) SPCD - сохранить PC в текущем регистре DP;
#NOP (-8) SAB - сохранить регистр A в регистре B;
#NPN (-7) SAL - сохранить регистр A в регистре L (младшая триада текущего DP);
#NPO (-6) SAM - сохранить регистр A в регистре M (средняя триада текущего DP);
#NPP (-5) SAH - сохранить регистр A в регистре H (старшая триада текущего DP);
#ONN (-4) RLA - сдвинуть регистр A влево через флаг BCF;
#ONO (-3) ADD - сложить регистр A с регистром B и флагом BCF, сохранить результат в A и флаге BCF, установить флаг знака RSF;
#ONP (-2) RRA - сдвинуть регистр A вправо через флаг BCF;
#OON (-1) LAI # - загрузить регистр A данными из триады идущей следом;
#OOO (0) ADI # - сложить регистр A с данными из триады идущей следом и флагом BCF, сохранить результат в регистре A и флаге BCF, установить флаг знака RSF;
#OOP (1) OPA # - выполнить унарную потритовую операцию над регистром A (функция устанавливается данными из триады идущей следом), установить флаг знака RSF;
#OPN (2) LDI # # # - загрузить текущий регистр DP данными из 3 триад идущих следом (старшая, средняя, младшая);
#OPO (3) JMP # # # - передать управление на адрес, взятый из 3 триад идущих следом (старшая, средняя, младшая);
#OPP (4) OPB # # # - выполнить бинарную потритовую операцию над регистрами A и B, сохранить результат в регистре A (функция устанавливается данными из 3 триад идущих следом), установить флаг знака RSF;
#PNN (5) LAN - загрузить регистр A из регистра N (ячейка памяти с адресом DPn);
#PNO (6) LAO - загрузить регистр A из регистра O (ячейка памяти с адресом DPo);
#PNP (7) LAP - загрузить регистр A из регистра P (ячейка памяти с адресом DPp);
#PON (8) LAF - загрузить регистр A из регистра F;
#POO (9) LPCD - загрузить PC из текущего регистра DP;
#POP (10) LAB - загрузить регистр A из регистра B;
#PPN (11) LAL - загрузить регистр A из регистра L (младшая триада текущего DP);
#PPO (12) LAM - загрузить регистр A из регистра M (средняя триада текущего DP);
#PPP (13) LAH - загрузить регистр A из регистра H (старшая триада текущего DP).
Last edited by Shaos on 20 Sep 2012 19:39, edited 1 time in total.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Начал задумываться над будущим "3niti alpha". Расширение системы команд может быть обеспечено засчёт реализации подпрограмм (как например переход на подпрограмму с сохранением адреса возврата в стеке, возврат из подпрограммы с забиранием адреса из стека, арифметика над длинными словами и т.д.), расположенных в адресной области ниже нуля. При этом в будущем можно реализовать эти подпрограммы в железе (при условии что адреса этих подпрограмм будут застандартизированы). Тогда же возникает вопрос в ускорении обработки четырёх-триадных команд (таких как LDI, JMP и OPB). Разумным решением при этом может быть 4-триадная (12-тритная) шина данных. Но так как у нас есть не только четырёх-триадные команды, но также двух-триадные и одно-триадные, то понятно, что команды не будут выровнены на границу 4-триадного слова - значит нам нужен контроллер памяти, который мог бы выдавать 4 триады с любым сдвигом по памяти, при этом адрес обращения будет соответствовать первой триаде (адреса всё также будут адресовать отдельные триады, а не 4-триадные слова). Кроме того можно сделать так, что ALU будет выполнять в параллель до 4 независящих друг от друга 1-тритных операций.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Примерное видение будущего 3niti: "3niti beta" может иметь 6-тритовый процессор (c 12 или 18 тритовой адресацией), а "3niti gamma" - уже 12-тритовый (с 18 или 24 тритовой адресацией). Напомню, что 12 тритов адресуют 531К, 18 тритов - 387M, 24 трита - 282G.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Начал писать на вики примеры кода для 3niti alpha:
http://www.3niti.org/wiki/index.php?n=A ... deSnippets
rvnick
Senior
Posts: 100
Joined: 06 Nov 2013 14:09
Location: 82.147.177.70

Re: Троичный компьютер ТРИНИТИ

Post by rvnick »

Shaos wrote: Начал задумываться над будущим "3niti alpha". Расширение системы команд может быть обеспечено засчёт реализации подпрограмм (как например переход на подпрограмму с сохранением адреса возврата в стеке, возврат из подпрограммы с забиранием адреса из стека, арифметика над длинными словами и т.д.), расположенных в адресной области ниже нуля. При этом в будущем можно реализовать эти подпрограммы в железе (при условии что адреса этих подпрограмм будут застандартизированы). Тогда же возникает вопрос в ускорении обработки четырёх-триадных команд (таких как LDI, JMP и OPB). Разумным решением при этом может быть 4-триадная (12-тритная) шина данных. Но так как у нас есть не только четырёх-триадные команды, но также двух-триадные и одно-триадные, то понятно, что команды не будут выровнены на границу 4-триадного слова - значит нам нужен контроллер памяти, который мог бы выдавать 4 триады с любым сдвигом по памяти, при этом адрес обращения будет соответствовать первой триаде (адреса всё также будут адресовать отдельные триады, а не 4-триадные слова). Кроме того можно сделать так, что ALU будет выполнять в параллель до 4 независящих друг от друга 1-тритных операций.
Насчёт проблемы четырёх-триадных команд (таких как LDI, JMP и OPB), кажется есть одна возможность относительно несложного решения. Допустим первая триада, будем условно считать, что уже поступила в некий регистр комманд CU (control unit). Далее CU надо каким-то образом организовать
приём последующих трёх триад данных из памяти например в регистр DP. Это не так уж и трудно сделать если входную
3-х тритную шину данных подключить сперва на вход мультиплексора 3 в 9, а выходы мультиплексора подключить к
входам 9-тритного трёхсекционного (3х3)регистра ввода-вывода,с возможностью независимой записи-чтения каждой триады в соответствующую секцию.Соответственно выходы этого
9-тритного регистра временного хранения данных будут
подключены в 9-тритной внутренней шине процессора.
Теперь для перенесения сохранённого 9-тритного слова в
регистр DP, через такую шину, достаточно всего одного
дополнительного такта.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Я планировал первую "дискретную" версию построить вот на таком бинарном ядре:

viewtopic.php?t=9316
rvnick
Senior
Posts: 100
Joined: 06 Nov 2013 14:09
Location: 82.147.177.70

Re: Троичный компьютер ТРИНИТИ

Post by rvnick »

Ещё вопрос на счёт операций OPA (унарная потритовая над регистром A) и OPB (бинарная потритовая операцию над
регистрами A и B) Как понимается в ALU, для выполнения
этих операций, схема полного сумматора должна быть
скомбинирована с какой-то схемой потритовых логических
функций. Это где то уже обсуждалось, или есть какие-то источники для ознакомления?
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Я даже уже сгенерил реализацию OPA и OPB на DG403-х:

viewtopic.php?t=168&start=31
6 входов и 3 выхода (364*3=1092):
унарный трёхразрядный универсальный троичный элемент (OPA) - 3/1092=0.3%

15 входов и 3 выхода (много):
бинарный трёхразрядный универсальный троичный элемент (OPB) - 12/много=0% ;)
Как и предполагалось - схемы получились очень легковесными
rvnick
Senior
Posts: 100
Joined: 06 Nov 2013 14:09
Location: 82.147.177.70

Re: Троичный компьютер ТРИНИТИ

Post by rvnick »

Жаль нет визуалиции этих решений, но вообщем-то начал
представлять как это может быть.Надо попробовать посвятить
этому делу вечерок-другой. Теперь возник ещё один вопрос:
если множество унарных потритных логических функций вроде
как является подмножеством бинарных потритных логических функций, то по идее и бинарный универсальный троичный элемент (OPB)(универсальный же!) должен их выполнять? Вообщем простыми
словами, кажется что, и унарные, и бинарные функции могут выполняться как одна одна операция и для этого нужна всего
одна комманда
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

rvnick wrote: Жаль нет визуалиции этих решений, но вообщем-то начал
представлять как это может быть.Надо попробовать посвятить
этому делу вечерок-другой.
Визуализация почти готова - очень скоро смогу нагенерить библиотеку примеров в картинках...
rvnick wrote: Теперь возник ещё один вопрос:
если множество унарных потритных логических функций вроде
как является подмножеством бинарных потритных логических функций, то по идее и бинарный универсальный троичный элемент (OPB)(универсальный же!) должен их выполнять? Вообщем простыми
словами, кажется что, и унарные, и бинарные функции могут выполняться как одна одна операция и для этого нужна всего
одна комманда
По идее да, но ввиду того, что код операции задаётся следом за командой, для OPA требуется в 2 раза меньше места в программе, нежели для OPB (две триады против четырёх).

P.S. В будущих системах команд я думаю завести специальные регистры для задания нескольких универсальных команд для их быстрого вызова в одно слово - вот там как раз и можно было бы использовать это свойство что OPB покрывает OPA.
User avatar
Shaos
Admin
Posts: 24080
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Троичный компьютер ТРИНИТИ

Post by Shaos »

Shaos wrote: Шрифты это конечно хорошо, но это для далёкого будущего, а пока надо подумать о том, что можно сделать прямо сейчас - например простейший дисплей для троичного компьютера можно построить из 81 красно-зелёного светодиода - что есть 9 рядов по 9 светодиодов в каждом:

Image

Одна ячейка памяти состоит из 3 тритов и соответственно сможет отображаться тремя светодиодами (слева-направо - старший трит, средний трит, младший трит). Предположим на экран будут отображаться ячейки памяти с адресами от ONN NNN NNN (-3280) до ONN NNN PPP (-3254) - всего 27 ячеек...
JeNNeR прислал совершенно замечательный GIF-мультик того, как на таком экранчике выглядел бы тетрис:

Image