DDT - свободная система разработки троичного железа

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

Moderator: haqreu

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

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Поисследовал всё, что мною наделано в DDT - есть проблема: хоть там и присутствует элемент с памятью MEM, однако ни одной схемы с MEM я так и не нагородил, т.к. в-целом существующий DDT не рассчитан на генерацию схем с памятью (и по сути на симуляцию тоже). Если расположить два мультиплексора друг за другом и связать обратной связью, то запоминания не произойдёт, т.к. все переменные живут только в пределах одного шага. Чтобы запоминание таки произошло, каждую временную переменную (как собственно все выходы, а может и входы), надо хранить между шагами симуляции - тогда можно будет запоминать значения на обратных связях (и на обрывах, если вход отрывается). Таким образом каждый блок получает память, выделяемую из внешнего массива троичных значений - после этого необходимость в MEM на низком уровне отпадёт, т.к. его можно будет построить на двух мультиплексорах, связанных обратной связью...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
JeNNeR
Fanat
Posts: 52
Joined: 18 Nov 2014 09:17
Location: Отсюда

Re: DDT - свободная система разработки троичного железа

Post by JeNNeR »

Я в SAT это лечил путём изобретения «псевдовыводов».
Например, надо было сохранять состояние двух битов (1 трита) -
1. создал две дополнительные выходные и две дополнительные входные (заодно получил грабли в виде того, что нашел жесткое ограничение по количеству входных),
2. описал в километровой табличке состояний все возможные комбинации входных и выходных (соответственно табличка увеличивалась в 2^4=16 раз)...
3. а после создания схемы просто соединил входные и выходные между собой. (в Пайнте) :)
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Перетащил существующие сырцы на GitHub, чтобы в дальнейшем развивать продукт под крылом моей карманной компании TERNARY RESEARCH CORPORATION
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Shaos wrote:Поисследовал всё, что мною наделано в DDT - есть проблема: хоть там и присутствует элемент с памятью MEM, однако ни одной схемы с MEM я так и не нагородил, т.к. в-целом существующий DDT не рассчитан на генерацию схем с памятью (и по сути на симуляцию тоже). Если расположить два мультиплексора друг за другом и связать обратной связью, то запоминания не произойдёт, т.к. все переменные живут только в пределах одного шага. Чтобы запоминание таки произошло, каждую временную переменную (как собственно все выходы, а может и входы), надо хранить между шагами симуляции - тогда можно будет запоминать значения на обратных связях (и на обрывах, если вход отрывается). Таким образом каждый блок получает память, выделяемую из внешнего массива троичных значений - после этого необходимость в MEM на низком уровне отпадёт, т.к. его можно будет построить на двух мультиплексорах, связанных обратной связью...
Короче суть изменений следующая - теперь не только в ddt_mem, но и вообще во все другие функции будет передаваться индекс первой ячейки блока памяти, отведённого под данную функцию. Чтобы узнать какой индекс передавать, надо знать сколько съели все предыдущие функции - для этого в процессе симуляции (когда первым аргументом в функцию передаётся DDT_SIM) каждая функция будет возвращать не количество используемых внутри функций, а количество использованных ячеек памяти, равное количеству входов + количество выходов + количество временных переменных всех заюзанных внутри функций. Например вместо такого определения функции ddt_max:

Code: Select all

int ddt_max(int f, DDT a, DDT b, DDT *r)
{
 DDT r1,r2;
 int f1,f2;
 if(f==DDT_MAX) return 1;
 f1 = ddt_e21(f,a,O,P,&r1);
 if(f1 < 0) return f1;
 f2 = ddt_mux(f,b,a,r1,P,&r2);
 if(f2 < 0) return f2;
 if(r) *r = r2;
 return f1 + f2;
}
будет использовано примерно такое:

Code: Select all

int ddt_max(int f, int j, DDT a, DDT b, DDT *o)
{
 int f,t,i=j;
 int r1,r2;
 if(f==DDT_MAX) return 1;
 if(f==DDT_SIM)
 {
   if(A[j]!=2) return DDT_ERROR_IDX;
   if(a!=Z) A[++j]=a;
   if(b!=Z) A[++j]=b;
 }
 t = j-1; // offset to temporary variables minus 1
 f = ddt_e21(f,j,A[i+1],O,P,&r1);
 if(f < 0) return f;
 j += f;
 if(r1!=Z) A[t+1]=r1;
 f = ddt_mux(f,j,A[i+2],A[i+1],A[t+1],P,&r2);
 if(f < 0) return f;
 j += f;
 if(r2!=Z) A[t+2]=r2;
 if(o) *o = A[t+2];
 return j-i;
}
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

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

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Shaos wrote:На самом деле на sourceforge лежит релиз-кандидат v0.5, причём лежит с лета 2011 - ждёт когда я допишу визуализацию DDTv...

P.S. DDTv с 2011 года умеет следующее (на примере ALU для 3niti alpha):

Code: Select all

./ddtv ddt_ALU.c 

DDT v0.5 (c) 2010-2011, Alexander A. Shabarshin <me@shaos.net>
DDTv converts C-source of DDT-scheme to GIF image

Reading 'ddt_ALU.c'...
65 functions found
8 input variables found
65 temporary variables found
4 output variables found
Tracing links...
313 links traced
Detecting levels...
9 levels detected (8 internal)
Level 0: 8 external inputs
Level 1: 10 functions with 36 inputs (u=3 c=26) and 10 outputs
Level 2: 12 functions with 48 inputs (u=16 c=3) and 12 outputs
Level 3: 13 functions with 40 inputs (u=15 c=0) and 13 outputs
Level 4: 10 functions with 40 inputs (u=21 c=0) and 10 outputs
Level 5: 9 functions with 28 inputs (u=11 c=0) and 9 outputs
Level 6: 7 functions with 28 inputs (u=15 c=0) and 7 outputs
Level 7: 2 functions with 8 inputs (u=7 c=0) and 2 outputs
Level 8: 2 functions with 8 inputs (u=7 c=0) and 2 outputs
Level 9: 4 external outputs
Longest function name is 3 characters
Longest input name is 2 characters
Longest output name is 2 characters
Longest temporary name is 3 characters
Initial size of the image 2032 x 760 (254 x 95 cells)
Sorting by level...
Потихоньку начал ковырять DDTv на предмет допиливания...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Чото наверное мне стоит задуматься над написанием большой статьи на Хабре, объясняющей принцип работы DDT :question:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Исходники DDT перенесены на гитлаб:

https://gitlab.com/ternary/ddt
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Shaos wrote:
Shaos wrote:На самом деле на sourceforge лежит релиз-кандидат v0.5, причём лежит с лета 2011 - ждёт когда я допишу визуализацию DDTv...

P.S. DDTv с 2011 года умеет следующее (на примере ALU для 3niti alpha):

Code: Select all

./ddtv ddt_ALU.c 

DDT v0.5 (c) 2010-2011, Alexander A. Shabarshin <me@shaos.net>
DDTv converts C-source of DDT-scheme to GIF image

Reading 'ddt_ALU.c'...
65 functions found
8 input variables found
65 temporary variables found
4 output variables found
Tracing links...
313 links traced
Detecting levels...
9 levels detected (8 internal)
Level 0: 8 external inputs
Level 1: 10 functions with 36 inputs (u=3 c=26) and 10 outputs
Level 2: 12 functions with 48 inputs (u=16 c=3) and 12 outputs
Level 3: 13 functions with 40 inputs (u=15 c=0) and 13 outputs
Level 4: 10 functions with 40 inputs (u=21 c=0) and 10 outputs
Level 5: 9 functions with 28 inputs (u=11 c=0) and 9 outputs
Level 6: 7 functions with 28 inputs (u=15 c=0) and 7 outputs
Level 7: 2 functions with 8 inputs (u=7 c=0) and 2 outputs
Level 8: 2 functions with 8 inputs (u=7 c=0) and 2 outputs
Level 9: 4 external outputs
Longest function name is 3 characters
Longest input name is 2 characters
Longest output name is 2 characters
Longest temporary name is 3 characters
Initial size of the image 2032 x 760 (254 x 95 cells)
Sorting by level...
Потихоньку начал ковырять DDTv на предмет допиливания...
Подковырял, чтобы собиралась с последней версией GIFLIB из дебияна, а то автор там сменил названия нескольких функций и кол-во аргументов в паре мест:
Screenshot from 2025-04-08 23-04-33.png
Пока оно, как и в 2011 году, рисует только входы и выходы (но вся информация о внутренних связях уже собрана):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Shaos wrote:Подумал, что подобные изменения много чего сломают - пожалуй пока останусь в той модели, что есть, а там видно будет...
хм, такое ощущение, что только вчера это написал, а ведь уже почти пять лет прошло...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: DDT - свободная система разработки троичного железа

Post by Shaos »

Вот так надо рисовать полумультиплексоры E21 и E12 используя тот же символ полного мультиплексора (также показано как будут отображаться константы):
E21-E12.gif
При этом входы как бы получаются сгруппированы подряд и это совпадает с представлением любых других произвольных блоков.
А вот выход получается смещён вниз, как и у полного мультиплексора - или так и сделать у всех блоков - выход на уровне третьего входа?
У блоков с одним входом можно сделать выход на уровне единственного входа, а у блоков с двумя входами - на уровне второго.
Соответственно блок с тремя входами MEM будет выглядеть вот так:
MEM.gif
P.S. К десятилетию DDT (которое наступит 11 июля) надо чтоли допилить визуализатор DDTv и выпустить уже версию 1.0 пакета разработки троичной электроники :eugeek:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net