nedoPC.org

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



Reply to topic  [ 13 posts ] 
Микроархитектура 3niti alpha/beta 
Author Message
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Озадачился я тут реальной реализацией системы команд 3niti и понял, что это задача далеко нетривиальная - пытаюсь утолкать всё в 3 такта на короткую 1-триадную инструкцию (и соответственно 6 тактов на 2-триадную и 12 тактов на 4-триадную). Спасает то, что тактируется оно синусоидой, которая превращается в троичный сигнал NOPONOPO... и мы можем срабатывать как на P, так и на N - т.е. частота срабатывания в два раза больше частоты синусоиды (т.е. в 3 периода синусоиды можно утолкать 6 разных срабатываний конечного автомата).

Выдумалась микроархитектура, где добавляются несколько скрытых регистров:
I - старшая триада расширенной инструкции (используется для отработки многотриадных команд);
T0 - временный регистр для сохранения инструкции вычитанной из памяти;
T1 - временный регистр для сохранения младшей триады 9-тритового слова из памяти;
T2 - временный регистр для сохранения средней триады 9-тритового слова из памяти;
T3 - временный регистр для сохранения старшей триады 9-тритового слова из памяти;
TP - 9-тритовый псевдорегистр, составленный из T1,T2,T3.

P.S. На самом деле основная задача понять, влезает ли полноценная реализация 3niti alpha в ограничение на 1000 троичных мультиплексоров...

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


03 Oct 2015 17:12
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Спасает то, что тактируется оно синусоидой, которая превращается в троичный сигнал NOPONOPO... и мы можем срабатывать как на P, так и на N - т.е. частота срабатывания в два раза больше частоты синусоиды (т.е. в 3 периода синусоиды можно утолкать 6 разных срабатываний конечного автомата).

Вот только не совсем понятно, почему "тактируется оно синусоидой"... :-?
Идеология конечного автомата в устройстве управления и синхронизации
заключается, если я не ошибаюсь, в том, что по тактовым импульсам счетчик
состояний перебирает все возможные состояния в пределах одного цикла.

А троичный счетчик, как мы выяснили, работает вовсе не по "синусоиде", а
скорее уж по "пиле"...
Lavr wrote:
И я вот тут сделал прикидку, как считает троичный счетчик:

Image
Lavr wrote:
А второй глобальный вывод - логические троичные генераторы должны формировать
троичные импульсные последовательности, пропуская через вентиль несимметричную
пилу...

Image

_________________
iLavr


04 Oct 2015 01:48
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ну у кого как, а у меня синхронный троичный счётчик управляется синусоидой ;)

Image

Левые мемы срабатывают по положительному импульсу, а правые - по отрицательному, а кнопка C сбрасывает всё в ноль

P.S. Возможно пилой он тоже сможет управляться, но мне как-то спокойнее от того, что нулевая пауза есть не только между негативным и позитивным импульсами, но и между позитивным и негативным...

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


04 Oct 2015 07:53
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Ну у кого как, а у меня счётчик управляется синусоидой ;)

Тогда это не счетчик, потому как непонятно что считает.

А картинка
http://ternary.info/ternary/ternary_seconds_counter_9trits.png
почему-то не видна...

_________________
iLavr


04 Oct 2015 08:10
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
Ну у кого как, а у меня счётчик управляется синусоидой ;)

Тогда это не счетчик, потому как непонятно что считает.


ну он увеличивает число на 1 за каждый период входящей синусоиды

Lavr wrote:
А картинка
http://ternary.info/ternary/ternary_seconds_counter_9trits.png
почему-то не видна...


проверил в опере - вроде видно

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


04 Oct 2015 08:36
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
Shaos wrote:
Ну у кого как, а у меня счётчик управляется синусоидой ;)

Тогда это не счетчик, потому как непонятно что считает.

ну он увеличивает число на 1 за каждый период входящей синусоиды

Забавно... только я никак не пойму, вроде разговор про "3niti alpha",
а троичный счетчик почему-то считает "период входящей синусоиды"?... :o


PS. Я хоть и не вижу по-прежнему картинки, но догадываюсь, что ты показываешь.
Обсуждали, помнится...


РPS. Ладно... я больше ничего тут не комментирую, а то еще обидишься... :wink:

_________________
iLavr


04 Oct 2015 09:27
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
не вижу никаких противоречий :)

P.S. вон наш 8080 тоже вполне себе двоичный проц, однако управляется он какими-то странными последовательностями Ф1 и Ф2, а никак не единственным двоичным синхросигналом с 50% скважностью...

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


04 Oct 2015 10:09
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Считает оно вот так:
Code:
       _       _       _       _       _       _
CLK  _| |_   _| |_   _| |_   _| |_   _| |_   _| |_   _...
          |_|     |_|     |_|     |_|     |_|     |_|
           _______                 _______
 T0  _____|       |        _______|       |        ___...
                  |_______|               |_______|
                   _______________________
 T1  _____________|                       |
                                          |___________...
                                           ___________...
 T2  _____________________________________|


Клок проходит через все каскады и не обязан быть троичным - все же остальные каскады считают вполне себе троично, причём синхронно

P.S. По сути это уже и есть PC - надо только прикрутить к нему схемку изменения его значения по командам JMP или LPCD

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


04 Oct 2015 11:44
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
вон наш 8080 тоже вполне себе двоичный проц, однако управляется он какими-то странными последовательностями Ф1 и Ф2, а никак не единственным двоичным синхросигналом с 50% скважностью...

Дерёёёёвня... :( Постыдился бы такое писать... :oops: Типичная двухфазная синхронизация - классика жанра...
Почитал хотя бы пару книг из нашей библиотеки, прежде чем так позориться! :o
Надо же! Пол-века еще не прошло, а Ф1 и Ф2 вдруг стали "какими-то странными последовательностями"! :lol:

Ну не синусоидами все же они стали? А, Shaos? Ну надо же такое ляпануть! :o

Не... тут правда больше не следует ничего комментировать... всё откровенно ясно... :wink:

_________________
iLavr


04 Oct 2015 11:54
Profile
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Ну у меня тоже двухфазная синхронизация, только одним проводом ;)

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


04 Oct 2015 11:56
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Короче PC будет начинаться со второго каскада, а первый просто перебирает такты внутри одной инструкции - всего с учётом клока получается 6 тактов:
1) CLK=N MEM=N - вывод нового PC на шину адреса
2) CLK=P MEM=N - тут может быть чтение триады инструкции и её декодировании, с сохранением флагов микрокода
3) CLK=N MEM=O - тут может быть выставление на шину адреса и данных чего-то в соответствии с флагами, снятыми с декодера инструкции
4) CLK=P MEM=O - тут может быть чтение из памяти либо регистров в соответствии с флагами, снятыми с декодера инструкции, в том числе запись регистра I произвольным числом
5) CLK=N MEM=P - тут может быть выставление на шину адреса чего-то ещё (опять же в соответствии с флагами), плюс инкремент регистра I либо его сброс
6) CLK=P MEM=P - тут опять чтение-запись плюс подготовка к переходу в случае JMP или LPCD

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


04 Oct 2015 12:18
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Вобщем как-то так оно видится:
Code:
         _       _       _       _       _       _       _       _       _       _
CLK    _| |_   _| |_   _| |_   _| |_   _| |_   _| |_   _| |_   _| |_   _| |_   _| |_   _
     _|     |_|     |_|     |_|     |_|     |_|     |_|     |_|     |_|     |_|     |_|
                     _______                 _______                 _______
 T0          _______|       |        _______|       |        _______|       |        ___
     _______|               |_______|               |_______|               |_______|
                                                     _______________________
 T1                          _______________________|                       |
     _______________________|                                               |___________

 T2                                                                          ___________
     _______________________________________________________________________|

     ^   ^   ^   ^   ^   ^
     |   |   |   |   |   |
     |   |   |   |   |   \--- Optional Read/Write, increment/clear I and storing PC+1
     |   |   |   |   \------- Optional address bus
     |   |   |   \----------- Write/Read data
     |   |   \--------------- Set something to address bus and/or date bus
     |   \------------------- Read tryte from memory, decode and store microcode
     \----------------------- PC on address bus
SAN:
  I=OOO NNN A/DPn->m -   -    (I=OOO)
SAO:
  I=OOO NNO A/DPo->m -   -    (I=OOO)
SAP:
  I=OOO NNP A/DPp->m -   -    (I=OOO)
SAF:
  I=OOO NON  A   ->F -   -    (I=OOO)
SPCD:
  I=OOO NOO  ->   DP -   -    (I=OOO)
SAB:
  I=OOO NOP  A   ->B -   -    (I=OOO)
SAL:
  I=OOO NPN  A   ->L -   -    (I=OOO)
SAM:
  I=OOO NPO  A   ->M -   -    (I=OOO)
SAH:
  I=OOO NPP  A   ->H -   -    (I=OOO)
RLA:
  I=OOO ONN  A  ->T0 RL ->A   (I=OOO)
ADD:
  I=OOO ONO  A  ->T0 AB ->A   (I=OOO) set RFC
RRA:
  I=OOO ONP  A  ->TO RR ->A   (I=OOO)
LAI #:
  I=OOO OON NPO ->I  -   -    (I=NPP) inc I
  I=NPP ttt  m  ->T0 T0 ->A   (I=OOO) clr I
ADI #:
  I=OOO OOO ONN ->I  -   -    (I=ONO) inc I
  I=ONO ttt  m  ->T0 AT ->A   (I=OOO) clr I set RFC
OPA #:
  I=OOO OOP ONP ->I  -   -    (I=OON) inc I
  I=OON ttt  m  ->T0 OA ->A   (I=OOO) clr I set RFC
LDI # # #:
  I=OOO OPN OPN ->I  -   -    (I=OPO) inc I
  I=OPO xxx  m  ->H  -   -    (I=OPP) inc I
  I=OPP yyy  m  ->M  -   -    (I=PNN) inc I
  I=PNN zzz  m  ->L  -   -    (I=OOO) clr I
JMP # # #:
  I=OOO OPO PNO ->I  -   -    (I=PNP) inc I
  I=PNP xxx  m  ->T1 -   -    (I=PON) inc I
  I=PON yyy  m  ->T2 -   -    (I=POO) inc I
  I=POO zzz  m  ->T3 TD ->PC  (I=OOO) clr I store TD instead of PC+1
OPB # # #:
  I=OOO OPP POP ->I  -   -    (I=PPN) inc I
  I=PPN xxx  m  ->T1 -   -    (I=PPO) inc I
  I=PPO yyy  m  ->T2 -   -    (I=PPP) inc I
  I=PPP zzz  m  ->T3 OB ->A   (I=OOO) clr I set RFC
LAN:
  I=OOO PNN DPn ->T0 T0 ->A   (I=OOO)
LAO:
  I=OOO PNO DPo ->T0 T0 ->A   (I=OOO)
LAP:
  I=OOO PNP DPp ->T0 T0 ->A   (I=OOO)
LAF:
  I=OOO PON  F  ->T0 T0 ->A   (I=OOO)
LPCD:
  I=OOO POO  -   -   DP ->PC  (I=OOO) store DP instead of PC+1
LAB:
  I=OOO POP  B  ->T0 T0 ->A   (I=OOO)
LAL:
  I=OOO PPN  L  ->T0 T0 ->A   (I=OOO)
LAM:
  I=OOO PPO  M  ->T0 T0 ->A   (I=OOO)
LAH:
  I=OOO PPP  H  ->T0 T0 ->A   (I=OOO)


По идее вместо T0 можно задействовать T1 - тогда количество временных регистров уменьшится...

Потом вместо явных inc I и clr I можно просто в каждом машинном цикле на базе старого значения I выдавать новое значение I, которое будет запоминаться в конце

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


07 Oct 2015 15:02
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22409
Location: Silicon Valley
Reply with quote
Поподбирал значения для I и пришёл вот к такой DDT задаче:
Code:
# Microcode for "3niti alpha"
#I OP =I' Flags
OOONNN=OOOPNNOOOOOOOOO
OOONNO=OOOPONOOOOOOOOO
OOONNP=OOOPPNOOOOOOOOO
OOONON=OOOOONPONOOOOOO
OOONOO=OOONONPOOOOOOPO
OOONOP=OOOOONPOPOOOOOO
OOONPN=OOOOONPPNOOOOOO
OOONPO=OOOOONPPOOOOOOO
OOONPP=OOOOONPPPOOOOOO
OOOONN=OOOOONNOOOONNOO
OOOONO=OOOOONNOOOONOOP
OOOONP=OOOOONNOOOONPOO
OOOOON=ONNOONPOOOOOOOO
OOOOOO=OONOONPOOOOOOOO
OOOOOP=OPNOONPOOOOOOOO
OOOOPN=PNNOONPOOOOOOOO
OOOOPO=PONOONPOOOOOOOO
OOOOPP=PPNOONPOOOOOOOO
OOOPNN=OOOPNONOONNOOOO
OOOPNO=OOOPOONOONNOOOO
OOOPNP=OOOPPONOONNOOOO
OOOPON=OOOOOPNONNNOOOO
OOOPOO=OOOOONPOOOOOONO
OOOPOP=OOOOOPNOPNNOOOO
OOOPPN=OOOOOPNPNNNOOOO
OOOPPO=OOOOOPNPONNOOOO
OOOPPP=OOOOOPNPPNNOOOO
#LAI
ONNXXX=OOONOOPNNNNOOOO
#ADI
OONXXX=OOONOOPNNOOPNOP
#OPA
OPNXXX=OOONOOPNNOOPOOP
#LDI
PNNXXX=PNONOOPPPOOOOOO
PNOXXX=PNPNOOPPOOOOOOO
PNPXXX=OOONOOPPNOOOOOO
#JMP
PONXXX=POONOOPNNOOOOOO
POOXXX=POPNOOPNOOOOOOO
POPXXX=OOONOOPNPOOOOON
#OPB
PPNXXX=PPONOOPNNOOOOOO
PPOXXX=PPPNOOPNOOOOOOO
PPPXXX=OOONOOPNPOOPPOP
#Flags:
#abus1/1 - PC,nothing,DPx
#abus1dp/1 - DPn,DPo,DPp used if abus1=DPx
#dbus1s/1 - A,mem,reg (source)
#dbus1d/1 - T1,mem,reg (destination)
#dbus1reg/2 - used if dbus1s=reg or dbus1d=reg (T1,T2,T3 instead of N,O,P)
#dbus2s/2 - T1,T2,T3,F,O,B,L,M,H
#dbus2o/2 - used if dbus2s=O (RL,AB,RR,A,A,A,AT,OA,OB)
#pcsto/1 - optional flag to copy PC to DP (P) or DP to PC (N)
#pcrfc/1 - optional flag to set RFC (P) or copy TD to PC (N)

которая была успешно решена с помощью ddtc - получилось 80 DG403х для неоптимизированного варианта и 63 для оптимизированного (через ddtp):
Code:
6 inputs detected (worst solution is 5460)

OLD 5|4|3|2|1|0 e12=81 e21=77 DG403=80
NEW 5|4|3|1|2|0 e12=76 e21=77 DG403=77
NEW 5|4|3|1|0|2 e12=77 e21=75 DG403=77
NEW 5|4|2|1|0|3 e12=77 e21=68 DG403=73
NEW 5|4|1|2|0|3 e12=73 e21=70 DG403=72
NEW 5|3|2|1|4|0 e12=74 e21=70 DG403=72
NEW 5|3|2|1|0|4 e12=67 e21=63 DG403=66
NEW 5|3|1|2|0|4 e12=62 e21=63 DG403=63
NEW 5|3|1|0|2|4 e12=63 e21=61 DG403=63

Optimal solution has 63 chips instead of 80
Ratio optimal/worst is 1%
103 functions were used

Оптимальное решение имеет 49 полных троичных мультиплексоров и 33 полумультиплексора (17 E12 и 16 E21).

P.S. Для первого прототипа это всё можно сделать через двоичное ПЗУ...

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


08 Oct 2015 15:44
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 13 posts ] 

Who is online

Users browsing this forum: No registered users and 9 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:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.