Микросхема троичного микроконтроллера Triador-3000

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

Moderator: haqreu

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

Re: Микросхема троичного микроконтроллера Triador-3000

Post by Shaos »

Универсальная потритовая операция OP в данной реализации воздействует не только на триты регистра R1, но и на флаг C - я это придумал ещё в ноябре 2017 года, когда городил эту реализацию в LogiSim: viewtopic.php?p=141196#p141196

Надо подумать как следует так ли это нужно на самом деле, а то например в эмуляторе haqreu флаг C в случае OP вообще не трогается:

Code: Select all

        case -1: { // OP: unary tritwise operation
                     int ttt_mem[3] = {0,0,0};
                     int ttt_arg[3] = {0,0,0};
                     int ttt_res[3] = {0,0,0};
                     binary_to_ternary(R[0], ttt_mem);
                     binary_to_ternary(arg,  ttt_arg);
                     for (int i=0; i<3; i++)
                         ttt_res[i] = ttt_arg[1-ttt_mem[i]];
                     R[0] = ttt_res[0] + 3*ttt_res[1] + 9*ttt_res[2];
                 } break;
Возможно я хотел иметь возможность записывать какое-то конкретное значение во флаг C командами OP NNN, OP OOO и OP PPP, но после реализации полноценного набора EX с блоком PMT у меня там уже будет команда обнуления флага C и вся эта алхимия с побочными эффектами уже будет ненужна...

P.S. С другой стороны в этой моей схеме флаг C таки никогда не устанавливается после команды OP, хоть и считается (т.к. в оно в противофазе), но похоже оно обнуляется, что тоже неправильно - видимо надо будет исправить так, чтобы флаг C в случае потритовых операций не менялся...

P.P.S. Не - у меня чото совсем с флагом C накосячено - например он почему-то обнулился после выполнения команды RR +8 (OO PON), что значит копирование из регистра R8 (которого пока нету) в регистр R1...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Микросхема троичного микроконтроллера Triador-3000

Post by Shaos »

Нашёл ошибку, которая всегда была в логисимовской модели - я в логике флага C не учитывал значение com2 (средний трит кода операции), поэтому флаг C от R1-1 всегда копировался в командах OOxON и от R1+1 - в командах OOxOP, куда кроме RR -1 и RR +1 подпадали RR -8, RR -11 и RR +8, RR +11 сооответственно. И всю логику копирования знака после OP по-видимому надо убрать совсем, чтобы соответствовало эмулятору...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Микросхема троичного микроконтроллера Triador-3000

Post by Shaos »

Вроде исправл:
ternary_Triador1flagC_2025_04_13.jpg
(задно выкинув несколько муксов и мем ответственный за сохранение флага C при потритовых операциях)

Сейчас flagC сохраняется на своём блоке MEM и далее нигде не используется т.к. операции условных skip-ов я ещё не поддержал...

P.S. Нашёл ещё одну ошибку при переносе на VHDL - не тот сигнал подцепился в схему инкремента...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Микросхема троичного микроконтроллера Triador-3000

Post by Shaos »

Вот исправленная версия:
ternary_Triador1_2025_04_13.jpg
Теперь вроде всё работает:
Screenshot from 2025-04-13 22-30-18.png
(полноразмерная схема и осциллограммы есть в архиве)
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Микросхема троичного микроконтроллера Triador-3000

Post by Shaos »

Shaos wrote: 08 Apr 2025 21:49 Текст VHDL получается абсолютно нечитаемый т.к. по сути это нетлист:

Code: Select all

...
clk1: Ternary_Clock port map( B_C => tmp_clk, T_C => ss );
-- BLN
pclk(0) <= ss(0);
pclk(1) <= '0';
-- BLP
nclk(0) <= '0';
nclk(1) <= ss(1);
mux1: ternary_mux port map( T_S => clr, T_N => N, T_O => pclk, T_P => pclk, T_C => pclk1 );
-- BLN2
pclk0(0) <= pclk1(0);
pclk0(1) <= '0';
mux2: ternary_mux port map( T_S => clr, T_N => P, T_O => nclk, T_P => nclk, T_C => nclk1 );
mem1: ternary_mem port map( T_S => pclk1, T_N => O, T_P => ss0, T_Q => m1 );
ha1: Half_Adder port map( a => P, b => m1, s => h1, c => g1 );
mem2: ternary_mem port map( T_S => nclk1, T_N => h1, T_P => O, T_Q => ss0 );
mem3: ternary_mem port map( T_S => pclk1, T_N => O, T_P => ss1, T_Q => m2 );
ha2: Half_Adder port map( a => g1, b => m2, s => h2, c => g2 );
mem4: ternary_mem port map( T_S => nclk1, T_N => h2, T_P => O, T_Q => ss1 );
mem5: ternary_mem port map( T_S => pclk1, T_N => O, T_P => ss2, T_Q => m3 );
ha3: Half_Adder port map( a => g2, b => m3, s => h3, c => g3 );
mem6: ternary_mem port map( T_S => nclk1, T_N => h3, T_P => O, T_Q => ss2 );
mem7: ternary_mem port map( T_S => pclk1, T_N => O, T_P => ss3, T_Q => m4 );
ha4: Half_Adder port map( a => g3, b => m4, s => h4, c => g4 );
mem8: ternary_mem port map( T_S => nclk1, T_N => h4, T_P => O, T_Q => ss3 );
mem9: ternary_mem port map( T_S => pclk1, T_N => O, T_P => ss4, T_Q => m5 );
ha5: Half_Adder port map( a => g4, b => m5, s => h5, c => g5 );
mem10: ternary_mem port map( T_S => nclk1, T_N => h5, T_P => O, T_Q => ss4 );
mem11: ternary_mem port map( T_S => pclk1, T_N => O, T_P => ss5, T_Q => m6 );
ha6: Half_Adder port map( a => g5, b => m6, s => h6, c => g6 );
mem12: ternary_mem port map( T_S => nclk1, T_N => h6, T_P => O, T_Q => ss5 );
dmux1: ternary_dmux port map( T_S => com4, T_C => pclk0, T_N => dm1, T_O => dm2, T_P => dm3 );
dmux2: ternary_dmux port map( T_S => com3, T_C => dm1, T_N => dNN, T_O => dNO, T_P => dNP );
dmux3: ternary_dmux port map( T_S => com3, T_C => dm2, T_N => dON, T_O => dOO, T_P => dOP );
dmux4: ternary_dmux port map( T_S => com3, T_C => dm3, T_N => dPN, T_O => dPO, T_P => dPP );
mux3: ternary_mux port map( T_S => asign, T_N => dOO, T_O => O, T_P => O, T_C => mu3 );
dmux5: ternary_dmux port map( T_S => ic2, T_C => mu3, T_O => dm0, T_P => dm00 );
dmux6: ternary_dmux port map( T_S => ic1, T_C => dm0, T_O => dm4, T_P => dm5 );
dmux7: ternary_dmux port map( T_S => ic1, T_C => dm00, T_N => dm6, T_O => dm7, T_P => dm8 );
dmux8: ternary_dmux port map( T_S => ic0, T_C => dm4, T_P => wr1 );
dmux9: ternary_dmux port map( T_S => ic0, T_C => dm5, T_N => wr2, T_O => wr3, T_P => wr4 );
dmux10: ternary_dmux port map( T_S => ic0, T_C => dm6, T_N => wr5, T_O => wr6, T_P => wr7 );
dmux11: ternary_dmux port map( T_S => ic0, T_C => dm7, T_N => wr8, T_O => wr9, T_P => wr10 );
dmux12: ternary_dmux port map( T_S => ic0, T_C => dm8, T_N => wr11, T_O => wr12, T_P => wr13 );
mux4: ternary_mux port map( T_S => com1, T_N => N, T_O => com0, T_P => P, T_C => mu4 );
mux5: ternary_mux port map( T_S => com2, T_N => N, T_O => mu4, T_P => P, T_C => asign );
mux7: ternary_mux port map( T_S => com2, T_N => O, T_O => asign, T_P => O, T_C => mu7 );
mux8: ternary_mux port map( T_S => com1, T_N => O, T_O => mu7, T_P => O, T_C => mu8 );
mux9: ternary_mux port map( T_S => asign, T_N => mu8, T_O => asign, T_P => asign, T_C => mu9 );
inv2: ternary_mux port map( T_S => com0, T_N => P, T_O => O, T_P => N, T_C => ic0 );
inv3: ternary_mux port map( T_S => com1, T_N => P, T_O => O, T_P => N, T_C => ic1 );
inv4: ternary_mux port map( T_S => com2, T_N => P, T_O => O, T_P => N, T_C => ic2 );
mux17: ternary_mux port map( T_S => com4, T_N => N, T_O => com3, T_P => P, T_C => osign );
min1: ternary_min port map( T_A => dOO, T_B => mu9, T_C => mi1 );
...
Видимо надо какой-то редактор схемного ввода городить, который позволял бы быстро переходить из графического представления в текстовое и обратно, а то дополнять такую "схему" в будущем будет нереально, а тем более исправлять в ней ошибки...
Решил продолжать развивать модель в Logisim (попутно перенося новое в VHDL) т.к. похоже после выкидывания лишнего моделька стала постабильнее и Logisim только в отдельных ветках иногда краснеет - так что видимо обсуждения по добавлению SK, JP и EX буду сначала вести в осноном триадоровском топике: viewtopic.php?t=17752
Я тут за главного - если что шлите мыло на me собака shaos точка net