nedoPC.org

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



Reply to topic  [ 410 posts ]  Go to page Previous  1 ... 10, 11, 12, 13, 14, 15, 16 ... 28  Next
Давайте думать над железкой (TRIADOR) 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Shaos wrote:
На самом деле часть отрицательной области троичной памяти таки попадает в эти 2K (не попадает только треть троичного адресного пространства):
Nxxxxx - не попадает (от -364 до -122)
Oxxxxx - попадает (от -121 до +121)
Pxxxxx - попадает (от +122 до +364)
т.е. у нас в 2K ПЗУ будет не 365 пятитритных слов, как я написал чуть выше, а целых 486 (или 23.7% от всего объёма 2К)! :mrgreen:


В случае ручного программирования ПЗУ 2К в логисимовкой модели - вот первые 100 троичных адресов, которые отображаются на начало двоичной памяти следующим образом (в скобках шестнадцатиричный адрес ячейки в ПЗУ):
Code:
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:
#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;
}


Attachments:
Triador2K.txt [8.92 KiB]
Downloaded 729 times

_________________
:dj: https://mastodon.social/@Shaos
26 Nov 2017 13:06
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Закончил монтировать два сегмента памяти команд, думаю, что для начала мне 54 команд хватит. 33 тримукса на сегмент, соответственно, 66 на два сегмента.

Image


26 Nov 2017 13:17
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Круто :kruto:

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

Другими словами в какое адресное пространство ты хочешь подцепить эти 2 сегмента?

_________________
:dj: https://mastodon.social/@Shaos


26 Nov 2017 13:28
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Ты прекращай редактировать посты, уведомления-то не приходят! :wink:
Да, я бесхитростно начну с -364.


26 Nov 2017 14:00
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
haqreu wrote:
Ты прекращай редактировать посты, уведомления-то не приходят! :wink:

Привычка, выработанная за почти 15 лет владения этим форумом ;)

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

_________________
:dj: https://mastodon.social/@Shaos


26 Nov 2017 15:02
Profile WWW
Maniac

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


26 Nov 2017 15:07
Profile
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.


26 Nov 2017 15:11
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
haqreu wrote:
Ну я так чувствую, что триадоры будут разных вкусов. У меня все инструкции требуют трёх тактов клока (fetch-decode-execute)

А зачем отдельный такт на decode? :o decode он же автоматом происходит во время execute...

_________________
iLavr


26 Nov 2017 15:12
Profile
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Эх, ничего от вас не скроешь :oops:

Да, мне нужно только два такта на каждую инструкцию, но мне лень делать неоднородный счётчик, поэтому один такт я буду спать.


26 Nov 2017 15:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
haqreu wrote:
мне лень делать неоднородный счётчик, поэтому один такт я буду спать.

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

Хотя, может быть, Вам по месту виднее. Я ж не вижу схемы. Но обычно execute требует больше
тактов. Я лично планирую: 3 такта - fetch и 6 тактов - execute...

_________________
iLavr


26 Nov 2017 15:22
Profile
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Я схемы тоже не вижу, я только в голове измысливаю. Почему мне надо два такта на инструкцию:
1 такт: скопировать данные из регистров во временный буфер (это надо выставить адрес регистра, затем дёрнуть клок для копирования)
2 такт: скопировать обработанный буфер назад в память регистров

Мне кажется, что больше тактов мне не понадобится. Но на всякий случай есть запасной. На данный момент я полностью собрал два сегмента памяти инструкций и почти полностью память регистров. В течение недели-двух соберу обработку команд копирования и инкрементов, там сделаю полную документацию.


26 Nov 2017 15:28
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
haqreu wrote:
Ну я так чувствую, что триадоры будут разных вкусов. У меня все инструкции требуют трёх тактов клока (fetch-decode-execute), и, поскольку я уже весьма продвинулся в железках, то переделывать вряд ли буду.

А до OP ты дошёл в своём железном монстре? А то может сделать единообразно? Плюс скипы :)

haqreu wrote:
Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.

Я в своей микроархитектуре 3niti alpha именно так и планировал - там правда 6 тактов получается на инструкцию (3 положительных и 3 отрицательных ибо синусоида ; ) ну и некоторые длинные инструкции могут растянутся на 3 цикла (т.е. всего 9 периодов синусоиды или 18 тактов максимум)
А в данном конкретном случае - простота залог здоровья, поэтому пытаюсь быть типа RISC :)

_________________
:dj: https://mastodon.social/@Shaos


26 Nov 2017 15:42
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
OP?


26 Nov 2017 15:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
haqreu wrote:
Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.

Может не счетчик, а дешифратор будет семиразрядным? А то как-то это все плохо укладывается... :osad:

_________________
iLavr


26 Nov 2017 15:44
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
haqreu wrote:
OP?

Ну да - OP (универсальная унарная инструкция):
Code:
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...

_________________
:dj: https://mastodon.social/@Shaos


26 Nov 2017 15:48
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 410 posts ]  Go to page Previous  1 ... 10, 11, 12, 13, 14, 15, 16 ... 28  Next

Who is online

Users browsing this forum: No registered users and 10 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.