nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 14:12



Reply to topic  [ 410 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15, 16, 17 ... 28  Next
Давайте думать над железкой (TRIADOR) 
Author Message
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
А, нет, я её ещё не делал. В принципе, ничто не мешает класть результат в R2, просто немного больше муксов нужно будет.


26 Nov 2017 15:59
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
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:
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 знак результата например). Поведением по умолчанию я предлагаю сделать повторение универсальной операции над флагом, как написано в спецификации чуть выше...

_________________
:dj: https://mastodon.social/@Shaos


26 Nov 2017 17:05
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Вот думаю может выходы регистров в какой-то индикатор вывести?
Например в матрицу 6x5 красно-зелёных светодиодов:
Code:
 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:
 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:

Attachment:
Triador2017-11-26-3.jpg
Triador2017-11-26-3.jpg [ 293.97 KiB | Viewed 6314 times ]


Теперь у меня типа трёхфазная синхронизация :)
За один период тактирующей синусоиды имеем три клока разнесённые по фазе:
Code:
     _
CLK | |_   _
        |_|
     _
CLP | |_____   
         _
CLN ____| |_   
       _   _
CLZ __| |_| |

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

Текущее состояние модели для Logisim тут: http://nedopc.org/ternary/ternary_circ.zip (в настоящий момент реализовано 66% опкодов, по статистике логисима использовано 167 MUX и 64 MEM блоков).
В архив также вставлены текстовые файлы со списком команд ТРИАДОРА и помогалка для конвертации адресов для бинарного ПЗУ.

_________________
:dj: https://mastodon.social/@Shaos


26 Nov 2017 19:27
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Отлично!

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


26 Nov 2017 23:21
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
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 см) - вроде терпимо...

_________________
:dj: https://mastodon.social/@Shaos


26 Nov 2017 23:37
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Я тут начал потихоньку городить онлайн ассемблер (а может ещё и симулятор) Триадора:

http://triador.info

Там пока заглушка...

_________________
:dj: https://mastodon.social/@Shaos


27 Nov 2017 00:13
Profile WWW
Admin
User avatar

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

P.S. Кодирование 7-сегментных индикаторов:
Code:
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 и т.д. ;)

_________________
:dj: https://mastodon.social/@Shaos


27 Nov 2017 18:40
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
По поводу 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:
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:
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 нужно, чтобы можно было отдельные триты маскировать...

_________________
:dj: https://mastodon.social/@Shaos


27 Nov 2017 19:29
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Текущее состояние дел:
Image

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

Image


29 Nov 2017 02:39
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Надо чтоли тоже все мои тримуксы спаять :)

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

P.S. Я кстати полтора года назад попросил одну компанию посчитать, сколько будут стоить новые платки тримуксов со сборкой:


Attachments:
pnc-quote.gif
pnc-quote.gif [ 48.66 KiB | Viewed 6739 times ]

_________________
:dj: https://mastodon.social/@Shaos
29 Nov 2017 03:24
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
300*14.43 = 4329

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


29 Nov 2017 03:58
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
haqreu wrote:
300*14.43 = 4329

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

Ну самому паять по любому дешевле :)
Печатки дорогие т.к. компания американская - они тут все зажрались...

_________________
:dj: https://mastodon.social/@Shaos


29 Nov 2017 04:04
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Когда цена голой печатки равна стоимости труда, это очень странно выглядит :neutral:


29 Nov 2017 04:09
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Shaos wrote:
Кодирование 7-сегментных индикаторов:
Code:
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:
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:
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:
/* 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 (выходы двоичные, поэтому там двух-проводная симуляция троичности ненужна):

Attachment:
triada7seg2.png
triada7seg2.png [ 24.39 KiB | Viewed 6729 times ]


А вот красочная шпаргалка :)

Image

Приготовлено в последней версии ternary.circ для Logisim:
http://nedopc.org/ternary/ternary_circ.zip

_________________
:dj: https://mastodon.social/@Shaos


29 Nov 2017 07:39
Profile WWW
Maniac

Joined: 10 Mar 2017 05:30
Posts: 318
Reply with quote
Дяденьки, вы с матчастью существенно лучше меня знакомы. Нарушает ли триадор чьи-нибудь права и патенты?


29 Nov 2017 12:55
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 410 posts ]  Go to page Previous  1 ... 11, 12, 13, 14, 15, 16, 17 ... 28  Next

Who is online

Users browsing this forum: No registered users and 15 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.