Проектирование троичных элементов (4) - пробуем CMOS-ключи
Moderator: haqreu
-
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
Re: Проектирование троичных элементов - используем CMOS...
Очень интересная тема. Попробую на днях воспроизвести на макетной плате и посмотреть как будет работать.
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Возможно дешёвые CMOS-ключи серии 74HCT (быстрый CMOS с TTL входами) ведут себя аналогичным образом - как минимум те, где землю можно двигать.poisk wrote: Ясно, значит "аналог" годится.
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Поизучал вопрос - к сожалению этот фокус с 74HCT4051/2/3 не пройдёт, т.к. во-первых у них двигается не земля, а минимально возможное аналоговое напряжение, а между землёй и максимальным напряжением должно быть не более 5.5 вольт. 74HC4051/2/3 тоже не пойдут, т.к. уровень срабатывания приближен к положительному напряжению (которое хоть и может быть 10 вольт, если брать ключи производства PHILIPS/NXP), т.е. мультиплексор вида XYY не получить.Shaos wrote:
Возможно дешёвые CMOS-ключи серии 74HCT (быстрый CMOS с TTL входами) ведут себя аналогичным образом - как минимум те, где землю можно двигать.
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Вот ручная визуализация полного суматора в Logisim:

P.S. Интересно, что этот сненерённый полный сумматор по сути повторяет троичный полный сумматор из вот этой статьи 1996 года:
A.SRIVASTAVA and K.VENKATAPATHY "Design and Implementation of a Low Power Ternary Full Adder"
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.615.9736&rep=rep1&type=pdf
Code: Select all
/* Generated by DDTc v0.5
Solution is 12 x DG403
See www.ternary.info */
#include "ddt.h"
int ddt_sum(int f, DDT i1, DDT i2, DDT i3, DDT* o1, DDT* o2)
{
DDT r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14;
int f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14;
f1 = ddt_mux(f,i1,O,P,N,&r1);
if(f1 < 0) return f1;
f2 = ddt_mux(f,i1,P,N,O,&r2);
if(f2 < 0) return f2;
f3 = ddt_mux(f,i2,r1,r2,i1,&r3);
if(f3 < 0) return f3;
f4 = ddt_mux(f,i2,r2,i1,r1,&r4);
if(f4 < 0) return f4;
f5 = ddt_mux(f,i2,i1,r1,r2,&r5);
if(f5 < 0) return f5;
f6 = ddt_mux(f,i3,r3,r4,r5,&r6);
if(f6 < 0) return f6;
f7 = ddt_e21(f,i1,N,O,&r7);
if(f7 < 0) return f7;
f8 = ddt_e12(f,i1,N,O,&r8);
if(f8 < 0) return f8;
f9 = ddt_e21(f,i1,O,P,&r9);
if(f9 < 0) return f9;
f10 = ddt_e12(f,i1,O,P,&r10);
if(f10 < 0) return f10;
f11 = ddt_mux(f,i2,r7,r8,O,&r11);
if(f11 < 0) return f11;
f12 = ddt_mux(f,i2,r8,O,r9,&r12);
if(f12 < 0) return f12;
f13 = ddt_mux(f,i2,O,r9,r10,&r13);
if(f13 < 0) return f13;
f14 = ddt_mux(f,i3,r11,r12,r13,&r14);
if(f14 < 0) return f14;
if(o1) *o1 = r6;
if(o2) *o2 = r14;
return f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13+f14;
}

P.S. Интересно, что этот сненерённый полный сумматор по сути повторяет троичный полный сумматор из вот этой статьи 1996 года:
A.SRIVASTAVA and K.VENKATAPATHY "Design and Implementation of a Low Power Ternary Full Adder"
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.615.9736&rep=rep1&type=pdf
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
А вот полусумматор (или что тоже самое - схема инкремента/декремента одного трита):

Вот так можно из них вручную построить 3-тритную схему инкремента-декремента:

P.S. DDT сгенерировал более быструю схему 3-тритного инкремента-декремента где использованы 16 микросхем DG403
Code: Select all
/* Generated by DDTc v0.5
Solution is 6 x DG403
See www.ternary.info */
#include "ddt.h"
int ddt_inde1_(int f, DDT i1, DDT i2, DDT* o1, DDT* o2)
{
DDT r1,r2,r3,r4,r5,r6;
int f1,f2,f3,f4,f5,f6;
f1 = ddt_mux(f,i1,P,N,O,&r1);
if(f1 < 0) return f1;
f2 = ddt_mux(f,i1,O,P,N,&r2);
if(f2 < 0) return f2;
f3 = ddt_mux(f,i2,r1,i1,r2,&r3);
if(f3 < 0) return f3;
f4 = ddt_e12(f,i1,N,O,&r4);
if(f4 < 0) return f4;
f5 = ddt_e21(f,i1,O,P,&r5);
if(f5 < 0) return f5;
f6 = ddt_mux(f,i2,r4,O,r5,&r6);
if(f6 < 0) return f6;
if(o1) *o1 = r3;
if(o2) *o2 = r6;
return f1+f2+f3+f4+f5+f6;
}

Вот так можно из них вручную построить 3-тритную схему инкремента-декремента:

P.S. DDT сгенерировал более быструю схему 3-тритного инкремента-декремента где использованы 16 микросхем DG403
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Надумал я тут объединить MUX и MEM в единый элемент, который может уже по праву называться "универсальный троичный логический элемент", т.к. для построения ЛЮБЫХ троичных автоматов НИЧЕГО больше и не потребуется 
Суть в том, что между выходом мультиплексора и землёй ставиться конденсатор, например 0.1 мкФ - при условии, что дальше стоит другой CMOS-ключ мы имеем несколько тысяч мегаом входного сопротивления, что даст нам около часа времени сохранения напряжения на конденсаторе, если его вход будет подвешан в воздухе (например когда одна из трёх ног мультиплексора никуда не подключена и именно она выбрана - конденсатор будет хранить предыдущее значение).
В случае же эмулятора Logisim отключённое состояние можно сымитировать состоянием 11, ранее не использованным.
P.S. Попоробовал собрать в симуляторе гибрид MUX+MEM - тяжеловато получается - может тормозить и глючить...

Суть в том, что между выходом мультиплексора и землёй ставиться конденсатор, например 0.1 мкФ - при условии, что дальше стоит другой CMOS-ключ мы имеем несколько тысяч мегаом входного сопротивления, что даст нам около часа времени сохранения напряжения на конденсаторе, если его вход будет подвешан в воздухе (например когда одна из трёх ног мультиплексора никуда не подключена и именно она выбрана - конденсатор будет хранить предыдущее значение).
В случае же эмулятора Logisim отключённое состояние можно сымитировать состоянием 11, ранее не использованным.
P.S. Попоробовал собрать в симуляторе гибрид MUX+MEM - тяжеловато получается - может тормозить и глючить...
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Компоненты для сборки:Shaos wrote: Развёл сдвоенный универсальный троичный элемент TRIMUX:
Ширина короткой стороны треугольника (которых две) - 2.2 дюйма (или 56 мм), а длинной - соответственно 3.1 дюйм (или 79 мм).
P.S. Планирую начать торговать долларов за 13 (меньше к сожалению будет себе в убыток)
P.P.S. См. http://www.trimux.com
IC1,IC2: DG403 (DIP16),
C1-C4: 0.1uF (tantalum),
JP1,JP2: right-angle 5-pin headers,
JP3: right-angle 3-pin header
Коннектор JP1 (большой слева):
1) S1 - выбирает путь следования сигнала в первом мультиплексоре
2) N1 - подсоединяется к C1 если S1=N ("negative" или -5V)
3) O1 - подсоединяется к C1 если S1=O ("zero" или 0V)
4) P1 - подсоединяется к C1 если S1=P ("positive" или +5V)
5) C1 - переключаемый сигнал первого мультиплексора
Коннектор JP2 (большой по середине):
1) S2 - выбирает путь следования сигнала во втором мультиплексоре
2) N2 - подсоединяется к C2 если S2=N ("negative" или -5В)
3) O2 - подсоединяется к C2 если S2=O ("zero" или 0В)
4) P2 - подсоединяется к C2 если S2=P ("positive" или +5В)
5) C2 - переключаемый сигнал второго мультиплексора
Коннектор JP3 (маленький справа):
1) V-NEG - отрицательное питание (обычно -5В)
2) GND - заземление
3) V-POS - положительное питание (обычно +5В)
Мультиплексор на самом деле мультиплексирует аналоговые сигналы, причём в обе стороны - т.е. его также можно использовать и как демультиплексор

Ещё в декабре протестировал вышеприведённую плату на питающие напряжения -5В и +5В - пороги срабатывания получилсь -3.4В и +1.9В. А в январе придумал как на печатной плате TRIMUX собрать упрощённые троичные мультиплексоры E12 и E21 (для реализации функций XYY и XXY соответственно) - при этом на плату устанавливается только одна микросхема DG403 - либо слева (для E12), либо справа (для E21), плюс несколько перемычек. Контакты O1 и O2 в этом случае остаются незадействованы - работают только N1/N2 и P1/P2, причём для E12 порог при котором входы будут переключаться это -3.4В, а для E21 это +1.9В.
По лого нашёл, что производитель этих DG403 - "Siliconix Inc" (в настоящий момент этим брэндом владеет Vishay):

Официальный даташит тут
P.S. Начал торговать плату через BatchPCB по $13 (из них мне пойдёт меньше доллара) - пока никто не покупает

на форумах буржуйских хоббистов попробовал изложить - ноль реакции...
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
А вот тоже самое на "тримуксах":Shaos wrote: А вот полусумматор (или что тоже самое - схема инкремента/декремента одного трита):
Code: Select all
/* Generated by DDTc v0.5 Solution is 6 x DG403 See www.ternary.info */ #include "ddt.h" int ddt_inde1_(int f, DDT i1, DDT i2, DDT* o1, DDT* o2) { DDT r1,r2,r3,r4,r5,r6; int f1,f2,f3,f4,f5,f6; f1 = ddt_mux(f,i1,P,N,O,&r1); if(f1 < 0) return f1; f2 = ddt_mux(f,i1,O,P,N,&r2); if(f2 < 0) return f2; f3 = ddt_mux(f,i2,r1,i1,r2,&r3); if(f3 < 0) return f3; f4 = ddt_e12(f,i1,N,O,&r4); if(f4 < 0) return f4; f5 = ddt_e21(f,i1,O,P,&r5); if(f5 < 0) return f5; f6 = ddt_mux(f,i2,r4,O,r5,&r6); if(f6 < 0) return f6; if(o1) *o1 = r3; if(o2) *o2 = r6; return f1+f2+f3+f4+f5+f6; }
![]()

-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
есть реакция! сказали что плата кул, но надо больше примеров использования и хороший объясняющий материал про троичность нужен...Shaos wrote: начал торговать плату через BatchPCB по $13 (из них мне пойдёт меньше доллара) - пока никто не покупает
на форумах буржуйских хоббистов попробовал изложить - ноль реакции...
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Вот ещё 2 примера:Shaos wrote:


-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Как оказалось, обнаруженное мной в прошлом году окно задокументировано в даташите на DG403 от Intersil - правда лишь в виде диаграммы:Shaos wrote:Вот собственно и схема, иллюстрирующая данный подход:Shaos wrote: Помучал DG403 на макетке - у этого чипа (во всяком случае у данного производителя) выявились очень интересные "троичные" свойства! Напомню что DG403 имеет две идентичных, в каждой из которых есть два цифровых ключа - один нормально замкнут, а другой нормально разомкнут (что позволяет делать из них один переключатель). Питание V- и V+ идёт непосредственно на ключи, а питиание GND и Vl идёт исключительно на логику управления ключом. Так вот подцепив GND к V- (-4.4 В), а Vl к V+ (+4.4 В) - что есть 8.8 В от V- до V+ - и постепенно увеличивая напряжение на входе управления ключом от нуля и выше (точнее от V-), выяснилось следующее - нормально замкнутый ключ размыкается при напряжении управления около 1.4 В от GND, но нормально разомкнутый ключ замыкается только если напряжение управления достигает 3.6 В от GND (или -0.8 в пересчёте на двуполярное питание)! Т.е. между этими величинами существует окно, внутри которого ОБА ключа разомкнуты! Причём размер окна зависит от разброса напряжения управляющего логической частью - при 6 вольтах (-3.0 В ... +3.0 В) окно простирается примерно от 1.3 В до 2.5 В (т.е. верхняя граница лежит на -0.5 В в пересчёте на двуполярное питание), а при 4.4 вольтах (-2.2 В ... +2.2 В) окно расположено примерно от 1.2 В до 2.0 В (что есть верхняя граница -0.2 В в пересчёте на двуполярное питание). Как видно напрямую это использовать неудаётся, т.к. окно расположено ниже нулевой области, но мы можем сдвинуть напряжение управление вверх применив резисторный делитель напряжения на два! В этом случае окно перемещается в случае 8.8 В в область 2.8...7.2 (что в пересчёте на двуполярное питание будет составлять -1.6...+2.. Резисторный делитель можно подкорректировать под конкретный чип, чтобы середина окна приходилась точно на ноль (середину диапазона питающих напряжений). В таком случае из одной микросхемы DG403 можно собрать два инвертора или два универсальных унарных троичных элемента, применив 6 резисторов (по 2 резистора на делитель и 1 резистор на подтягивание отключенного состояния - на каждую половинку). Т.е. никаких компараторов и даже диодов НЕНУЖНО! Также делитель можно заменить на подстроечный резистор, чтобы была возможность подстраивать режим работы конкретного чипа DG403 (если местоположение окна будет отличаться у разных производителей).
Верхняя часть микросхемы подключена как универсальный троичный унарный элемент, а нижняя - тоже самое, но подключено как троичный инвертор.

как видно при напряжении между Vl и GND больше 8 вольт пороги срабатывания ключей разбегаются - я пометил наш основной вариант (-5В...+5В или в сумме 10) красной линией (а также приписал номера ключей для верхнего порога)
P.S. правда экспериментально было установлено наличие окна даже при напряжении 4.4В (-2.2...+2.2), что отчасти подтверждается аналогичной диаграммой в даташите на DG403 от Vishay:

А вот в даташите на DG403 от Maxim ничего подобного и близко нет, т.е. уже на лицо зависимость от конкретного производителя, что не есть хорошо...
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Сегодня попробовал это на макетке - оказалось, что DG403 и без конденсатора заряд держит какое-то время - положительный около 7 секунд (примерно соответствует 70 пФ, т.к. 100 пФ держит 10 секунд, 1000 пФ - 100 секунд), а отрицательный - пока всё ещё держитсяShaos wrote:
![]()

P.S. А вообще цифры хорошие - 1 мФ получается будет держать положительный заряд больше суток, осталось выяснить что за чудеса творятся с отрицательным зарядом...
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Вобщем не в отрицательности дело - оно со временем стремится не к нулю, как я надеялся поначалу, а к уровню, прицепленному ко второй слева ноге (т.е. вход N1) - в первом тесте там было -5В вот оно к нему и стремилось (от плюса), а из -5В соответственно никуда больше и не уходило. Из нуля оно также стремится к этому значению, правда занимает этот пробег несколько дольше - см.ниже (сначала цифра уход из противоположного уровня в ноль, а потом цифра выход из нуля к уровню на N1):Shaos wrote:
Сегодня попробовал это на макетке - оказалось, что DG403 и без конденсатора заряд держит какое-то время - положительный около 7 секунд (примерно соответствует 70 пФ, т.к. 100 пФ держит 10 секунд, 1000 пФ - 100 секунд), а отрицательный - пока всё ещё держится
P.S. А вообще цифры хорошие - 1 мФ получается будет держать положительный заряд больше суток, осталось выяснить что за чудеса творятся с отрицательным зарядом...
100 пФ -> 10 сек -> 2 мин 15 сек
1000 пФ -> 1 мин 36 сек -> 13 мин 15 сек
0.01 мкФ -> около 20 минут -> чуть больше 2 часов
по аналогии можно предположить, что
0.1 мкФ -> чуть больше 3 часов -> чуть больше 20 часов
1 мкФ -> чуть больше 30 часов -> чуть больше 8 дней
P.S. Попробовал без конденсатора - заряд сохраняется в ёмкости самого канала (или двух), которая судя по даташиту составляет 39 пФ:
в одну сторону -> 3 сек -> 50 сек (через один канал?)
в другую сторону -> 7 cек -> 1 мин (через два канала?)
но теперь оно не к N1 стремится, а к P1 - чудеса...
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
Сегодня получил по почте генератор, способный генерить тестовые сигналы (синусоиду, трегульный или прямогуольный) с частотой до 2.4 МГц и сразу же проверил осциллографом буфер и инвертор собранные на тримуксе по нижеприведённой схеме:

Выяснилось, что граничная частота уверенного срабатывания - 200 кГц, после которой сигнал "съезжает" (т.е. ключи физически не успевают срабатывать). Предположил, что это резисторы в 1 кОм, которые поставлены для защиты микросхем в случае ошибочной подачи разноимённых напряжений в одну и ту же точку, медленно заряжали ёмкость канала (которая 39 пФ). Убрал резисторы - граничная частота уверенной работы увеличилась до ожидаемого 1 МГц!

Как можно видеть, при 1 МГц выход отстаёт на четверть периода или примерно на 250 нс (по видимому это задержка в двух каналах DG403 подключённых последовательно).

Выяснилось, что граничная частота уверенного срабатывания - 200 кГц, после которой сигнал "съезжает" (т.е. ключи физически не успевают срабатывать). Предположил, что это резисторы в 1 кОм, которые поставлены для защиты микросхем в случае ошибочной подачи разноимённых напряжений в одну и ту же точку, медленно заряжали ёмкость канала (которая 39 пФ). Убрал резисторы - граничная частота уверенной работы увеличилась до ожидаемого 1 МГц!


Как можно видеть, при 1 МГц выход отстаёт на четверть периода или примерно на 250 нс (по видимому это задержка в двух каналах DG403 подключённых последовательно).
-
- Admin
- Posts: 24087
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Проектирование троичных элементов - используем CMOS...
По идее TRIMUX вполне может работать как MEM (правда всего несколько секунд ежели без конденсатора) - т.е. универсальный элемент уже имеется - так что наверное в логисиме придётся таки придумать такого гибрида...Shaos wrote: Надумал я тут объединить MUX и MEM в единый элемент, который может уже по праву называться "универсальный троичный логический элемент", т.к. для построения ЛЮБЫХ троичных автоматов НИЧЕГО больше и не потребуется
Суть в том, что между выходом мультиплексора и землёй ставиться конденсатор, например 0.1 мкФ - при условии, что дальше стоит другой CMOS-ключ мы имеем несколько тысяч мегаом входного сопротивления, что даст нам около часа времени сохранения напряжения на конденсаторе, если его вход будет подвешан в воздухе (например когда одна из трёх ног мультиплексора никуда не подключена и именно она выбрана - конденсатор будет хранить предыдущее значение).
В случае же эмулятора Logisim отключённое состояние можно сымитировать состоянием 11, ранее не использованным.
P.S. Попоробовал собрать в симуляторе гибрид MUX+MEM - тяжеловато получается - может тормозить и глючить...