Давайте думать над железкой (TRIADOR)

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

Moderator: haqreu

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

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Shaos wrote:На самом деле часть отрицательной области троичной памяти таки попадает в эти 2K (не попадает только треть троичного адресного пространства):
Nxxxxx - не попадает (от -364 до -122)
Oxxxxx - попадает (от -121 до +121)
Pxxxxx - попадает (от +122 до +364)
т.е. у нас в 2K ПЗУ будет не 365 пятитритных слов, как я написал чуть выше, а целых 486 (или 23.7% от всего объёма 2К)! :mrgreen:
В случае ручного программирования ПЗУ 2К в логисимовкой модели - вот первые 100 троичных адресов, которые отображаются на начало двоичной памяти следующим образом (в скобках шестнадцатиричный адрес ячейки в ПЗУ):

Code: Select all

OOOOOO   0 (000)
OOOOOP   1 (001)
OOOOPN   2 (006)
OOOOPO   3 (004)
OOOOPP   4 (005)
OOOPNN   5 (01A)
OOOPNO   6 (018)
OOOPNP   7 (019)
OOOPON   8 (012)
OOOPOO   9 (010)
OOOPOP  10 (011)
OOOPPN  11 (016)
OOOPPO  12 (014)
OOOPPP  13 (015)
OOPNNN  14 (06A)
OOPNNO  15 (068)
OOPNNP  16 (069)
OOPNON  17 (062)
OOPNOO  18 (060)
OOPNOP  19 (061)
OOPNPN  20 (066)
OOPNPO  21 (064)
OOPNPP  22 (065)
OOPONN  23 (04A)
OOPONO  24 (048)
OOPONP  25 (049)
OOPOON  26 (042)
OOPOOO  27 (040)
OOPOOP  28 (041)
OOPOPN  29 (046)
OOPOPO  30 (044)
OOPOPP  31 (045)
OOPPNN  32 (05A)
OOPPNO  33 (058)
OOPPNP  34 (059)
OOPPON  35 (052)
OOPPOO  36 (050)
OOPPOP  37 (051)
OOPPPN  38 (056)
OOPPPO  39 (054)
OOPPPP  40 (055)
OPNNNN  41 (1AA)
OPNNNO  42 (1A8)
OPNNNP  43 (1A9)
OPNNON  44 (1A2)
OPNNOO  45 (1A0)
OPNNOP  46 (1A1)
OPNNPN  47 (1A6)
OPNNPO  48 (1A4)
OPNNPP  49 (1A5)
OPNONN  50 (18A)
OPNONO  51 (188)
OPNONP  52 (189)
OPNOON  53 (182)
OPNOOO  54 (180)
OPNOOP  55 (181)
OPNOPN  56 (186)
OPNOPO  57 (184)
OPNOPP  58 (185)
OPNPNN  59 (19A)
OPNPNO  60 (198)
OPNPNP  61 (199)
OPNPON  62 (192)
OPNPOO  63 (190)
OPNPOP  64 (191)
OPNPPN  65 (196)
OPNPPO  66 (194)
OPNPPP  67 (195)
OPONNN  68 (12A)
OPONNO  69 (128)
OPONNP  70 (129)
OPONON  71 (122)
OPONOO  72 (120)
OPONOP  73 (121)
OPONPN  74 (126)
OPONPO  75 (124)
OPONPP  76 (125)
OPOONN  77 (10A)
OPOONO  78 (108)
OPOONP  79 (109)
OPOOON  80 (102)
OPOOOO  81 (100)
OPOOOP  82 (101)
OPOOPN  83 (106)
OPOOPO  84 (104)
OPOOPP  85 (105)
OPOPNN  86 (11A)
OPOPNO  87 (118)
OPOPNP  88 (119)
OPOPON  89 (112)
OPOPOO  90 (110)
OPOPOP  91 (111)
OPOPPN  92 (116)
OPOPPO  93 (114)
OPOPPP  94 (115)
OPPNNN  95 (16A)
OPPNNO  96 (168)
OPPNNP  97 (169)
OPPNON  98 (162)
OPPNOO  99 (160)
А отображение всех 486 адресов, попадающих в одно 2К ПЗУ, можно посмотреть в приаттаченном файле

P.S. Текст программы, которая генерит такой файл:

Code: Select all

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
 int i,j,k;
 char top[7] = "NNNNNN";
 for(i=-364;i<=364;i++)
 {
   j = i;
   if(j < 0) j+=256;
   k = 0;
   if(top[5]=='P') k=1;
   if(top[5]=='N') k=2;
   if(top[4]=='P') k|=4;
   if(top[4]=='N') k|=8;
   if(top[3]=='P') k|=16;
   if(top[3]=='N') k|=32;
   if(top[2]=='P') k|=64;
   if(top[2]=='N') k|=128;
   if(top[1]=='P') k|=256;
   if(top[1]=='N') k|=512;
   if(top[0]=='P') k|=1024;
   if(top[0]=='N') k|=2048;
   printf(" %s  %i\t[%3.3X]\n",top,i,k);
   /* balanced ternary increment */
   if(++top[5]=='Q')
   {
    top[5] = 'N';
    if(++top[4]=='Q')
    {
     top[4] = 'N';
     if(++top[3]=='Q')
     {
       top[3] = 'N';
       if(++top[2]=='Q')
       {
         top[2] = 'N';
         if(++top[1]=='Q')
         {
           top[1] = 'N';
           if(++top[0]=='Q')
           {
             top[0] = 'N';
           }
         }
       }
     }
    }
   }
 }
 return 0;
}
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Закончил монтировать два сегмента памяти команд, думаю, что для начала мне 54 команд хватит. 33 тримукса на сегмент, соответственно, 66 на два сегмента.

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

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Круто :kruto:

У тебя начало программы с NNNNNN идёт?

Другими словами в какое адресное пространство ты хочешь подцепить эти 2 сегмента?
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Ты прекращай редактировать посты, уведомления-то не приходят! :wink:
Да, я бесхитростно начну с -364.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

haqreu wrote:Ты прекращай редактировать посты, уведомления-то не приходят! :wink:
Привычка, выработанная за почти 15 лет владения этим форумом ;)

Приаттачиваю список всех опкодов Триадора (со скипами, которые вроде бы вполне уместно смотрятся на фоне других - под вопросом только NPOOO).
Там опкод указан в троичном виде, потом в десятичном виде (со знаком) и потом в шестнадцатиричном виде (в дополнительном коде) для программирования ПЗУ в модели.
Вот выдержка про OPA - я предлагаю вместо R1=OPA(ttt,R1) сделать R2=OPA(ttt,R1), чтобы влезть в одну интсрукцию на такт (я чуть выше писал почему так):

Code: Select all

ONNNN  -40 -> D8 - OP -13 ; unary function NNN - the same as R2=-13
ONNNO  -39 -> D9 - OP -12 ; unary function NNO - the same as SHD (Shift Down)
ONNNP  -38 -> DA - OP -11 ; unary function NNP
ONNON  -37 -> DB - OP -10 ; unary function NON
ONNOO  -36 -> DC - OP -9  ; unary function NOO - the same as BLP (Block Positive = reverse diode)
ONNOP  -35 -> DD - OP -8  ; unary function NOP - the same as R2=R1
ONNPN  -34 -> DE - OP -7  ; unary function NPN
ONNPO  -33 -> DF - OP -6  ; unary function NPO
ONNPP  -32 -> E0 - OP -5  ; unary function NPP
ONONN  -31 -> E1 - OP -4  ; unary function ONN - the same as NHI
ONONO  -30 -> E2 - OP -3  ; unary function ONO
ONONP  -29 -> E3 - OP -2  ; unary function ONP
ONOON  -28 -> E4 - OP -1  ; unary function OON
ONOOO  -27 -> E5 - OP 0   ; unary function OOO - the same as R2=0
ONOOP  -26 -> E6 - OP +1  ; unary function OOP - the same as BLN (Block Negative = forward diode)
ONOPN  -25 -> E7 - OP +2  ; unary function OPN - the same as ROU (Rotate Up)
ONOPO  -24 -> E8 - OP +3  ; unary function OPO
ONOPP  -23 -> E9 - OP +4  ; unary function OPP - the same as SHU (Shift Up)
ONPNN  -22 -> EA - OP +5  ; unary function PNN - the same as NTI
ONPNO  -21 -> EB - OP +6  ; unary function PNO - the same as ROD (Rotate Down)
ONPNP  -20 -> EC - OP +7  ; unary function PNP
ONPON  -19 -> ED - OP +8  ; unary function PON - the same as R2=-R1
ONPOO  -18 -> EE - OP +9  ; unary function POO
ONPOP  -17 -> EF - OP +10 ; unary function POP
ONPPN  -16 -> F0 - OP +11 ; unary function PPN - the same as PTI
ONPPO  -15 -> F1 - OP +12 ; unary function PPO - the same as PHI
ONPPP  -14 -> F2 - OP +13 ; unary function PPP - the same as R2=+13
Из неожиданно полезного тут получается R2 = -R1 (ONPON)
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Ну я так чувствую, что триадоры будут разных вкусов. У меня все инструкции требуют трёх тактов клока (fetch-decode-execute), и, поскольку я уже весьма продвинулся в железках, то переделывать вряд ли буду.
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

haqreu wrote:Ну я так чувствую, что триадоры будут разных вкусов. У меня все инструкции требуют трёх тактов клока (fetch-decode-execute)
А зачем отдельный такт на decode? :o decode он же автоматом происходит во время execute...
iLavr
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Эх, ничего от вас не скроешь :oops:

Да, мне нужно только два такта на каждую инструкцию, но мне лень делать неоднородный счётчик, поэтому один такт я буду спать.
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

haqreu wrote:мне лень делать неоднородный счётчик, поэтому один такт я буду спать.
А вот это зря, мне кажется. Лучше не спать, а делать execute за два такта - по интервалам
времени удобнее разложится.

Хотя, может быть, Вам по месту виднее. Я ж не вижу схемы. Но обычно execute требует больше
тактов. Я лично планирую: 3 такта - fetch и 6 тактов - execute...
iLavr
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Я схемы тоже не вижу, я только в голове измысливаю. Почему мне надо два такта на инструкцию:
1 такт: скопировать данные из регистров во временный буфер (это надо выставить адрес регистра, затем дёрнуть клок для копирования)
2 такт: скопировать обработанный буфер назад в память регистров

Мне кажется, что больше тактов мне не понадобится. Но на всякий случай есть запасной. На данный момент я полностью собрал два сегмента памяти инструкций и почти полностью память регистров. В течение недели-двух соберу обработку команд копирования и инкрементов, там сделаю полную документацию.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

haqreu wrote:Ну я так чувствую, что триадоры будут разных вкусов. У меня все инструкции требуют трёх тактов клока (fetch-decode-execute), и, поскольку я уже весьма продвинулся в железках, то переделывать вряд ли буду.
А до OP ты дошёл в своём железном монстре? А то может сделать единообразно? Плюс скипы :)
haqreu wrote:Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.
Я в своей микроархитектуре 3niti alpha именно так и планировал - там правда 6 тактов получается на инструкцию (3 положительных и 3 отрицательных ибо синусоида ; ) ну и некоторые длинные инструкции могут растянутся на 3 цикла (т.е. всего 9 периодов синусоиды или 18 тактов максимум)
А в данном конкретном случае - простота залог здоровья, поэтому пытаюсь быть типа RISC :)
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

OP?
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Давайте думать над железкой (TRIADOR)

Post by Lavr »

haqreu wrote:Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.
Может не счетчик, а дешифратор будет семиразрядным? А то как-то это все плохо укладывается... :osad:
iLavr
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

haqreu wrote:OP?
Ну да - OP (универсальная унарная инструкция):

Code: Select all

ONNNN  -40 -> D8 - OP -13 ; unary function NNN - the same as R2=-13
ONNNO  -39 -> D9 - OP -12 ; unary function NNO - the same as SHD (Shift Down)
ONNNP  -38 -> DA - OP -11 ; unary function NNP
ONNON  -37 -> DB - OP -10 ; unary function NON
ONNOO  -36 -> DC - OP -9  ; unary function NOO - the same as BLP (Block Positive = reverse diode)
ONNOP  -35 -> DD - OP -8  ; unary function NOP - the same as R2=R1
ONNPN  -34 -> DE - OP -7  ; unary function NPN
ONNPO  -33 -> DF - OP -6  ; unary function NPO
ONNPP  -32 -> E0 - OP -5  ; unary function NPP
ONONN  -31 -> E1 - OP -4  ; unary function ONN - the same as NHI
ONONO  -30 -> E2 - OP -3  ; unary function ONO
ONONP  -29 -> E3 - OP -2  ; unary function ONP
ONOON  -28 -> E4 - OP -1  ; unary function OON
ONOOO  -27 -> E5 - OP 0   ; unary function OOO - the same as R2=0
ONOOP  -26 -> E6 - OP +1  ; unary function OOP - the same as BLN (Block Negative = forward diode)
ONOPN  -25 -> E7 - OP +2  ; unary function OPN - the same as ROU (Rotate Up)
ONOPO  -24 -> E8 - OP +3  ; unary function OPO
ONOPP  -23 -> E9 - OP +4  ; unary function OPP - the same as SHU (Shift Up)
ONPNN  -22 -> EA - OP +5  ; unary function PNN - the same as NTI
ONPNO  -21 -> EB - OP +6  ; unary function PNO - the same as ROD (Rotate Down)
ONPNP  -20 -> EC - OP +7  ; unary function PNP
ONPON  -19 -> ED - OP +8  ; unary function PON - the same as R2=-R1
ONPOO  -18 -> EE - OP +9  ; unary function POO
ONPOP  -17 -> EF - OP +10 ; unary function POP
ONPPN  -16 -> F0 - OP +11 ; unary function PPN - the same as PTI
ONPPO  -15 -> F1 - OP +12 ; unary function PPO - the same as PHI
ONPPP  -14 -> F2 - OP +13 ; unary function PPP - the same as R2=+13
Которая изначально планировалась над R1 (поменять все N на первый "старший" трит аргумента, поменять все O на второй "средний" трит аргумента, поменять все P на третий "младший" трит аргумента), но в моём рисковом варианте я не успеваю обратно результат в R1 засунуть и предложил результат класть в R2...
Я тут за главного - если что шлите мыло на me собака shaos точка net