Давайте думать над железкой (TRIADOR)

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

Moderator: haqreu

haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

А, нет, я её ещё не делал. В принципе, ничто не мешает класть результат в R2, просто немного больше муксов нужно будет.
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

haqreu wrote:А, нет, я её ещё не делал. В принципе, ничто не мешает класть результат в R2, просто немного больше муксов нужно будет.
Хотя при желании я могу попробовать ещё что-то между положительными и отрицательными полуволнами делать, если манипуляции с R1 выглядят полее логичными...

P.S. Чтобы тривиальные OP отличалось от присваиваний, можно при OP что-то с флагом C делать, например обнулять его - есть возражения?

P.P.S. Или даже применять к флагу C туже самую унарную операцию? Например OP NNN будет записывать в R1 -13 и во флаг C -1, OP PPP - в R1 +13 и во флаг C +1, а вот OP PON будет инвертировать и R1, и флаг C - как идея? И я попытаюсь остаться в рамках R1, т.к. копирование результата универсальной операции в другой регистр выглядит не очень естественно, т.е. теперь предлагается следующая спецификация для OP:

Code: Select all

ONNNN  -40 -> D8 - OP -13 ; tritwise unary function NNN -> R1=-13, flag C=-1
ONNNO  -39 -> D9 - OP -12 ; tritwise unary function NNO -> SHD (Shift Down)
ONNNP  -38 -> DA - OP -11 ; tritwise unary function NNP
ONNON  -37 -> DB - OP -10 ; tritwise unary function NON
ONNOO  -36 -> DC - OP -9  ; tritwise unary function NOO -> BLP (Block Positive = reverse diode)
ONNOP  -35 -> DD - OP -8  ; tritwise unary function NOP -> no operation
ONNPN  -34 -> DE - OP -7  ; tritwise unary function NPN
ONNPO  -33 -> DF - OP -6  ; tritwise unary function NPO
ONNPP  -32 -> E0 - OP -5  ; tritwise unary function NPP
ONONN  -31 -> E1 - OP -4  ; tritwise unary function ONN -> NHI
ONONO  -30 -> E2 - OP -3  ; tritwise unary function ONO
ONONP  -29 -> E3 - OP -2  ; tritwise unary function ONP
ONOON  -28 -> E4 - OP -1  ; tritwise unary function OON
ONOOO  -27 -> E5 - OP 0   ; tritwise unary function OOO -> R1=0, flag C=0
ONOOP  -26 -> E6 - OP +1  ; tritwise unary function OOP -> BLN (Block Negative = forward diode)
ONOPN  -25 -> E7 - OP +2  ; tritwise unary function OPN -> ROU (Rotate Up)
ONOPO  -24 -> E8 - OP +3  ; tritwise unary function OPO
ONOPP  -23 -> E9 - OP +4  ; tritwise unary function OPP -> SHU (Shift Up)
ONPNN  -22 -> EA - OP +5  ; tritwise unary function PNN -> NTI
ONPNO  -21 -> EB - OP +6  ; tritwise unary function PNO -> ROD (Rotate Down)
ONPNP  -20 -> EC - OP +7  ; tritwise unary function PNP
ONPON  -19 -> ED - OP +8  ; tritwise unary function PON -> R1=-R1, flag C=-C
ONPOO  -18 -> EE - OP +9  ; tritwise unary function POO
ONPOP  -17 -> EF - OP +10 ; tritwise unary function POP
ONPPN  -16 -> F0 - OP +11 ; tritwise unary function PPN -> PTI
ONPPO  -15 -> F1 - OP +12 ; tritwise unary function PPO -> PHI
ONPPP  -14 -> F2 - OP +13 ; tritwise unary function PPP -> R1=+13, flag C=+1
В этом случае OP NOP будет эквивалентно RR 0 (OOOOO - нет операции). На самом деле в будущем (если вот это всё может превратиться в микроконтроллер) программист сможет настраивать поведение флага C в случае OP - флаг может повторять функцию, применяемую к R1, может обнуляться, может устанавливаться в -1 или +1, а может вообще не трогаться - т.е. 5 вариантов поведения (ну и шестой до кучи - записать во флаг C знак результата например). Поведением по умолчанию я предлагаю сделать повторение универсальной операции над флагом, как написано в спецификации чуть выше...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Shaos wrote:Вот думаю может выходы регистров в какой-то индикатор вывести?
Например в матрицу 6x5 красно-зелёных светодиодов:

Code: Select all

 R3h  R3m  R3l  R4h  R4m  R4l
 R5h  R5m  R5l  R6h  R6m  R6l
 R7h  R7m  R7l  R8h  R8m  R8l
 R9h  R9m  R9l  R10h R10m R10l
 R11h R11m R11l R12h R12m R12l
Регистры R1,R2 и R13 исключены из индикации т.к. они чаще всего будут использоваться в процессе работы программы...

P.S. Хотя если добавить R1 и R2, то матрица уже станет 6x6, что несколько повеселее ;)
Сделал светодиодную матрицу 6x6 (на картинке справа):

Code: Select all

 R1h  R1m  R1l  R2h  R2m  R2l
 R3h  R3m  R3l  R4h  R4m  R4l
 R5h  R5m  R5l  R6h  R6m  R6l
 R7h  R7m  R7l  R8h  R8m  R8l
 R9h  R9m  R9l  R10h R10m R10l
 R11h R11m R11l R12h R12m R12l
Кроме того вроде удалось воткнуть подсчёт и сохранение OP в нулевую фазу синусоидального клока (регистр R1OP слева откуда оно потом копируется в R1), т.е. остаёмся в рамках первоначальной спецификации OP, когда результат сохраняется обратно в R1 плюс флаг C тоже сейчас подвержен воздействию OP:
Triador2017-11-26-3.jpg
Теперь у меня типа трёхфазная синхронизация :)
За один период тактирующей синусоиды имеем три клока разнесённые по фазе:

Code: Select all

     _
CLK | |_   _
        |_|
     _
CLP | |_____   
         _
CLN ____| |_   
       _   _
CLZ __| |_| |
То что CLZ тикает дважды ничему собственно не мешает (сейчас он используется только для того, чтобы сохранить результат OP в специальном регистре, а в следующей фазе оно копируется в регистр R1 обычным путём).
Потом в те же клоки у меня примешивает RESET ("трёхфазные" клоки уходят в минус при сбросе) - так что решение вполне себе троичное ;)

Текущее состояние модели для Logisim тут: http://nedopc.org/ternary/ternary_circ.zip (в настоящий момент реализовано 66% опкодов, по статистике логисима использовано 167 MUX и 64 MEM блоков).

В архив также вставлены текстовые файлы со списком команд ТРИАДОРА и помогалка для конвертации адресов для бинарного ПЗУ.
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Отлично!

Кстати, а вы знаете, что плата, несущая на себе все 13 регистров, весит 800 граммов? :o
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

haqreu wrote:Отлично!

Кстати, а вы знаете, что плата, несущая на себе все 13 регистров, весит 800 граммов? :o
Весомая железяка ;)

P.S. Детальная статистика по последней версии модели для Logisim:

MUX: 55 mux (55)
E12: 4 = 2 mux (57)
E21: 26 = 13 mux (70)
MEM: 64 = 128 mux (198)
MAX: 7 = 0 mux (заменяется на диоды)
MIN: 4 = 0 mux (заменяется на диоды)
BLN: 2 = 0 mux (заменяется на диоды)
BLP: 1 = 0 mux (заменяется на диоды)
NOT: 1 = 1 mux (199)
DMUX: 12 = 12 mux (211)
HalfAdder: 12 = 60 mux (271)
Итого: 272 DG403 (округляем до чётного числа - и это без троичной памяти программ и без jump+skip)

Если микросхемы расположить на плате вплотную друг к другу (а это 0.8x0.4 дюймов или 0.32 кв.дюйма на 1 микросхему), то одноплатная реализация займёт площадь как минимум 87 кв.дюймов или 9.3x9.3 дюйма (примерно 24x24 см) - вроде терпимо...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Я тут начал потихоньку городить онлайн ассемблер (а может ещё и симулятор) Триадора:

http://triador.net

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

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Вобщем возникла идея задействовать Триадор для создания калькулятора - для этого можно скажем 7-сегментные индикаторы (с 8-й точкой) через адаптер прицепить к выходам регистров (скажем к R5-R12). R13 по идее на чтение бессмысленнен, так что его кроме джампов можно задействовать под управление клавой - пишем туда код на проверку матрицы клавиатуры (до 6 линий) и читаем обратно чего прочитали (опять таки до 6 линий). Клава соответственно может содержать 6x6=36 кнопок. Далее - для калькулятора нужна память для временного хранения чисел (т.к. большинство регистров задействованы под отображение). Идея следующая - наше 2К ПЗУ программ покрывает области Oxxxxx и Pxxxxx, а в область Nxxxxx мы втыкаем статическое ОЗУ! В EX вставляем пару команд - записать в память и прочитать из памяти (адрес будет браться из регистров, скажем из R3 и R4). Можно будет записывать как триады, так и слова - чтобы потом на ОЗУ можно было передать управление и запустить введённую юзером программу!

P.S. Кодирование 7-сегментных индикаторов:

Code: Select all

NNN - пусто
NNO - L
NNP - H
NON - 0 с точкой
NOO - 9 с точкой
NOP - 8 с точкой
NPN - 7 с точкой
NPO - 6 с точкой
NPP - 5 с точкой
ONN - 4 с точкой
ONO - 3 с точкой
ONP - 2 с точкой
OON - 1 с точкой
OOO - 0
OOP - 1
OPN - 2
OPO - 3
OPP - 4
PNN - 5
PNO - 6
PNP - 7
PON - 8
POO - 9
POP - E 
PPN - квадрат внизу
PPO - минус
PPP - квадрат вверху
P.P.S. E нужно чтобы можно было писать числа с экспонентой - типа 1.2345E13
А вот H и L я добавил чисто от балды - чтобы можно было HELLO написать например или SHAOS :)
Ну или моделировать двоичную логику (H=Hi, L=Low) и т.д.
Можно было вместо L добавить Г например, тогда можно было бы выводить на индикаторы ЕГГОГ :mrgreen:
Но это уже слишком жирный намёк в сторону советских калькуляторов :roll:
Ошибки у нас могут выводиться скажем в виде E-003 и т.д. ;)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

По поводу EX - по идее программировать надо только OPB и их будет больше одного (например один запрограммировать как потритовый MAX, другой как потритовый MIN и т.д.) поэтому - EX 0 отведём под программирование OPB - в R1 будет код какой EX программируем (1,2,3 и т.д.), в R2,R3,R4 соответственно 9-тритовый код универсальной бинарной троичной операции. Кроме того надо добавить доступ к памяти и ALU:

NNNNN - EX -13 -> RML (read lower triad from memory [R3,R4] to R1)
NNNNO - EX -12 -> WMM (write R2,R1 to memory [R3,R4])
NNNNP - EX -11 -> RMH (read higher triad from memory [R3,R4] to R1)
NNNON - EX -10 -> RRC (rotate R1 right through C)
NNNOO - EX -9 -> SUB (C,R1=R1-R2)
NNNOP - EX -8 -> SBC (C,R1=R1-R2+C)
NNNPN - EX -7 -> RLC (rotate R1 left through C)
NNNPO - EX -6 -> ADD (C,R1=R1+R2)
NNNPP - EX -5 -> ADC (C,R1=R1+R2+С)
NNONN - EX -4 -> TSK (ternary skip on R4 sign) ??? \
NNONO - EX -3 -> TSK (ternary skip on R3 sign) ??? -} не, не нравится мне двойной скип...
NNONP - EX -2 -> TSK (ternary skip on R2 sign) ??? /
NNOON - EX -1 -> JPI (store current PC+1 to R3,R4 and jump to R13,R2)
NNOOO - EX 0 -> PEX (program OPB instances below)
NNOOP - EX +1 -> OPB №1 (R1=R1 o R2)
NNOPN - EX +2 -> OPB №2 (R1=R1 o R2)
NNOPO - EX +3 -> OPB №3 (R1=R1 o R2)
NNOPP - EX +4 -> OPB №4 (R1=R1 o R2)
...

P.S. Команда JPI может быть использована, чтобы сымитировать CALL и RET

P.P.S. Также с помощью JPI и инкремента-декремента можно изображать арифметику (т.е. без АЛУ).
Например вычитание из R1 числа от 0 до 9, хранимого в R2 с минусом (в R13 при вызове такого JPI должно лежать OOP):

Code: Select all

OOPNOO:
 RR -1 ; jump here if R2=-9
 RR -1 ; jump here if R2=-8
 RR -1 ; jump here if R2=-7
 RR -1 ; jump here if R2=-6
 RR -1 ; jump here if R2=-5
 RR -1 ; jump here if R2=-4
 RR -1 ; jump here if R2=-3
 RR -1 ; jump here if R2=-2
 RR -1 ; jump here if R2=-1
 RR +5 ; copy result from R1 to R5 (this address is OOPOOO - jump here if R2=0)
 RR -3 ; copy R3 to R1
 RR +13 ; copy R1 to R13
 RR -4 ; copy R4 to R1
 RR +2 ; copy R1 to R2
 RR -5 ; copy R5 to R1 (result)
 JPI ; return from subprogram
Сложение R1 с числом от 0 до 9, которое также должно храниться в R2 с минусом (в R13 при вызове такого JPI должно лежать OPN):

Code: Select all

OPNNOO:
 RR +1 ; jump here if R2=-9
 RR +1 ; jump here if R2=-8
 RR +1 ; jump here if R2=-7
 RR +1 ; jump here if R2=-6
 RR +1 ; jump here if R2=-5
 RR +1 ; jump here if R2=-4
 RR +1 ; jump here if R2=-3
 RR +1 ; jump here if R2=-2
 RR +1 ; jump here if R2=-1
 RR +5 ; copy result from R1 to R5 (this address is OPNOOO - jump here if R2=0)
 RR -3 ; copy R3 to R1
 RR +13 ; copy R1 to R13
 RR -4 ; copy R4 to R1
 RR +2 ; copy R1 to R2
 RR -5 ; copy R5 to R1 (result)
 JPI ; return from subprogram
С другой стороны переполнение так не проверишь - всё таки АЛУ нужен и OPB нужно, чтобы можно было отдельные триты маскировать...
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Текущее состояние дел:
Image

С небольшим фокусом на последнюю работу, семиразрядный счётчик. На макетке тактовый генератор. Младший разряд - цикл внутри инструкции (три цикла на инструкцию), затем адрес внутри сегмента, затем номер сегмента.

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

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Надо чтоли тоже все мои тримуксы спаять :)

У меня их правда не 300, а всего 60 было заказано в 2011 году, но тем не менее ;)

P.S. Я кстати полтора года назад попросил одну компанию посчитать, сколько будут стоить новые платки тримуксов со сборкой:
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

300*14.43 = 4329

Даже если посчитать мою зарплату, всё равно мне сильно дешевле обошлось... Какие-то астрономические цены. Причём за сборку я ещё могу понять, но почему печатки такие дорогие?
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

haqreu wrote:300*14.43 = 4329

Даже если посчитать мою зарплату, всё равно мне сильно дешевле обошлось... Какие-то астрономические цены. Причём за сборку я ещё могу понять, но почему печатки такие дорогие?
Ну самому паять по любому дешевле :)
Печатки дорогие т.к. компания американская - они тут все зажрались...
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Когда цена голой печатки равна стоимости труда, это очень странно выглядит :neutral:
User avatar
Shaos
Admin
Posts: 23989
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Давайте думать над железкой (TRIADOR)

Post by Shaos »

Shaos wrote:Кодирование 7-сегментных индикаторов:

Code: Select all

NNN - пусто
NNO - L
NNP - H
NON - 0 с точкой
NOO - 9 с точкой
NOP - 8 с точкой
NPN - 7 с точкой
NPO - 6 с точкой
NPP - 5 с точкой
ONN - 4 с точкой
ONO - 3 с точкой
ONP - 2 с точкой
OON - 1 с точкой
OOO - 0
OOP - 1
OPN - 2
OPO - 3
OPP - 4
PNN - 5
PNO - 6
PNP - 7
PON - 8
POO - 9
POP - E 
PPN - квадрат внизу
PPO - минус
PPP - квадрат вверху
P.P.S. E нужно чтобы можно было писать числа с экспонентой - типа 1.2345E13
А вот H и L я добавил чисто от балды - чтобы можно было HELLO написать например или SHAOS :)
Ну или моделировать двоичную логику (H=Hi, L=Low) и т.д.
Можно было вместо L добавить Г например, тогда можно было бы выводить на индикаторы ЕГГОГ :mrgreen:
Но это уже слишком жирный намёк в сторону советских калькуляторов :roll:
Ошибки у нас могут выводиться скажем в виде E-003 и т.д. ;)
С помощью DDT сделал троичный декодер такого знакогенератора :)

Входной файл sevenseg.ddt (как можно видеть тут входы троичные, а выходы - двоичные):

Code: Select all

NNN=00000000
NNO=00011100
NNP=01101110
NON=11111101
NOO=11110111
NOP=11111111
NPN=11100001
NPO=10111111
NPP=10110111
ONN=01100111
ONO=11110011
ONP=11011011
OON=01100001
OOO=11111100
OOP=01100000
OPN=11011010
OPO=11110010
OPP=01100110
PNN=10110110
PNO=10111110
PNP=11100000
PON=11111110
POO=11110110
POP=10011110
PPN=00111010
PPO=00000010
PPP=11000110
После ddtc и ddtp получилось решение на 26 DG403:

Code: Select all

DDT v0.5 (C) 2010 Alexander A. Shabarshin <me@shaos.net>
	 (C) 2015 TERNARY RESEARCH CORPORATION ( http://Ternary.info )

DDTp is input permutation utility to create optimal DDT-solution using DDTc

3 inputs detected (worst solution is 104)

OLD 2|1|0 e12=31 e21=28 DG403=30
NEW 2|0|1 e12=25 e21=28 DG403=27
NEW 1|0|2 e12=26 e21=26 DG403=26

Optimal solution has 26 chips instead of 30
Ratio optimal/worst is 25%
36 functions were used

 ddt_sevenseg_.c

Code: Select all

/* Generated by DDTc v0.5
   Solution is 26 x DG403
   See www.ternary.info */

#include "ddt.h"

int ddt_sevenseg_(int f, DDT i1, DDT i2, DDT i3, DDT* o1, DDT* o2, DDT* o3, DDT* o4, DDT* o5, DDT* o6, DDT* o7, DDT* o8)
{
 DDT r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23,r24,r25,r26,r27,r28,r29,r30,r31,r32,r33;
 int f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15,f16,f17,f18,f19,f20,f21,f22,f23,f24,f25,f26,f27,f28,f29,f30,f31,f32,f33;
 f1 = ddt_mux(f,i1,O,P,O,&r1);
 if(f1 < 0) return f1;
 f2 = ddt_e21(f,i1,P,O,&r2);
 if(f2 < 0) return f2;
 f3 = ddt_e12(f,i1,P,O,&r3);
 if(f3 < 0) return f3;
 f4 = ddt_e12(f,i2,r2,r3,&r4);
 if(f4 < 0) return f4;
 f5 = ddt_mux(f,i3,r1,r4,r3,&r5);
 if(f5 < 0) return f5;
 f6 = ddt_e12(f,i1,O,P,&r6);
 if(f6 < 0) return f6;
 f7 = ddt_e21(f,i1,O,P,&r7);
 if(f7 < 0) return f7;
 f8 = ddt_mux(f,i1,P,O,P,&r8);
 if(f8 < 0) return f8;
 f9 = ddt_e21(f,i2,r6,r2,&r9);
 if(f9 < 0) return f9;
 f10 = ddt_e12(f,i2,r7,r8,&r10);
 if(f10 < 0) return f10;
 f11 = ddt_e12(f,i2,r6,P,&r11);
 if(f11 < 0) return f11;
 f12 = ddt_mux(f,i3,r9,r10,r11,&r12);
 if(f12 < 0) return f12;
 f13 = ddt_mux(f,i2,r6,r8,r3,&r13);
 if(f13 < 0) return f13;
 f14 = ddt_mux(f,i2,r8,P,r8,&r14);
 if(f14 < 0) return f14;
 f15 = ddt_mux(f,i2,O,r3,P,&r15);
 if(f15 < 0) return f15;
 f16 = ddt_mux(f,i3,r13,r14,r15,&r16);
 if(f16 < 0) return f16;
 f17 = ddt_mux(f,i2,O,r8,r2,&r17);
 if(f17 < 0) return f17;
 f18 = ddt_mux(f,i2,r8,r1,r8,&r18);
 if(f18 < 0) return f18;
 f19 = ddt_mux(f,i2,r6,r3,O,&r19);
 if(f19 < 0) return f19;
 f20 = ddt_mux(f,i3,r17,r18,r19,&r20);
 if(f20 < 0) return f20;
 f21 = ddt_mux(f,i2,r7,P,r1,&r21);
 if(f21 < 0) return f21;
 f22 = ddt_mux(f,i2,r6,r2,r3,&r22);
 if(f22 < 0) return f22;
 f23 = ddt_mux(f,i3,r21,r14,r22,&r23);
 if(f23 < 0) return f23;
 f24 = ddt_e21(f,i2,r6,r8,&r24);
 if(f24 < 0) return f24;
 f25 = ddt_e21(f,i2,P,r2,&r25);
 if(f25 < 0) return f25;
 f26 = ddt_e12(f,i2,r8,r2,&r26);
 if(f26 < 0) return f26;
 f27 = ddt_mux(f,i3,r24,r25,r26,&r27);
 if(f27 < 0) return f27;
 f28 = ddt_e21(f,i2,r1,P,&r28);
 if(f28 < 0) return f28;
 f29 = ddt_mux(f,i2,r2,r1,r6,&r29);
 if(f29 < 0) return f29;
 f30 = ddt_mux(f,i3,r28,r25,r29,&r30);
 if(f30 < 0) return f30;
 f31 = ddt_e12(f,i2,r7,r6,&r31);
 if(f31 < 0) return f31;
 f32 = ddt_e21(f,i2,r2,r8,&r32);
 if(f32 < 0) return f32;
 f33 = ddt_mux(f,i3,r31,r14,r32,&r33);
 if(f33 < 0) return f33;
 if(o1) *o1 = r5;
 if(o2) *o2 = r12;
 if(o3) *o3 = r16;
 if(o4) *o4 = r20;
 if(o5) *o5 = r23;
 if(o6) *o6 = r27;
 if(o7) *o7 = r30;
 if(o8) *o8 = r33;
 return f1+f2+f3+f4+f5+f6+f7+f8+f9+f10+f11+f12+f13+f14+f15+f16+f17+f18+f19+f20+f21+f22+f23+f24+f25+f26+f27+f28+f29+f30+f31+f32+f33;
}

Вот результат вручную преобразованный в Logisim (выходы двоичные, поэтому там двух-проводная симуляция троичности ненужна):
triada7seg2.png
А вот красочная шпаргалка :)

Image

Приготовлено в последней версии ternary.circ для Logisim:
http://nedopc.org/ternary/ternary_circ.zip
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
haqreu
Maniac
Posts: 318
Joined: 10 Mar 2017 05:30

Re: Давайте думать над железкой (TRIADOR)

Post by haqreu »

Дяденьки, вы с матчастью существенно лучше меня знакомы. Нарушает ли триадор чьи-нибудь права и патенты?