nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 17 Aug 2018 14:37



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

Joined: 10 Mar 2017 06:30
Posts: 276
Reply with quote
Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.


26 Nov 2017 16:11
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
haqreu wrote:
Ну я так чувствую, что триадоры будут разных вкусов. У меня все инструкции требуют трёх тактов клока (fetch-decode-execute)

А зачем отдельный такт на decode? :o decode он же автоматом происходит во время execute...

_________________
iLavr


26 Nov 2017 16:12
Profile
Maniac

Joined: 10 Mar 2017 06:30
Posts: 276
Reply with quote
Эх, ничего от вас не скроешь :oops:

Да, мне нужно только два такта на каждую инструкцию, но мне лень делать неоднородный счётчик, поэтому один такт я буду спать.


26 Nov 2017 16:14
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
haqreu wrote:
мне лень делать неоднородный счётчик, поэтому один такт я буду спать.

А вот это зря, мне кажется. Лучше не спать, а делать execute за два такта - по интервалам
времени удобнее разложится.

Хотя, может быть, Вам по месту виднее. Я ж не вижу схемы. Но обычно execute требует больше
тактов. Я лично планирую: 3 такта - fetch и 6 тактов - execute...

_________________
iLavr


26 Nov 2017 16:22
Profile
Maniac

Joined: 10 Mar 2017 06:30
Posts: 276
Reply with quote
Я схемы тоже не вижу, я только в голове измысливаю. Почему мне надо два такта на инструкцию:
1 такт: скопировать данные из регистров во временный буфер (это надо выставить адрес регистра, затем дёрнуть клок для копирования)
2 такт: скопировать обработанный буфер назад в память регистров

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


26 Nov 2017 16:28
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16830
Location: Colorado
Reply with quote
haqreu wrote:
Ну я так чувствую, что триадоры будут разных вкусов. У меня все инструкции требуют трёх тактов клока (fetch-decode-execute), и, поскольку я уже весьма продвинулся в железках, то переделывать вряд ли буду.

А до OP ты дошёл в своём железном монстре? А то может сделать единообразно? Плюс скипы :)

haqreu wrote:
Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.

Я в своей микроархитектуре 3niti alpha именно так и планировал - там правда 6 тактов получается на инструкцию (3 положительных и 3 отрицательных ибо синусоида ; ) ну и некоторые длинные инструкции могут растянутся на 3 цикла (т.е. всего 9 периодов синусоиды или 18 тактов максимум)
А в данном конкретном случае - простота залог здоровья, поэтому пытаюсь быть типа RISC :)

_________________
:eugeek: https://twitter.com/Shaos1973


26 Nov 2017 16:42
Profile WWW
Maniac

Joined: 10 Mar 2017 06:30
Posts: 276
Reply with quote
OP?


26 Nov 2017 16:43
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
haqreu wrote:
Да, именно поэтому у меня будет счётчик семиразрядным: шесть разрядов на номер инструкции и один разряд на номер такта внутри инструкции.

Может не счетчик, а дешифратор будет семиразрядным? А то как-то это все плохо укладывается... :osad:

_________________
iLavr


26 Nov 2017 16:44
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16830
Location: Colorado
Reply with quote
haqreu wrote:
OP?

Ну да - OP (универсальная унарная инструкция):
Code:
ONNNN  -40 -> D8 - OP -13 ; unary function NNN - the same as R2=-13
ONNNO  -39 -> D9 - OP -12 ; unary function NNO - the same as SHD (Shift Down)
ONNNP  -38 -> DA - OP -11 ; unary function NNP
ONNON  -37 -> DB - OP -10 ; unary function NON
ONNOO  -36 -> DC - OP -9  ; unary function NOO - the same as BLP (Block Positive = reverse diode)
ONNOP  -35 -> DD - OP -8  ; unary function NOP - the same as R2=R1
ONNPN  -34 -> DE - OP -7  ; unary function NPN
ONNPO  -33 -> DF - OP -6  ; unary function NPO
ONNPP  -32 -> E0 - OP -5  ; unary function NPP
ONONN  -31 -> E1 - OP -4  ; unary function ONN - the same as NHI
ONONO  -30 -> E2 - OP -3  ; unary function ONO
ONONP  -29 -> E3 - OP -2  ; unary function ONP
ONOON  -28 -> E4 - OP -1  ; unary function OON
ONOOO  -27 -> E5 - OP 0   ; unary function OOO - the same as R2=0
ONOOP  -26 -> E6 - OP +1  ; unary function OOP - the same as BLN (Block Negative = forward diode)
ONOPN  -25 -> E7 - OP +2  ; unary function OPN - the same as ROU (Rotate Up)
ONOPO  -24 -> E8 - OP +3  ; unary function OPO
ONOPP  -23 -> E9 - OP +4  ; unary function OPP - the same as SHU (Shift Up)
ONPNN  -22 -> EA - OP +5  ; unary function PNN - the same as NTI
ONPNO  -21 -> EB - OP +6  ; unary function PNO - the same as ROD (Rotate Down)
ONPNP  -20 -> EC - OP +7  ; unary function PNP
ONPON  -19 -> ED - OP +8  ; unary function PON - the same as R2=-R1
ONPOO  -18 -> EE - OP +9  ; unary function POO
ONPOP  -17 -> EF - OP +10 ; unary function POP
ONPPN  -16 -> F0 - OP +11 ; unary function PPN - the same as PTI
ONPPO  -15 -> F1 - OP +12 ; unary function PPO - the same as PHI
ONPPP  -14 -> F2 - OP +13 ; unary function PPP - the same as R2=+13

Которая изначально планировалась над R1 (поменять все N на первый "старший" трит аргумента, поменять все O на второй "средний" трит аргумента, поменять все P на третий "младший" трит аргумента), но в моём рисковом варианте я не успеваю обратно результат в R1 засунуть и предложил результат класть в R2...

_________________
:eugeek: https://twitter.com/Shaos1973


26 Nov 2017 16:48
Profile WWW
Maniac

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


26 Nov 2017 16:59
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16830
Location: Colorado
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 знак результата например). Поведением по умолчанию я предлагаю сделать повторение универсальной операции над флагом, как написано в спецификации чуть выше...

_________________
:eugeek: https://twitter.com/Shaos1973


26 Nov 2017 18:05
Profile WWW
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16830
Location: Colorado
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 470 times ]


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

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

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

_________________
:eugeek: https://twitter.com/Shaos1973


26 Nov 2017 20:27
Profile WWW
Maniac

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

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


27 Nov 2017 00:21
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 16830
Location: Colorado
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 см) - вроде терпимо...

_________________
:eugeek: https://twitter.com/Shaos1973


27 Nov 2017 00:37
Profile WWW
Admin
User avatar

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

http://triador.info

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

_________________
:eugeek: https://twitter.com/Shaos1973


27 Nov 2017 01:13
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 356 posts ]  Go to page Previous  1 ... 12, 13, 14, 15, 16, 17, 18 ... 24  Next

Who is online

Users browsing this forum: AlexanderZh and 1 guest


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.