nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 09:55



Reply to topic  [ 59 posts ]  Go to page Previous  1, 2, 3, 4  Next
Троичный компьютер ТРИНИТИ-2004 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
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


29 Oct 2008 18:06
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
"Светодиоды" светятся, "переключатели" переключаются, в общем и целом - работает :)


30 Oct 2008 12:04
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Решил слегка подправить спецификацию (изменения обозначены жирным):

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

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

Code:
WR IR ST
[] [] []
RD RT GO


где:
WR - write (запись);
RD - read (чтение);
IR - interrupt (прерывание);
RT - return (возврат);
ST - step (шаг);
GO - go (поехали ;).


01 Nov 2008 21:26
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
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.



05 Nov 2008 16:08
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Переименовал флаг 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.



06 Nov 2008 21:48
Profile WWW
Admin
User avatar

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


26 Jul 2010 18:58
Profile WWW
Admin
User avatar

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


28 Jul 2010 21:10
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Начал писать на вики примеры кода для 3niti alpha:
http://www.3niti.org/wiki/index.php?n=A ... deSnippets


16 Feb 2011 22:20
Profile WWW
Fanat

Joined: 06 Nov 2013 14:09
Posts: 61
Location: 82.147.177.70
Reply with quote
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, через такую шину, достаточно всего одного
дополнительного такта.


04 Oct 2011 14:29
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Я планировал первую "дискретную" версию построить вот на таком бинарном ядре:

http://www.nedopc.org/forum/viewtopic.php?t=9316


04 Oct 2011 20:05
Profile WWW
Fanat

Joined: 06 Nov 2013 14:09
Posts: 61
Location: 82.147.177.70
Reply with quote
Ещё вопрос на счёт операций OPA (унарная потритовая над регистром A) и OPB (бинарная потритовая операцию над
регистрами A и B) Как понимается в ALU, для выполнения
этих операций, схема полного сумматора должна быть
скомбинирована с какой-то схемой потритовых логических
функций. Это где то уже обсуждалось, или есть какие-то источники для ознакомления?


06 Oct 2011 06:26
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Я даже уже сгенерил реализацию OPA и OPB на DG403-х:

http://www.nedopc.org/forum/viewtopic.p ... 8&start=31

Quote:
6 входов и 3 выхода (364*3=1092):
унарный трёхразрядный универсальный троичный элемент (OPA) - 3/1092=0.3%

15 входов и 3 выхода (много):
бинарный трёхразрядный универсальный троичный элемент (OPB) - 12/много=0% ;)


Как и предполагалось - схемы получились очень легковесными


06 Oct 2011 06:43
Profile WWW
Fanat

Joined: 06 Nov 2013 14:09
Posts: 61
Location: 82.147.177.70
Reply with quote
Жаль нет визуалиции этих решений, но вообщем-то начал
представлять как это может быть.Надо попробовать посвятить
этому делу вечерок-другой. Теперь возник ещё один вопрос:
если множество унарных потритных логических функций вроде
как является подмножеством бинарных потритных логических функций, то по идее и бинарный универсальный троичный элемент (OPB)(универсальный же!) должен их выполнять? Вообщем простыми
словами, кажется что, и унарные, и бинарные функции могут выполняться как одна одна операция и для этого нужна всего
одна комманда


06 Oct 2011 07:53
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
rvnick wrote:
Жаль нет визуалиции этих решений, но вообщем-то начал
представлять как это может быть.Надо попробовать посвятить
этому делу вечерок-другой.


Визуализация почти готова - очень скоро смогу нагенерить библиотеку примеров в картинках...

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


По идее да, но ввиду того, что код операции задаётся следом за командой, для OPA требуется в 2 раза меньше места в программе, нежели для OPB (две триады против четырёх).

P.S. В будущих системах команд я думаю завести специальные регистры для задания нескольких универсальных команд для их быстрого вызова в одно слово - вот там как раз и можно было бы использовать это свойство что OPB покрывает OPA.


06 Oct 2011 16:35
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
Шрифты это конечно хорошо, но это для далёкого будущего, а пока надо подумать о том, что можно сделать прямо сейчас - например простейший дисплей для троичного компьютера можно построить из 81 красно-зелёного светодиода - что есть 9 рядов по 9 светодиодов в каждом:

Image

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


JeNNeR прислал совершенно замечательный GIF-мультик того, как на таком экранчике выглядел бы тетрис:

Image


26 Nov 2011 21:53
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 59 posts ]  Go to page Previous  1, 2, 3, 4  Next

Who is online

Users browsing this forum: No registered users and 15 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.