DDT - свободная система разработки троичного железа
Moderator: haqreu
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Поисследовал всё, что мною наделано в DDT - есть проблема: хоть там и присутствует элемент с памятью MEM, однако ни одной схемы с MEM я так и не нагородил, т.к. в-целом существующий DDT не рассчитан на генерацию схем с памятью (и по сути на симуляцию тоже). Если расположить два мультиплексора друг за другом и связать обратной связью, то запоминания не произойдёт, т.к. все переменные живут только в пределах одного шага. Чтобы запоминание таки произошло, каждую временную переменную (как собственно все выходы, а может и входы), надо хранить между шагами симуляции - тогда можно будет запоминать значения на обратных связях (и на обрывах, если вход отрывается). Таким образом каждый блок получает память, выделяемую из внешнего массива троичных значений - после этого необходимость в MEM на низком уровне отпадёт, т.к. его можно будет построить на двух мультиплексорах, связанных обратной связью...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Fanat
- Posts: 52
- Joined: 18 Nov 2014 09:17
- Location: Отсюда
Re: DDT - свободная система разработки троичного железа
Я в SAT это лечил путём изобретения «псевдовыводов».
Например, надо было сохранять состояние двух битов (1 трита) -
1. создал две дополнительные выходные и две дополнительные входные (заодно получил грабли в виде того, что нашел жесткое ограничение по количеству входных),
2. описал в километровой табличке состояний все возможные комбинации входных и выходных (соответственно табличка увеличивалась в 2^4=16 раз)...
3. а после создания схемы просто соединил входные и выходные между собой. (в Пайнте)
Например, надо было сохранять состояние двух битов (1 трита) -
1. создал две дополнительные выходные и две дополнительные входные (заодно получил грабли в виде того, что нашел жесткое ограничение по количеству входных),
2. описал в километровой табличке состояний все возможные комбинации входных и выходных (соответственно табличка увеличивалась в 2^4=16 раз)...
3. а после создания схемы просто соединил входные и выходные между собой. (в Пайнте)

You do not have the required permissions to view the files attached to this post.
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Перетащил существующие сырцы на GitHub, чтобы в дальнейшем развивать продукт под крылом моей карманной компании TERNARY RESEARCH CORPORATION
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Короче суть изменений следующая - теперь не только в ddt_mem, но и вообще во все другие функции будет передаваться индекс первой ячейки блока памяти, отведённого под данную функцию. Чтобы узнать какой индекс передавать, надо знать сколько съели все предыдущие функции - для этого в процессе симуляции (когда первым аргументом в функцию передаётся DDT_SIM) каждая функция будет возвращать не количество используемых внутри функций, а количество использованных ячеек памяти, равное количеству входов + количество выходов + количество временных переменных всех заюзанных внутри функций. Например вместо такого определения функции ddt_max:Shaos wrote:Поисследовал всё, что мною наделано в DDT - есть проблема: хоть там и присутствует элемент с памятью MEM, однако ни одной схемы с MEM я так и не нагородил, т.к. в-целом существующий DDT не рассчитан на генерацию схем с памятью (и по сути на симуляцию тоже). Если расположить два мультиплексора друг за другом и связать обратной связью, то запоминания не произойдёт, т.к. все переменные живут только в пределах одного шага. Чтобы запоминание таки произошло, каждую временную переменную (как собственно все выходы, а может и входы), надо хранить между шагами симуляции - тогда можно будет запоминать значения на обратных связях (и на обрывах, если вход отрывается). Таким образом каждый блок получает память, выделяемую из внешнего массива троичных значений - после этого необходимость в MEM на низком уровне отпадёт, т.к. его можно будет построить на двух мультиплексорах, связанных обратной связью...
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
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Подумал, что подобные изменения много чего сломают - пожалуй пока останусь в той модели, что есть, а там видно будет...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Потихоньку начал ковырять DDTv на предмет допиливания...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...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Чото наверное мне стоит задуматься над написанием большой статьи на Хабре, объясняющей принцип работы DDT 

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Подковырял, чтобы собиралась с последней версией GIFLIB из дебияна, а то автор там сменил названия нескольких функций и кол-во аргументов в паре мест:Shaos wrote:Потихоньку начал ковырять DDTv на предмет допиливания...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...
Пока оно, как и в 2011 году, рисует только входы и выходы (но вся информация о внутренних связях уже собрана):
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
хм, такое ощущение, что только вчера это написал, а ведь уже почти пять лет прошло...Shaos wrote:Подумал, что подобные изменения много чего сломают - пожалуй пока останусь в той модели, что есть, а там видно будет...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: DDT - свободная система разработки троичного железа
Вот так надо рисовать полумультиплексоры E21 и E12 используя тот же символ полного мультиплексора (также показано как будут отображаться константы):
При этом входы как бы получаются сгруппированы подряд и это совпадает с представлением любых других произвольных блоков.
А вот выход получается смещён вниз, как и у полного мультиплексора - или так и сделать у всех блоков - выход на уровне третьего входа?
У блоков с одним входом можно сделать выход на уровне единственного входа, а у блоков с двумя входами - на уровне второго.
Соответственно блок с тремя входами MEM будет выглядеть вот так:
P.S. К десятилетию DDT (которое наступит 11 июля) надо чтоли допилить визуализатор DDTv и выпустить уже версию 1.0 пакета разработки троичной электроники
При этом входы как бы получаются сгруппированы подряд и это совпадает с представлением любых других произвольных блоков.
А вот выход получается смещён вниз, как и у полного мультиплексора - или так и сделать у всех блоков - выход на уровне третьего входа?
У блоков с одним входом можно сделать выход на уровне единственного входа, а у блоков с двумя входами - на уровне второго.
Соответственно блок с тремя входами MEM будет выглядеть вот так:
P.S. К десятилетию DDT (которое наступит 11 июля) надо чтоли допилить визуализатор DDTv и выпустить уже версию 1.0 пакета разработки троичной электроники

You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net