nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 24 May 2020 17:26



Reply to topic  [ 7 posts ] 
Применение двоичной памяти в троичном компьютере 
Author Message
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Предположим, что нам надо получить большую троичную память для нашего троичного компьютера. В настоящее время нет никакого другого выхода, кроме как задействовать какую-нибудь двоичную память с параллельным доступом. Если применять простейший способ преобразования трита в биты и битов в триты - замена 1 трита на 2 бита и наоборот (двоичная комбинация 11 будет запрещённой), то существующие на сегодняшний день микросхемы памяти могут быть использованы следующим образом:

2K = 11 бит в 8 бит = 5 тритов в 4 трита (243 ячейки - КПД 9%)
8K = 13 бит в 8 бит = 6 тритов в 4 трита (729 ячеек - КПД 7%)
32K = 15 бит в 8 бит = 7 тритов в 4 трита (2187 ячеек - КПД 5%)
64K = 16 бит в 8 бит = 8 тритов в 4 трита (6561 ячейка - КПД 8%)

Теперь предположим, что у нас есть схема, которая преобразует триты адреса в биты адреса самым оптимальным образом, тогда:

2K = 11 бит в 8 бит = 6 тритов в 4 трита (729 ячеек - КПД 28%)
8K = 13 бит в 8 бит = 8 тритов в 4 трита (6561 ячейка - КПД 63%)
32K = 15 бит в 8 бит = 9 тритов в 4 трита (19683 ячейки - КПД 48%)
64K = 16 бит в 8 бит = 10 тритов в 4 трита (59049 ячеек - КПД 71%)

А теперь ещё и данные преобразуем оптимально:

2K = 11 бит в 8 бит = 6 тритов в 5 тритов (729 ячеек - КПД 35%)
8K = 13 бит в 8 бит = 8 тритов в 5 тритов (6561 ячейка - КПД 79%)
32K = 15 бит в 8 бит = 9 тритов в 5 тритов (19683 ячейки - КПД 60%)
64K = 16 бит в 8 бит = 10 тритов в 5 тритов (59049 ячеек - КПД 89%)

Как видно наибольший КПД наблюдается у 8К и 64К вариантов.

Другой вопрос, что 5-тритовой или 4-тритовой шины данных у нас не будет, а будет 3-тритовая или 6-тритовая или 9-тритовая или даже 12-тритовая, поэтому нет смысла преобразовать данные (как минимум в 3 из 4 изложенных случаях). В случае 3-тритовой шины данных - можно взять 8-битную двоичную память, в случае 6-тритовой - уже нужна 16-битная (или две 8-битных), в случае 9-тритовой - можно попробовать сжать их в 16-битную память (нужен преобразователь данных), а в случае 12-тритовой - логичнее всего взять три 8-битных памяти в параллель и общатся с ними напрямую без преобразования данных.

8К с преобразованием адреса адресуются 8 тритами. Схема на преобразование 8 тритов в 13 бит будет достаточно тяжёлой и дорогой, поэтому логичнее и проще преобразовывать адрес через двоичное ПЗУ - в идеале 16 бит в 13 бит т.е. две 64Кбайтные 8-битные микросхемы (или одна 16-битная), однако это также выглядит слегка утяжелённым решением. Вместо этого поделим адресное пространство на 2 части управляемые двумя идентичными преобразователями 4 трита в 7 бит, построенными на галках 16v8, причём седьмой бит предыдущего преобразователя будет идти на дополнительный вход следующего (у первого преобразователя этот дополнительный бит можно обнулить) - итого мы имеем два преобразователя с 9 входами и 7 выходами, что ровно покрывается галкой 16v8.

64К с преобразованием адреса адресуются 10 тритами, что требует преобразователя 20 бит в 16 бит, что теоретически можно покрыть двумя галками 22v10 с одинковыми прошивками, подключёнными так, чтобы получать 10 входов и отдавать 8. Теоретически можно обойтись одной галкой, формируя двоичный адрес ПЗУ в 2 такта - сохраняя половинки адреса на двух 8-битных регистрах (в этом случае оставшиеся 4 входа-выхода галки можно задействовать под логику управления регистрами).


28 Jul 2010 21:57
Profile WWW
Reply with quote
если вы использеуте ПЛИС для реализации проекта то там чаще всего блоки памяти идут с дополнительными битами четности что можно использовать как еще один хранимый разряд
т.о.

скажем конфигурация 1k х 32 на самом деле 1k x 36
что при упаковке 2->1 дает 18 тритов или 3 трайта - веьсма удобное слово для троичной машины

к тому же 4е состояние лучше исользовать не как запрещенную комбинацию а как NULL (и тогда лучше комбинацию 00 - считая что чаще всего память по сбросу инициализируется 0-ми) чтобы отмечать неинициализированные данные
это поможет в давльнейшем при программировании
на сегодня нет механизма защиты от обращения к неинициализированным данным что бывает приводит к трудновыявляемым ошибкам работы ПО


31 Jul 2010 23:51
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
нет - плис пока использовать не планирую


01 Aug 2010 10:06
Profile WWW
Doomed

Joined: 10 Mar 2012 17:21
Posts: 601
Location: РФ
Reply with quote
Post 
Уж что что, но именно статическая память (IMHO) пока единственное, что при применении тристабильных ячеек будет однозначно выгоднее для хранения данных по сравнению с двоичными в пересчёте на количество элементов ~ площадь кристалла / общий объём хранимой информации.
Именно выгоднее.
Так что уж правильнее будет наоборот - применение троичной статической памяти в двоичных системах.
Просто выводы ИМС вход и выход данных делать переключаемыми или прямой троичный режим или режим переконвертации "на лету" двоичный->троичный->двоичный
Если такие ИМС будут выпускаться. они единственные из всего, что на нынешнее время успели понапридумывать троичного, смогут конкурировать с чисто двоичными статическими ОЗУ и при этом создадут предпосылки для возможного развития троичных систем.
Вот как то так..


09 Nov 2012 16:43
Profile
Senior

Joined: 23 Feb 2015 16:37
Posts: 151
Location: OMS
Reply with quote
Shaos wrote:
нет - плис пока использовать не планирую

А ведь плиску можно использовать целиком как SRAM =) если память не именяет, можно найти очень дешёвый кристал без отладочной платы.


16 Mar 2015 06:35
Profile
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
вот тут https://habrahabr.ru/post/341328/ в комментариях некто с ником IBAN_II предлагает преобразовывать троичный сигнал в 2 двоичных вот таким вот образом (R1=10k R2=5.6k):


Attachments:
ternary2binary.jpeg
ternary2binary.jpeg [ 32.96 KiB | Viewed 2827 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
24 Nov 2017 21:11
Profile WWW
Online
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18573
Location: Silicon Valley
Reply with quote
Написал программку на Сях, которая генерит прошивку для ПЗУ преобразователя из 8 бит в 5 тритов (представленные как 10 битов) для Logisim:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int tab[256];

int main()
{
 int i,j,k;
 char top[6] = "NNNNN";
 FILE *f;
 for(i=0;i<256;i++) tab[i] = 0;
 for(i=-121;i<=121;i++)
 {
   j = i;
   if(j < 0) j+=256;
   k = 0;
   if(top[4]=='P') k=1;
   if(top[4]=='N') k=2;
   if(top[3]=='P') k|=4;
   if(top[3]=='N') k|=8;
   if(top[2]=='P') k|=16;
   if(top[2]=='N') k|=32;
   if(top[1]=='P') k|=64;
   if(top[1]=='N') k|=128;
   if(top[0]=='P') k|=256;
   if(top[0]=='N') k|=512;
   printf("%s %i %2.2X (%3.3X)\n",top,i,i&0xFF,k);
   tab[j] = k&0x3FF;
   /* balanced ternary increment */
   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';
           }
         }
       }
     }
   }
 }
 f = fopen("8bit5trit.rom","wt");
 if(f==NULL) return -1;
 fprintf(f,"v2.0 raw\n");
 for(i=0;i<256;i++)
 {
   fprintf(f," %X",tab[i]);
   if((i&7)==7) fprintf(f,"\n");
 }
 fprintf(f,"\n");
 fclose(f);
 return 0;
}


Вот собственно результат её работы:
Code:
v2.0 raw
 0 1 6 4 5 1A 18 19
 12 10 11 16 14 15 6A 68
 69 62 60 61 66 64 65 4A
 48 49 42 40 41 46 44 45
 5A 58 59 52 50 51 56 54
 55 1AA 1A8 1A9 1A2 1A0 1A1 1A6
 1A4 1A5 18A 188 189 182 180 181
 186 184 185 19A 198 199 192 190
 191 196 194 195 12A 128 129 122
 120 121 126 124 125 10A 108 109
 102 100 101 106 104 105 11A 118
 119 112 110 111 116 114 115 16A
 168 169 162 160 161 166 164 165
 14A 148 149 142 140 141 146 144
 145 15A 158 159 152 150 151 156
 154 155 0 0 0 0 0 0
 0 0 0 0 0 0 0 2AA
 2A8 2A9 2A2 2A0 2A1 2A6 2A4 2A5
 28A 288 289 282 280 281 286 284
 285 29A 298 299 292 290 291 296
 294 295 22A 228 229 222 220 221
 226 224 225 20A 208 209 202 200
 201 206 204 205 21A 218 219 212
 210 211 216 214 215 26A 268 269
 262 260 261 266 264 265 24A 248
 249 242 240 241 246 244 245 25A
 258 259 252 250 251 256 254 255
 AA A8 A9 A2 A0 A1 A6 A4
 A5 8A 88 89 82 80 81 86
 84 85 9A 98 99 92 90 91
 96 94 95 2A 28 29 22 20
 21 26 24 25 A 8 9 2

_________________
:eugeek: https://twitter.com/Shaos1973


25 Nov 2017 18:12
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 7 posts ] 

Who is online

Users browsing this forum: Shaos and 2 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.