nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 31 May 2020 04:40



Reply to topic  [ 27 posts ]  Go to page Previous  1, 2
DDT - свободная система разработки троичного железа 
Author Message
Admin
User avatar

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

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


19 Mar 2015 14:07
Profile WWW
Fanat
User avatar

Joined: 18 Nov 2014 10:17
Posts: 53
Location: Отсюда
Reply with quote
Я в SAT это лечил путём изобретения «псевдовыводов».
Например, надо было сохранять состояние двух битов (1 трита) -
1. создал две дополнительные выходные и две дополнительные входные (заодно получил грабли в виде того, что нашел жесткое ограничение по количеству входных),
2. описал в километровой табличке состояний все возможные комбинации входных и выходных (соответственно табличка увеличивалась в 2^4=16 раз)...
3. а после создания схемы просто соединил входные и выходные между собой. (в Пайнте) :)


Attachments:
RS_2BTriLATCH.png
RS_2BTriLATCH.png [ 9.83 KiB | Viewed 5893 times ]
19 Mar 2015 14:18
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Перетащил существующие сырцы на GitHub, чтобы в дальнейшем развивать продукт под крылом моей карманной компании TERNARY RESEARCH CORPORATION

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


21 Mar 2015 18:11
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Shaos wrote:
Поисследовал всё, что мною наделано в DDT - есть проблема: хоть там и присутствует элемент с памятью MEM, однако ни одной схемы с MEM я так и не нагородил, т.к. в-целом существующий DDT не рассчитан на генерацию схем с памятью (и по сути на симуляцию тоже). Если расположить два мультиплексора друг за другом и связать обратной связью, то запоминания не произойдёт, т.к. все переменные живут только в пределах одного шага. Чтобы запоминание таки произошло, каждую временную переменную (как собственно все выходы, а может и входы), надо хранить между шагами симуляции - тогда можно будет запоминать значения на обратных связях (и на обрывах, если вход отрывается). Таким образом каждый блок получает память, выделяемую из внешнего массива троичных значений - после этого необходимость в MEM на низком уровне отпадёт, т.к. его можно будет построить на двух мультиплексорах, связанных обратной связью...


Короче суть изменений следующая - теперь не только в ddt_mem, но и вообще во все другие функции будет передаваться индекс первой ячейки блока памяти, отведённого под данную функцию. Чтобы узнать какой индекс передавать, надо знать сколько съели все предыдущие функции - для этого в процессе симуляции (когда первым аргументом в функцию передаётся DDT_SIM) каждая функция будет возвращать не количество используемых внутри функций, а количество использованных ячеек памяти, равное количеству входов + количество выходов + количество временных переменных всех заюзанных внутри функций. Например вместо такого определения функции ddt_max:
Code:
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:
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;
}

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


23 Mar 2015 20:50
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Подумал, что подобные изменения много чего сломают - пожалуй пока останусь в той модели, что есть, а там видно будет...

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


01 Oct 2015 15:35
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Shaos wrote:
На самом деле на sourceforge лежит релиз-кандидат v0.5, причём лежит с лета 2011 - ждёт когда я допишу визуализацию DDTv...

P.S. DDTv с 2011 года умеет следующее (на примере ALU для 3niti alpha):
Code:
./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 на предмет допиливания...

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


07 Dec 2015 17:17
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Чото наверное мне стоит задуматься над написанием большой статьи на Хабре, объясняющей принцип работы DDT :question:

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


23 Nov 2017 23:50
Profile WWW
Doomed
User avatar

Joined: 21 Mar 2017 13:50
Posts: 573
Location: Spb
Reply with quote
Было бы неплохо. Да если еще с картинками :oops:


24 Nov 2017 09:35
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Исходники DDT перенесены на гитлаб:

https://gitlab.com/ternary/ddt

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


06 Jun 2018 05:49
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Shaos wrote:
Shaos wrote:
На самом деле на sourceforge лежит релиз-кандидат v0.5, причём лежит с лета 2011 - ждёт когда я допишу визуализацию DDTv...

P.S. DDTv с 2011 года умеет следующее (на примере ALU для 3niti alpha):
Code:
./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 из дебияна - а то автор там сменил названия нескольких функций и кол-во аргументов в паре мест

Пока оно, как и в 2011 году, рисует только входы и выходы (но вся информация о внутренних связях уже собрана):


Attachments:
ddt_sum.gif
ddt_sum.gif [ 896 Bytes | Viewed 226 times ]

_________________
:eugeek: https://twitter.com/Shaos1973
07 May 2020 21:24
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Shaos wrote:
Подумал, что подобные изменения много чего сломают - пожалуй пока останусь в той модели, что есть, а там видно будет...

хм, такое ощущение, что только вчера это написал, а ведь уже почти пять лет прошло...

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


10 May 2020 10:44
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 18605
Location: Silicon Valley
Reply with quote
Вот так надо рисовать полумультиплексоры E21 и E12 используя тот же символ полного мультиплексора (также показано как будут отображаться константы):

Attachment:
E21-E12.gif
E21-E12.gif [ 5.68 KiB | Viewed 230 times ]

При этом входы как бы получаются сгруппированы подряд и это совпадает с представлением любых других произвольных блоков.
А вот выход получается смещён вниз, как и у полного мультиплексора - или так и сделать у всех блоков - выход на уровне третьего входа?
У блоков с одним входом можно сделать выход на уровне единственного входа, а у блоков с двумя входами - на уровне второго.
Соответственно блок с тремя входами MEM будет выглядеть вот так:

Attachment:
MEM.gif
MEM.gif [ 2.13 KiB | Viewed 226 times ]

P.S. К десятилетию DDT (которое наступит 11 июля) надо чтоли допилить визуализатор DDTv и выпустить уже версию 1.0 пакета разработки троичной электроники :eugeek:

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


12 May 2020 09:39
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 27 posts ]  Go to page Previous  1, 2

Who is online

Users browsing this forum: Google [Bot] and 3 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:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.