A 2 1 0 2 1 0 2 1 0 2 1 0 2 1 0 2 1 0 трит A (первое слагаемое)
B 2 2 2 1 1 1 0 0 0 2 2 2 1 1 1 0 0 0 трит B (второе слагаемое)
C 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 бит Cin (перенос из предыдущего разряда)
---------------------------------------------
S 2 1 0 1 0 2 0 2 1 1 0 2 0 2 1 2 1 0 = F2TN1B2101020211020212103 = F2TN1B30731891210, трит суммы по модулю 3
C 1 1 1 1 1 0 1 0 0 1 1 0 1 0 0 0 0 0 = F2TN1B1111101001101000003 = F2TN1B19309921610, бит переноса в следующий разряд Cout.
По вышеприведённой таблице была написана программа инициализации и проверки табличного полного троичного несимметричного одноразрядного (однотритного) сумматора на Turbo Basic'е, скриншот выполнения которой приведён ниже: Первая строка на скриншоте - проверочный вывод введённых символов значений суммы по модулю 3 (S).
Вторая строка на скриншоте - проверочный вывод введённых символов значений бита переноса (Cout).
В третьей строке на скриншоте - двухзначные (двухтритные) строки результатов последовательного сложения всех 18-ти входных комтринаций. В двухзначной (двухтритной) строке результата старший значащий разряд - знак (символ) бита переноса в следующий разряд Cout, а младший значащий разряд - знак (символ) трита суммы по модулю 3 (S).
В троичном контроллере или в троичной эвм результат суммирования вместо символьных переменных можно было бы записать прямо в троичном виде в троичные регистры процессора и в троичные ячейки памяти, а в двоичных контроллерах и в двоичных эвм пока только в символьные переменные, так как в битах третьего значения нет.
При инициализации сумматора символы тритов суммы по модулю 3 (S) и символы битов переноса (Cout) из двух строк длиной по 18-ть тритов переписываются в два трёхмерных 18-ти элементных массива символов F2TN1B307318912$(2,2,1) и F2TN1B193099216$(2,2,1), которые и являются табличным сумматором.
В табличном сумматоре для определения результатов суммирования никаких логических вычислений не производится. Значения результатов вычисляются только один раз заранее и знаки (символы) заранее вычисленных числовых значений записываются в 3-х мерные 18-ти элементные массивы F2TN1B307318912$(2,2,1) и F2TN1B193099216$(2,2,1). Для определения суммы в ходе выполнения программы числовые значения двух входных тритов и бита переноса записываются в указатели элементов массивов и результат суммирования просто считывается из трёхмерных массивов F2TN1B307318912$(2,2,1) и F2TN1B193099216$(2,2,1).
Например, если нужно определить сумму двух тритов A%=2, B%=1 и бита переноса Cin%=0, то сумма по модулю 3 просто считывается из массива строкой S$=F2TN1B307318912$(2,1,0), а бит переноса просто считывается из массива строкой С$=F2TN1B193099216$(2,1,0).
Так как в табличных сумматорах никаких логических вычислений не производится, то они работают быстрее, чем сумматоры с логическими вычислениями результатов.
В четвёртой строке на скриншоте выводится суммарное время выполнения всех 18-ти проверочных суммирований посчитанных микротаймером MTIMER в микросекундах.
Code: Select all
'ternary asymmetric adder in symbol system (0,1,2), integer unsined (positiv) 1 trit
CLS
COLOR 10,0
'adder initialisation
dim F2TN1B307318912$(2,2,1),F2TN1B193099216$(2,2,1)
F2TN1B307318912$="210102021102021210"
F2TN1B193099216$="111110100110100000"
for k%=0 to 1
for j%=0 to 2
for i%=0 to 2
n%=i%+j%*3+k%*9
F2TN1B307318912$(i%,j%,k%)=MID$(F2TN1B307318912$,18-n%,1)
F2TN1B193099216$(i%,j%,k%)=MID$(F2TN1B193099216$,18-n%,1)
next i%
next j%
next k%
'PRINT
'input numbers
A%=2
B%=2
PRINT A%
PRINT B%
PRINT"--"
C%=0
MTIMER
'adding
S$=F2TN1B307318912$(A%,B%,C%)
C$=F2TN1B193099216$(A%,B%,C%)
ElapsedTime% = MTIMER
PRINT C$;S$
PRINT
PRINT "MTIMER =";ElapsedTime%;"microseconds,";
FPOPS=1000000/ElapsedTime%
PRINT USING "####### FPOPS";FPOPS
END
Следует так же отметить, что подобным образом могут быть выполнены все нульарные, унарные, бинарные, тринарные и более арные двоичные, троичные, четверичные и более ичные логические функции.