|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Давайте думать над железкой (TRIADOR)
Author |
Message |
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Без памяти программ мой триадор будет иметь меньше 250 тримуксов, то есть меньше 500 муксов. А если сделать память программ с запоминанием по уровню (вроде бы, я даже представляю как), то влезет с хорошим запасом.
|
17 Dec 2017 01:19 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Вообще-то да, я в своём логисимовском варианте (с двоичной памятью, где нету пока ни джампов, ни скипов) насчитал 272 мультиплексора - так что можем и влезть P.S. Оставаясь в DIP48 минимальная распиновка может быть такой: 1 земля 1 питание 1 вход тактирования 6 адрес для внешней памяти 5 слово из внешней памяти 3 тестовых выхода (подцепляются к внутренним точкам в зависимости от тестового адреса) 3 тестовый адрес (чтобы покрыть 27 тестовых триад идущих изнутри схемы для тестовых целей) 3 входы для R13 (по умолчанию цепляются к выходам R13) - это нужно для организации клавиатуры калькулятора (можно это автоматом зацепить на R13 если скажем тестовый адрес будет NNN) вместо вывода содержимого ВСЕХ регистров одновременно, просто цепляем их на тестовые выходы при выборе специального тестового адреса (скажем от OOP до PPP будут цепляться к регистрам, OOO и OON к половинкам PC и т.д.) всего получилось 23 ноги для организации EX снаружи нужно будет ещё 4 ноги отвести под ввод результата (для записи в регистр R1 и флаг C) и 5й сигнал управления куда пишем - в регистр R1 (+1), никуда (0) или в PC (-1) в этом случае получится 28 ног (остальные ноги будут задействованы под другие тестовые схемы) - если всё с ходу заработает, то можно будет остатки кристаллов запаковать в DIP28 и раздавать как законченный троичный микроконтроллер P.P.S. Забыл про вход сброса. Кроме того можно предусмотреть несколько сигналов для наращивания разрядности (путем подключения нескольких модулей в параллель) - как минимум надо иметь 2 входа для инкремента и декремента (от соседней младшей секции), а также что-то придумать со знаком в скипах (например вход определения знака от соседней старшей секции). Только я пока не понял хватит ли одного входа или надо иметь 4 входа для всех четырех регистров (скорее всего всех 4х). Ещё копирование числа в регистр - старшую половинку регистров надо обнулять - для этого ещё один вход будет нужен. Точнее не обнулять, а заполнять знаком записываемым в младшую половинку числом (берётся из кода команды)... В любом случае мы уже вылезаем за пределы DIP28, но остаемся в пределах DIP40...
P.P.P.S. Кстати я всё ещё планирую сделать одноплатный вариант триадора-калькулятора...
|
17 Dec 2017 15:15 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Я тут подумал, что в принципе можно обойтись без регистра инструкций. Его единственное назначение - сделать задержку в выборке новой инструкции при изменениях в счётчике (это важно для безусловных переходов). Но внутри счётчика ведь стоят ячейки памяти с запоминанием по фронту NOP, ведущая и ведомая защёлки. В данный момент при записи в счётчик я пишу одно и то же значение и в ведущую, и в ведомую. А ведь можно сделать запись только в ведущую, и ведомая получит новое значение только после клока. Вот вам и необходимая задержка.... И ведь когда-то Shaos мне объяснял, что так делать не надо, правда, в несколько другом контексте. Только не могу вспомнить, почему. Буду думать и, возможно, резать дорожки на текстолите Если получится, то это ж целых 10 тримуксов экономии. UPDATE "на всякий случай". Мда http://www.nedopc.org/forum/viewtopic.php?f=79&t=11303&start=15#p135556
|
19 Dec 2017 03:19 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Пришло время описать очередной кусок АЛУ. В железе ещё не тестировал, но ошибиться там негде. Итак, инструкция SK. Начинается всё с того, что нам нужно из оперативной памяти вытащить регистр R1, R2, R3 или R4. Выбор регистра зависит от старших двух тритов операнда команды (OC3 и OC2). Обратите внимание, что когда OC3=OC2=0, то в моей аппаратной реализации будет выбран регистр R1, но это не суть важно, т.к. в таком случае всё равно результат операции будет зависеть не от регистров, но от флага заёма-переноса. Итак, в память мы обратились, из памяти получили число Q. Теперь готовим 9 линий c условиями: И используем эти условия в зависимости от знака числа (OC3 OC2) (он посчитан на верхней картинке) и младшего трита OC1: Особенностью аппаратной реализации является то, что на линии skip next появляется хоть какой-то сигнал только если нужно пропускать команду. Если ничего пропускать не нужно, то линия ни к чему не подключена. Ну а дешифратор команд сам слабо подтягивает эту линию к -5 В, это используется как раз для сброса флага переноса. В следующих сериях ждите последний (самый толстый) срез АЛУ: команды копирования.
|
24 Dec 2017 02:04 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Симпатично, и заодно будут одинаковой длительности ступеньки. Правда, использование двоичной техники
|
16 Jun 2018 01:28 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Вот так должен будет выглядеть АЛУ, вид с высоты птичьего полёта: В нём пять срезов, отвечающих каждый за свою операцию, и одна ячейка памяти - флаг переноса. Флаг переноса недоступен снаружи АЛУ. Его значение устанавливается только срезом RR, а читается только срезом SK. Каждый срез нарисован коробочкой, в которой входные сигналы обозначены слева, а генерируемые выходные сигналы обозначены справа. Так, например, в срезе SK (я его рисовал на уровне тримуксов на предыдущей странице), реальный выход только один - сигнал SKIP_NEXT, но в то же время этот срез обязан обратиться к регистрам, поэтому он на выходах Rhi, Rmi, Rlo генерирует номер регистра для платы памяти, и потом на входах Qhi, Qmi, Qlo читает его значение. Все входы-выходы АЛУ соответствуют общей схеме триадора: Единственный недокументированный срез остался RR. В скором времени надеюсь нарисовать полную его схему на уровне тримуксов.
|
10 Jul 2018 12:24 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
| | | | Shaos wrote: По поводу EX - по идее программировать надо только OPB и их будет больше одного (например один запрограммировать как потритовый MAX, другой как потритовый MIN и т.д.) поэтому - EX 0 отведём под программирование OPB - в R1 будет код какой EX программируем (1,2,3 и т.д.), в R2,R3,R4 соответственно 9-тритовый код универсальной бинарной троичной операции. Кроме того надо добавить доступ к памяти и ALU:
NNNNN - EX -13 -> RML (read lower triad from memory [R3,R4] to R1) NNNNO - EX -12 -> WMM (write R2,R1 to memory [R3,R4]) NNNNP - EX -11 -> RMH (read higher triad from memory [R3,R4] to R1) NNNON - EX -10 -> RRC (rotate R1 right through C) NNNOO - EX -9 -> SUB (C,R1=R1-R2) NNNOP - EX -8 -> SBC (C,R1=R1-R2+C) NNNPN - EX -7 -> RLC (rotate R1 left through C) NNNPO - EX -6 -> ADD (C,R1=R1+R2) NNNPP - EX -5 -> ADC (C,R1=R1+R2+С) NNONN - EX -4 -> TSK (ternary skip on R4 sign) ??? \ NNONO - EX -3 -> TSK (ternary skip on R3 sign) ??? -} не, не нравится мне двойной скип... NNONP - EX -2 -> TSK (ternary skip on R2 sign) ??? / NNOON - EX -1 -> JPI (store current PC+1 to R3,R4 and jump to R13,R2) NNOOO - EX 0 -> PEX (program OPB instances below) NNOOP - EX +1 -> OPB №1 (R1=R1 o R2) NNOPN - EX +2 -> OPB №2 (R1=R1 o R2) NNOPO - EX +3 -> OPB №3 (R1=R1 o R2) NNOPP - EX +4 -> OPB №4 (R1=R1 o R2) ...
P.S. Команда JPI может быть использована, чтобы сымитировать CALL и RET
| | | | |
Возвращаясь к сообщению от 27 ноября прошлого года про возможную программируемость EX инструкций - на самом деле программировать можно не только логические операции (OPB), но и арифметические - и вот каким образом: Напомню, что PEX программирует команды в EX беря триады из R1,R2,R3 и R4 В случае логической команды (OPB) R1-R2-R3 могут задавать 9-тритовый код бинарной операции, а R4 - код команды, которую мы собственно меняем в блоке EX (это логичнее того, что я писал в процитированном выше) В случае арифметической команды R4 всё также может задавать код команды, а вот другие регистры могут интерпретироваться следующим образом: R1 и R2 задают входные аргументы - отрицательное число означает регистр берётся с отрицанием, -1 и +1 всё также будут означать R1-1 и R1+1 и 0 будет означать R1 R3 несёт в себе 3 трита, которые программируют разные опциональные вещи для арифметики, например: старший трит: +1 означает, что мы прибавляем флаг C 0 означает игнорирование флага C (и на входе, и на выходе) -1 означает, что мы вычитаем флаг C (а имеет ли это смысл?) средний трит: +1 означает, что мы сдвигаем первый аргумент влево на 1 трит (с использованием флага C, если предыдущий трит не равен нулю) 0 означает неизменный первый аргумент -1 означает, что мы сдвигаем первый аргмуент вправо на 1 трит (с использованием флага C, если предыдущий трит не равен нулю) младший трит: +1 означает, что второй аргумент мы считаем числом, а не указателем на регистр 0 означает неизменный второй аргумент -1 означает использование теневых регистров (?) в результате арифметической операции всегда будет устанавоиваться флаг C (и результат всегда будет сохраняться в R1) Таким образом мы покрыли и сложение-вычитание, и сдвиги, а также их комбинации - теперь можно одной инструкцией делать всякие хитрые вещи типа: R1 = R13 + R1 + 1или R1 = 3 * R12 - R11 + Сили R1 = R4 / 3 + 0и т.д.
|
10 Jul 2018 17:00 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Начинаю рисовать последний срез АЛУ: операцию RR. Как и раньше, внешние сигналы подписаны оранжевым, а внутренние сигналы подписаны фиолетовым. Напоминаю, чем занимается эта операция: OC4 и OC5 у всех опкодов равны OO, поэтому они участвуют только в генерации сигнала EN_RR на уровне дешифратора инструкций, и в АЛУ не используются. Младшие же три трита говорят, откуда куда нужно копировать. Если младшие три трита образуют отрицательное число, то мы копируем из из R1 в минус OC3-1, а если младшие три трита OC3-1 дают положительное число, то мы копируем из OC3-1 в R1. Поэтому вот первый кусок среза АЛУ, который занимается генерацией адресов регистров. Перво-наперво мы сразу готовим минус OC3-1; затем в зависимости от знака OC3-1 мы готовим шесть сигналов FROM и TO: Ну а затем остаётся адресовать память в зависимости от текущего цикла. Напоминаю, что цикл N служит для запроса опкода из памяти команд, цикл O для запроса из регистров во временный буфер АЛУ, а цикл P для сохранения результата вычислений обратно в память. Как и раньше, синим покрашены мультиплексоры, которые не участвуют непосредственно в вычислениях, но устраняют конфликты между срезами АЛУ в генерации различных выходных сигналов АЛУ. Пойду рисовать остаток среза.
|
11 Jul 2018 01:31 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Итак, окончание среза RR. Напоминаю, что на цикле N мы получаем инструкцию, на цикле O мы копируем из памяти во внутренний буфер, а на цикле P копируем результат обратно в память. Это означает, что если цикл = P и присутствует сигнал EN_RR, то мы пропускаем клок в карту памяти: Адресация карты памяти была разобрана ранее, теперь нам осталось только подготовить вход A карты памяти и borrow/carry флаг. Вот остаток среза: На цикле O мы копируем из выбранного регистра в три ячейки буфера, а затем, если знак OC3-2 ненулевой, подаём этот буфер на вход карты памяти A. Если же OC3-2 нулевой, то нам нужно увеличить/уменьшить на единичку значение в буфере. Пропускаем буфер через каскад полусумматоров, и его выход снова идёт на вход памяти. Ну и в качестве финального аккорда второй выход каскада полусумматоров идёт на вход ячейки borrow/carry, и мы клокаем его только если OC3=0 и OC2=0 и OC1!=0. На всякий случай, упрощённая версия этого среза подробно расписана тут: https://habr.com/post/337606/В сумме этот срез требует 59 мультиплексоров (30 платок тримукса). Теперь АЛУ полностью документирован, осталось развести и паять.
|
12 Jul 2018 03:39 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
Общее количество тримуксов уже известно?
|
15 Jul 2018 13:34 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
На весь триадор? С точностью до +- 10 могу посчитать, да. Единственная не нарисованная ещё схема - это схема инициализации.
|
15 Jul 2018 23:40 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Я тут по случаю читал цикл статеек: История языков программированияТак оказывается один условный джамп на три условия был ещё в FORTRAN-e: Насколько я припоминаю, и в старых BASIC-ax похожая конструкция была...
_________________ iLavr
|
04 Dec 2019 09:32 |
|
|
b2m
Devil
Joined: 26 May 2003 06:57 Posts: 871
|
_________________Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
|
04 Dec 2019 10:59 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22757 Location: Silicon Valley
|
| | | | Shaos wrote: | | | | Shaos wrote: По поводу EX - по идее программировать надо только OPB и их будет больше одного (например один запрограммировать как потритовый MAX, другой как потритовый MIN и т.д.) поэтому - EX 0 отведём под программирование OPB - в R1 будет код какой EX программируем (1,2,3 и т.д.), в R2,R3,R4 соответственно 9-тритовый код универсальной бинарной троичной операции. Кроме того надо добавить доступ к памяти и ALU:
NNNNN - EX -13 -> RML (read lower triad from memory [R3,R4] to R1) NNNNO - EX -12 -> WMM (write R2,R1 to memory [R3,R4]) NNNNP - EX -11 -> RMH (read higher triad from memory [R3,R4] to R1) NNNON - EX -10 -> RRC (rotate R1 right through C) NNNOO - EX -9 -> SUB (C,R1=R1-R2) NNNOP - EX -8 -> SBC (C,R1=R1-R2+C) NNNPN - EX -7 -> RLC (rotate R1 left through C) NNNPO - EX -6 -> ADD (C,R1=R1+R2) NNNPP - EX -5 -> ADC (C,R1=R1+R2+С) NNONN - EX -4 -> TSK (ternary skip on R4 sign) ??? \ NNONO - EX -3 -> TSK (ternary skip on R3 sign) ??? -} не, не нравится мне двойной скип... NNONP - EX -2 -> TSK (ternary skip on R2 sign) ??? / NNOON - EX -1 -> JPI (store current PC+1 to R3,R4 and jump to R13,R2) NNOOO - EX 0 -> PEX (program OPB instances below) NNOOP - EX +1 -> OPB №1 (R1=R1 o R2) NNOPN - EX +2 -> OPB №2 (R1=R1 o R2) NNOPO - EX +3 -> OPB №3 (R1=R1 o R2) NNOPP - EX +4 -> OPB №4 (R1=R1 o R2) ...
P.S. Команда JPI может быть использована, чтобы сымитировать CALL и RET
| | | | |
Возвращаясь к сообщению от 27 ноября прошлого года про возможную программируемость EX инструкций - на самом деле программировать можно не только логические операции (OPB), но и арифметические - и вот каким образом: Напомню, что PEX программирует команды в EX беря триады из R1,R2,R3 и R4 В случае логической команды (OPB) R1-R2-R3 могут задавать 9-тритовый код бинарной операции, а R4 - код команды, которую мы собственно меняем в блоке EX (это логичнее того, что я писал в процитированном выше) В случае арифметической команды R4 всё также может задавать код команды, а вот другие регистры могут интерпретироваться следующим образом: R1 и R2 задают входные аргументы - отрицательное число означает регистр берётся с отрицанием, -1 и +1 всё также будут означать R1-1 и R1+1 и 0 будет означать R1 R3 несёт в себе 3 трита, которые программируют разные опциональные вещи для арифметики, например: старший трит: +1 означает, что мы прибавляем флаг C 0 означает игнорирование флага C (и на входе, и на выходе) -1 означает, что мы вычитаем флаг C (а имеет ли это смысл?) средний трит: +1 означает, что мы сдвигаем первый аргумент влево на 1 трит (с использованием флага C, если предыдущий трит не равен нулю) 0 означает неизменный первый аргумент -1 означает, что мы сдвигаем первый аргмуент вправо на 1 трит (с использованием флага C, если предыдущий трит не равен нулю) младший трит: +1 означает, что второй аргумент мы считаем числом, а не указателем на регистр 0 означает неизменный второй аргумент -1 означает использование теневых регистров (?) в результате арифметической операции всегда будет устанавоиваться флаг C (и результат всегда будет сохраняться в R1) Таким образом мы покрыли и сложение-вычитание, и сдвиги, а также их комбинации - теперь можно одной инструкцией делать всякие хитрые вещи типа: R1 = R13 + R1 + 1или R1 = 3 * R12 - R11 + Сили R1 = R4 / 3 + 0и т.д. | | | | |
Два года уж как скоро будет - подходит такое решение то? P.S. Не надо удивляться тому, что это сообщение возникло ниоткуда - это сделано специально, чтобы сдвинуть первое видео из троичного сериала от haqreu на следующую страницу
|
25 Mar 2020 10:39 |
|
|
haqreu
Maniac
Joined: 10 Mar 2017 05:30 Posts: 318
|
Вам это может показаться удивительным, но я жив и от своих планов не отказывался! Давайте праздновать сто пятидесятый день рождения дедушки Ленина! В принципе, никакой новой информации, просто я наконец-то закончил плату памяти с тринадцатью трёхтритными ячейками памяти, что подробно описываю.
|
30 Mar 2020 15:38 |
|
|
Who is online |
Users browsing this forum: No registered users and 14 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
|
|