|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
DDT - свободная система разработки троичного железа
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Поисследовал всё, что мною наделано в DDT - есть проблема: хоть там и присутствует элемент с памятью MEM, однако ни одной схемы с MEM я так и не нагородил, т.к. в-целом существующий DDT не рассчитан на генерацию схем с памятью (и по сути на симуляцию тоже). Если расположить два мультиплексора друг за другом и связать обратной связью, то запоминания не произойдёт, т.к. все переменные живут только в пределах одного шага. Чтобы запоминание таки произошло, каждую временную переменную (как собственно все выходы, а может и входы), надо хранить между шагами симуляции - тогда можно будет запоминать значения на обратных связях (и на обрывах, если вход отрывается). Таким образом каждый блок получает память, выделяемую из внешнего массива троичных значений - после этого необходимость в MEM на низком уровне отпадёт, т.к. его можно будет построить на двух мультиплексорах, связанных обратной связью...
|
19 Mar 2015 13:07 |
|
|
JeNNeR
Fanat
Joined: 18 Nov 2014 09:17 Posts: 52 Location: Отсюда
|
Я в SAT это лечил путём изобретения «псевдовыводов». Например, надо было сохранять состояние двух битов (1 трита) - 1. создал две дополнительные выходные и две дополнительные входные (заодно получил грабли в виде того, что нашел жесткое ограничение по количеству входных), 2. описал в километровой табличке состояний все возможные комбинации входных и выходных (соответственно табличка увеличивалась в 2^4=16 раз)... 3. а после создания схемы просто соединил входные и выходные между собой. (в Пайнте)
|
19 Mar 2015 13:18 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Перетащил существующие сырцы на GitHub, чтобы в дальнейшем развивать продукт под крылом моей карманной компании TERNARY RESEARCH CORPORATION
|
21 Mar 2015 17:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
| | | | 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; }
| | | | |
|
23 Mar 2015 19:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Подумал, что подобные изменения много чего сломают - пожалуй пока останусь в той модели, что есть, а там видно будет...
|
01 Oct 2015 14:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Потихоньку начал ковырять DDTv на предмет допиливания...
|
07 Dec 2015 16:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Чото наверное мне стоит задуматься над написанием большой статьи на Хабре, объясняющей принцип работы DDT
|
23 Nov 2017 22:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Исходники DDT перенесены на гитлаб: https://gitlab.com/ternary/ddt
|
06 Jun 2018 04:49 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Подковырял, чтобы собиралась с последней версией GIFLIB из дебияна, а то автор там сменил названия нескольких функций и кол-во аргументов в паре мест... Пока оно, как и в 2011 году, рисует только входы и выходы (но вся информация о внутренних связях уже собрана):
|
07 May 2020 20:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
хм, такое ощущение, что только вчера это написал, а ведь уже почти пять лет прошло...
|
10 May 2020 09:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22821 Location: Silicon Valley
|
Вот так надо рисовать полумультиплексоры E21 и E12 используя тот же символ полного мультиплексора (также показано как будут отображаться константы): При этом входы как бы получаются сгруппированы подряд и это совпадает с представлением любых других произвольных блоков. А вот выход получается смещён вниз, как и у полного мультиплексора - или так и сделать у всех блоков - выход на уровне третьего входа? У блоков с одним входом можно сделать выход на уровне единственного входа, а у блоков с двумя входами - на уровне второго. Соответственно блок с тремя входами MEM будет выглядеть вот так: P.S. К десятилетию DDT (которое наступит 11 июля) надо чтоли допилить визуализатор DDTv и выпустить уже версию 1.0 пакета разработки троичной электроники
|
12 May 2020 08:39 |
|
|
Who is online |
Users browsing this forum: No registered users and 5 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
|
|