Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
Озадачился я тут реальной реализацией системы команд 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 троичных мультиплексоров...
|
03 Oct 2015 17:12 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Вот только не совсем понятно, почему "тактируется оно синусоидой"... Идеология конечного автомата в устройстве управления и синхронизации заключается, если я не ошибаюсь, в том, что по тактовым импульсам счетчик состояний перебирает все возможные состояния в пределах одного цикла. А троичный счетчик, как мы выяснили, работает вовсе не по "синусоиде", а скорее уж по "пиле"...
_________________ iLavr
|
04 Oct 2015 01:48 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
Ну у кого как, а у меня синхронный троичный счётчик управляется синусоидой Левые мемы срабатывают по положительному импульсу, а правые - по отрицательному, а кнопка C сбрасывает всё в ноль P.S. Возможно пилой он тоже сможет управляться, но мне как-то спокойнее от того, что нулевая пауза есть не только между негативным и позитивным импульсами, но и между позитивным и негативным...
|
04 Oct 2015 07:53 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Тогда это не счетчик, потому как непонятно что считает. А картинка http://ternary.info/ternary/ternary_seconds_counter_9trits.pngпочему-то не видна...
_________________ iLavr
|
04 Oct 2015 08:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
ну он увеличивает число на 1 за каждый период входящей синусоиды проверил в опере - вроде видно
|
04 Oct 2015 08:36 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Забавно... только я никак не пойму, вроде разговор про " 3niti alpha", а троичный счетчик почему-то считает "период входящей синусоиды"?... PS. Я хоть и не вижу по-прежнему картинки, но догадываюсь, что ты показываешь. Обсуждали, помнится...РPS. Ладно... я больше ничего тут не комментирую, а то еще обидишься...
_________________ iLavr
|
04 Oct 2015 09:27 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
не вижу никаких противоречий P.S. вон наш 8080 тоже вполне себе двоичный проц, однако управляется он какими-то странными последовательностями Ф1 и Ф2, а никак не единственным двоичным синхросигналом с 50% скважностью...
|
04 Oct 2015 10:09 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
Считает оно вот так: Клок проходит через все каскады и не обязан быть троичным - все же остальные каскады считают вполне себе троично, причём синхронно P.S. По сути это уже и есть PC - надо только прикрутить к нему схемку изменения его значения по командам JMP или LPCD
|
04 Oct 2015 11:44 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Дерёёёёвня... Постыдился бы такое писать... Типичная двухфазная синхронизация - классика жанра... Почитал хотя бы пару книг из нашей библиотеки, прежде чем так позориться! Надо же! Пол-века еще не прошло, а Ф1 и Ф2 вдруг стали "какими-то странными последовательностями"! Ну не синусоидами все же они стали? А, Shaos? Ну надо же такое ляпануть! Не... тут правда больше не следует ничего комментировать... всё откровенно ясно...
_________________ iLavr
|
04 Oct 2015 11:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
Ну у меня тоже двухфазная синхронизация, только одним проводом
|
04 Oct 2015 11:56 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
Короче 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
|
04 Oct 2015 12:18 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
Вобщем как-то так оно видится: По идее вместо T0 можно задействовать T1 - тогда количество временных регистров уменьшится... Потом вместо явных inc I и clr I можно просто в каждом машинном цикле на базе старого значения I выдавать новое значение I, которое будет запоминаться в конце
|
07 Oct 2015 15:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22535 Location: Silicon Valley
|
Поподбирал значения для 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): Оптимальное решение имеет 49 полных троичных мультиплексоров и 33 полумультиплексора (17 E12 и 16 E21). P.S. Для первого прототипа это всё можно сделать через двоичное ПЗУ...
|
08 Oct 2015 15:44 |
|
|