Здесь принимаются все самые невообразимые вопросы... Главное - не стесняйтесь. Поверьте, у нас поначалу вопросы были еще глупее :)
Ответить

Re: Микропроцессоры: Попытки разработки собственной архитект

Сб янв 28, 2017 18:23:53

КРАМ писал(а):Причем тут ПК?
:dont_know:
Насколько я понял, автор рассматривает RISC-архитектуру....


Да не причем, просто пример устройства. Планшет, смартфон, да что угодно сейчас имеет многозадачность. Я озвучил саму суть проблемы: программа, требующая частый доступ к ядру, не уживается на одном ядре с производительными фоновыми программами, требующими суммарное время ядра.

Re: Микропроцессоры: Попытки разработки собственной архитект

Вс янв 29, 2017 06:31:59

LastHopeMan писал(а):программа, требующая частый доступ к ядру, не уживается на одном ядре с производительными фоновыми программами, требующими суммарное время ядра.

Быстрая смена контекста в этом ничем не поможет. Экономия "на спичках".
В этом поможет лишь увеличение количества ядер и распределение задач с учетом их вычислительной прожорливости по этим ядрам.
Более того, в правильно выстроенном алгоритме контекст не может быть большим по объему.
А если еще учесть, что Вы говорите о программах расположенных в верхнем уровне (не драйверы и сама ОС), то и разговор об аппаратном контексте вообще теряет всякий смысл.

Микропроцессоры: Попытки разработки собственной архитектуры

Вс янв 29, 2017 14:30:46

Чтo-то немного пернеборщил: Не всякий школьник с первого захода освоится в конструкциях такой системы команд:
Код:
HLT___________________________________________________________________________
      00   :HLT             ;Останов. Команда не работает на системном уровне
   nn 00   :HLT Rn          ;Захват регистра за опциональный
   nn nn   :HLT Pn/n        ;Захват указателя или числового индекса
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
MOV___________________________________________________________________________
      yx   :MOV Rx,Ry       ;Пересылка между регистрами
   44 yx   :MOV Px,Py       ;Пересылка между указателями
      Ax ii:MOV Rx,i        ;Загрузка непосредственной константы в регистр
   nn Ax ii:MOV Rx,[Pn+i]   ;Загрузка с базовым смещением
   nn Bx ii:MOV [Pn+i],Rx   ;Выгрузка в базовое смещиние
r# nn Bx ii:MOV [Pn+=i],Rx  ;Выгрузка по смещению и итерационным шагом
w#    xx   :MOV Rx,[Rx]     ;Чтение с контекста
w#    yx   :MOV [Rx],Ry     ;Запись в контекст
w# nn nn   :MOV Rw,[n]      ;Чтение управляющего регистра
w# ?? 00   :MOV [?],Rw      ;Запись в управляющий регистр
w# 00      :MOV [0],Rw      ;Переключение контекста
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
JMP___________________________________________________________________________
      B8 ii:JMP $+i         ;Ветвление с относительной адресацией -128..+127
   nn B8 ii:JMP $+n+i       ;Ветвление с относительной адресацией -1024..+1023
nn 8m ii FF:JMP n+m+i       ;Ветвление с абсолютной адресацией 0..65535
w# 00      :JMP Rw          ;Переключение контекста
----------
WAIT__________________________________________________________________________
      B8 FE:WAIT            ;Ветвление с замыканием в режим условного ожидания
nn nn B8 FE:WAIT n          ;Пример режима ожидания с указанием длительности
nn 00 B8 FE:WAIT Rn         ;Пример режима ожидания с указанием счётчика
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Код:
ГДЕ___________________________________________________________________________
r# - означает префикс повтора командами LOOP n/Rn/[Rn]
w# - означает префикс ожидания командами WAIT n/Rn
nn - двойной ниббл (11h, 22h, 33h, 44h, 55h, 66h, 77h)
?? - двойной ниббл необязательный и может отсутствовать
x/y- индекс регистра приёмника/транслятора
ii - байт непосредственных данных
----------

Код:
ПРИМЕРЫ_______________________________________________________________________
44 00 B8 FE 55 55:MOV AL,[5]      ;Чтение управляющего регистра
44 00 B8 FE 55 00:MOV [5],AL      ;Запись в управляющий регистр
44 00 B8 FE 00   :JMP AL          ;Переключение на контекст задачи
44 FС 22 B6 03   :MOV [SI+=3],CL  ;Запись с итерационным шагом счётчика AL
44 FC 22 A6 7D   :MOV CL,[BX+2*AL];Чтение с двойной шириной по базе

P.S.: Можно сказать, что байт-код команд просто чудовищный :facepalm:
Это - первое и ошибочное впечатление. На самом деле, аналогично M680x0 процессору с ортогональной демократией, у меня многое очень гибко.
И, самое главное, дешифратор команд - не очень сложен (программировал на базе ВМ80 же).
P.P.S.: Это те "плюшки", открываемые перспективы которых захватывают меня :)))
Кстати, долго думал вот, как быть с комбинациями, типа LOOP n + MOV R8,const. Естественно, повторять n-раз команду загрузки регистра одним и тем же - бессмысленно.
Нашёл выход к очередной плюшке: Такие циклы не зацикливаются на одной команде, а двигаются к следующим. Но, все эти n-команд обрабатываются в расширенном виде. :roll: (один префикс на группу команд)
P.P.P.S.: Вспомнил ещё деталь: 20 лет назад разработку своего CPU начинал с цоколовки (распиновки), чтобы шлейфом можно было воткнуть в панельку существующего компьютера (Радио-86РК, Специалист, Орион-128 или ZX-Spectrum). Вот там то я и топтался, так как не мог даже на бумаге задуманное подвести к шинам готовых компьютеров (у ВМ80 же тактирование двуфазное да на 12 Вольт).
Поэтому, настойчиво считаю, что система команд не должна отражать грыжами реальность временных технологических сложностей устройства кристалла :kill:
К тому же, в очень оптимистической перспективе, если инопланетянскими технологиями очень аккуратно вскрыть любой тот же Core-i7 и перепрошить модуль микропрограммного конвейера, теоретически можно же заставить его понимать и конвейеризировать любую систему команд (6502, 68000, Z80, 4004 и т.д.). Или я не прав?
Тем более, уже на подходе FPGA-гибриды от ведущих производителей.
Или Вас так жизнь сильно проколбасила, что модуль генераций мечт наглухо заземлило на реалии быта? :facepalm:

Микропроцессоры: Попытки разработки собственной архитектуры

Ср фев 15, 2017 13:02:15

Представляетe, вчера видел сон, где занимался рекламой своего процессора в каком-то институте как мощнейщий из студенческих и продвигал свою идею… :roll:
P.S.: Никогда не снились институты… :sleep:

Попытки "причёсывания" системы команд 8080

Сб фев 18, 2017 18:55:33

Paguo-86PK писал(а):.. мощнейщий из студенческих и продвигал свою идею …
Всё таки как-нибудь найдите в себе силы и почитайте Пушкина, Толстого, Достоевского ,что такое архитекура процессора и какие они бывают , тогда, возможно, идея-фикс написать собственные "чукотские заметки" создать свой "мощнейший из школолошных студенческих" отпадёт сама собой..
А то дальше даже страшно представить, до чего сие доведёт ..

Re: Попытки "причёсывания" системы команд 8080

Вт апр 11, 2017 06:04:20

petrenko писал(а):Всё таки как-нибудь найдите в себе силы и почитайте Пушкина, Толстого, Достоевского ,что такое архитекура процессора и какие они бывают , тогда, возможно, идея-фикс написать собственные "чукотские заметки" создать свой "мощнейший из школолошных студенческих" отпадёт сама собой..
А то дальше даже страшно представить, до чего сие доведёт ..
Нe представляете даже, на сколько это тяжело! :dont_know:

Смотрю видео и думаю - счастливый человек! :)))
На днях мысль одна пришла.
Что если в схеме РАДИО-86РК вывод 8 счётчика ИЕ4 DD3 подключить на вывод 16 ПДП ВТ57 DD2, а к выводам ПДП 21 и 15 соответственно подключиться триггером ТМ2 выводами 12 и 11, выход которого с вывода 8 через резистор 680 Ом подать к базе VT2…
Вы уже сообразили, что должно получиться?
И мне эта идея покоя не даёт… Модификации - мизер ведь. Лишь машину ту из шкафа достать, почистить, БП подключить и чуток подпаять кой-где…
И схему набросал для ясности…
Вложения
i8257vs8275.jpg
Нетрадиционное использование ПДП в РЛК
(99.35 KiB) Скачиваний: 333

Микропроцессоры: Попытки разработки собственной архитектуры

Пн июн 25, 2018 05:35:50

Удалoсь заняться попытками реализации задуманного…
Благо, Icarus Verilog компактен и быстр для симуляции + облачные технологии доступны для демонстрации.

Облачная Verilog-версия.
Написано, в основном, как попало, лишь бы убедиться, что я способен заставить это выполнять мой код.
Но, это - работает… Крайне примитивно, но работает.
А именно: «HLT», «MOV [BX],R», «MOV R,R1», «MOV R,ID», «INC BX», «PUSH n», «JMP $+ID», «RET»…
Вывод «WAIT» позволяет удлинять циклы чтения/записи медленных устройств… Сделал просто, но не знаю, верно ли?
(Работает так: По-фронту шина данных считывается во временный регистр. По-срезу - проверяется «WAIT» и снимается сигнал «READ»…
То есть, если «WAIT» изменялся между этими событиями, то факт игнорируется… Ввёл триггер на такой случай, но потом решил, что это - излишества.)

В «i8080»/«Z80» всё завязано на машинных циклах. В частности, «M1» - считывает код очередной инструкции…
Когда я начинаю так делать, на «NOP» требуется 4 такта…
Когда иду «окольным» путём - уходит 3 такта…
А если иду своим путём - вообще 2 такта требуется. В чём дело?

Мой путь (я его забраковал и удалил, так как пытаюсь находиться в рамках традиционных машинных циклов):
Регистры IC (Instruction Code) и ID (Immediate Data) - 9-битные, где «лишний» бит - «признак сбоя»…
Перед чтением очередной команды «признаки сбоя» устанавливаются… Тем самым, к шине адреса «подтягивается» счётчик инструкций и при считывании данные непосредственно фиксируются в «сбитых регистрах»… И если «WAIT»-сигнал «даёт добро», бит «сбоя» сбрасывается…
Реализация проста, но не «красива», так как нужно оставаться в рамках битов машинных циклов, а они у меня, получается, хранятся прямо в «девятых» битах…
При этом, промежуточные регистры адреса и данных имеют также «лишние биты». Так, если 17-й бит адреса установлен, его надо очистить, предварительно выдав адрес/данные на шины для цикла записи в память. А если установлен 9-й бит данных, то они считываются…
То есть, «по-хорошему» это надо вынести в отдельные циклы. Тогда как у меня всё получается через «лишние биты», разбросанные по разным регистрам… Что, с одной стороны, даёт «интуитвную» модель поведения системы и ускоряет процесс. А с другой - «портит» архитектуру, так как уходит строгость и формальность завязанности на машинных циклах…

Проблемы:
Во-первых, «файл контекста» (для страничной памяти и многозадачности) не задействован…
Во-вторых, «АЛУ» не задействованно…
В-третьих, реализация чтения/записи стека заметно кривая…
В-четвёртых, элементарные операции реализовал с трудом. Не знаю, что будет дальше…
В-пятых, «LOOP/SKIP/WAIT» режимы реализовать относительно легко, но пока не понятно, как…

P.S.: Что получилось, то получилось…
На «NOP» уходит 3 такта… Не мало ли для «устойчивой работы»?

Микропроцессоры: Попытки разработки собственной архитектуры

Вт окт 08, 2019 16:51:33

Нa LogiSim построил пробную схему своего x80.


Хотя над схемой работаю долго, но всё лишь для того, чтобы проверить «читалку команд»:

Регистр «IB» - Instruction Block: Регистр префикса/постфикса для выбора блока инструкций…
Регистр «IC» - Instruction Code и «ID» - Immediate Data…
Светодиод «M1» указывает на сброс IB-IC-ID регистров и ожидание очередного кода…
(В отличии от i8080/z80, здесь индекс M1 выбран условно, так как M1 активен у меня до конца чтения всего кода команды целиком.)

Префиксом являются все 8 кодов - 11h, 22h, 33h, 44h, 55h, 66h, 77h и код 00h, если активно «SYS» для режима OS…
Постфикс образуется побочно только в операциях ветвления, где «JC $» - «CLC», «JNC $» - «STC», «JZ $» - «REPZ», «JNZ $» - «REPNZ», «JS $+1» - «RETS», «JNS $+1» - «RETNS» и т.д… Тем самым, уже на уровне чтения кода команды до передачи в дешифратор, формируются префиксы и отлавливаются замыкания переходов на себя с преобразованием в постфиксы. Всё делает «читалка x80 команд»…

Вся остальная часть схемы - мусор.
В частности, АЛУ накидал как попало, лишь бы было и работало.

От «читалки команд» код передаётся в ПЗУ на 65536 32-битных слов для хранения микрокода.
Всего возможно до 4096 x80-команд до 16 микрокоманд каждая. Но практически достижимо на программном уровне только менее 2560 x80-команд.
Светодиод «UID» - Using Immediate Data, указывает на использование микрокодом константы регистра ID…
Светодиод «HALT» указывает на завершение цепочки микрокоманд для сброса «читалки команд» и готовности к следующей x80-инструкции…
Светодиод «Pair» указывает, что бит микрокода требует вписывать в регистровый файл «CTX» данные не в один регистр, а в смежную регистровую пару…

На время выборки x80-команды, пока горит M1, для ПЗУ формируется адрес C000 с микрокодом E9E9E1F1. Где:
  • E9?????? - выбор регистровой пары IP (ячейки E1:E9) для выдачи на шину «ADDR». Так-как указан E9, а не E1 - активен «Pair»…
  • ??E9???? - указывает на ячейку операнда-источника
  • ????E1?? - указывает на ячейку операнда-аккумулятора
  • ??????F1 - холостая (15-я в АЛУ) операция, для инкремента IP на +1

Тем самым, при чтении команды из ОЗУ работает единственная RISC-операция для инкремента счётчика команд.

Под АЛУ есть блок условного прерывания цепочки микрокода. Что можно увидеть в анимации на команде «BC FC» по адресу 000C, когда она срабатывает лишь при единице в CF и переходом на 000A. А до этого очередь доходит до 000E «B8 F6» с переходом на 0006…
Однако, обновление регистров хранения флажков пока заблокировано и производится вручную.

В целом же, наконец-то набросок x80-процессора работает и остаётся заполнить пару тысяч ячеек ПЗУ микрокодом и добавить ещё несколько узлов для чтения/записи данных ОЗУ, чтобы и стековые операции стали реализуемы.

Однако, так как я всего лишь обтачиваю алгоритм доступа к регистровому файлу и проверяю корректность работы «читалки», вся схема - мусор…
Прежде всего из-за того, что x80 - задуман мной как CISC-процессор, а схемой получился - RISC читающий CISC-команды.
Тем самым, под Verilog годится лишь именно «Читалка x80-кода»…

P.S.: Анимация из DropBox. Так что она может измениться, если мне не будет лень отснять новый вариант…

Микропроцессоры: Попытки разработки собственной архитектуры

Чт окт 10, 2019 22:32:46

Всегдa задавался вопросом, почему ни в каких процессорах нету команды для дизассемблинга кода и думал, что это сложно. Однако, как показывает сегодняшний опыт, даже как попало можно из тройки мелких ПЗУ сделать пародию на дизассемблер.

Кaк эксперимент, решил набросать «аппаратный x80-дизассемблер»…
По сути, это тот же RISC-процессор в CISC-оболочке, но вместо микрокоманд в нём используется поток ASCII-символов прямо на терминал.

Получилось (внизу) три крошечные ПЗУ внизу:
Первая (512 байтов) хранит саму мнемонику и ссылки на токены.
Вторая (справа, 256 байт) хранит указатели на токены и индексы от шины (выборка строк, столбцов и префикса).
Третья (внизу на 512 байтов) хранит имена регистров, регистровых пар и АЛУ-операции.

Можно видеть, что схема довольно маленькая, но является самым примитивным дизассемблером на аппаратном уровне.
Сегодня я приобрёл опыт, который заключается в том, чтобы хранить не один большой микрокод в одной огромной ПЗУ, а разбить микрокоманды на несколько мелких кодов в нескольких ПЗУ.
Для меня это - довольно ценный опыт.

Даже своим x80-эмулятором на JavaScript я «плясал с бубном», так как тяжело было обрабатывать байт-код x80 на языке высокого уровня. В частности, «jmp замыкания» на себя приходилось перехватывать уже в самой команде. Теперь я вижу, как нужно было организовывать эмулятор…
А если в JavaScript я напортачил, что говорить про Verilog!
Теперь я вижу, как надо делать. По крайней мере, нащупал вариант компактнее и производительнее.

P.S.: Как программист я избалован тем, что программы можно бить неограниченной сложности.
В Verilog похожая ситуация, так как не смотря на ограничения, в нём можно описать модуль космической сложности.
А вот LogiSim связывает меня по рукам из-за многих ограничений и мозги начинают действительно варить на качественно ином уровне, так как изнуряет графическое редактирование и начинаешь реально думать очень чётко…

Re: Микропроцессоры: Попытки разработки собственной архитект

Вс янв 17, 2021 09:16:55

Для облегчения работы можно купить на Али простую плату с FPGA Cyclone II.
У этой ПЛИС 4 тысячи лог. ячеек (LE), которые представляют собой программируемую таблицу истинности (LUT) и один D триггер.
Мощности одной LUT хватает на реализацию одного бита сумматора. Полноценного, со входом переноса,
операндами, выходом результата и выходом переноса, ибо у LUT в этой FPGA есть 4 входа и 2 выхода.
Помимо этого там есть еще блоки памяти (M9K), которые можно собирать в почти любую разрядность и им можно задавать
изначальное состояние (типа прошивку для ПЗУ из HEX или иного файла). Есть там и десяток аппаратных умножителей.
И самое главное - все это добро стоит совсем недорого вместе с программатором.
В среде Quartus 2 есть различные отладчики, например SignalTap logic analyzer. Это логический анализатор,
код которого генерирует сама среда и зашивает в ПЛИС вместе с проектом. И через программатор USB-Blaster можно
следить за интересующими процессами.
Я недавно купил себе такой наборчик, правда USB-Blaster пришлось перешить другой прошивкой (нашел на Github исходники),
ибо родная кидала BSOD на Win10. Из языков HDL выбрал Verilog, так как он требует меньше писанины в отличии от VHDL, но VHDL
позволяет более точно описывать схему. Пока тренируюсь на "кошках". Написал I2S интерфейс, сейчас пиишу автомат,
который "расшаривает" один умножитель на несколько конвейеров (мне их не хватило для одного проекта), потом попробую написать КИХ фильтр с использованием этого автомата, ибо КИХ требует несколько умножителей, в зависимости от его порядка. А данные у меня имеют 32 бита разрядности. Потом на очереди апсемплер на каскадно-гребенчатом фильтре. Короче, полный DSPец. Закончу с этим проектом и займусь "баловством" с самодельными процессорами.

Прикола ради, собрал на FPGA EP2C5T144C8N процессор Nios 2/e, то есть тот, который совсем простой.
Вот такая простая сборка из 8кБ ПЗУ, 2кБ ОЗУ, таймера, JTAG UART и GPIO заняла 45% этой плисины.



На этом процессоре запустил мигалку светодиодом:



В результате все заработало.
Тут в проекте я еще решил натянуть Интел и приделал аппаратное умножение
в виде кастомной инструкции, так как бесплатная версия ядра не умеет умножать и делить.

Так что этой ПЛИС для экспериментов хватит за глаза.

Re: Микропроцессоры: Попытки разработки собственной архитект

Чт янв 28, 2021 14:41:28

Нa LogiSim построил пробную схему своего x80.


А что это за ПО - а то очень интересно симулировать довольно большие схемы на логике, от которых протеус хренеет. Но хотелось-бы иметь модели крупных ТТЛ микросхем прототипов ИЕ5,6,7,8, сдвиговых регистров ИР13,16, дешифраторов ИД3,7

Микропроцессоры: Попытки разработки собственной архитектуры

Сб янв 30, 2021 03:00:20

Уx! Больше года прошло! :shock:

Всё это время тренируюсь на побочных архитектурах и набираюсь опыта, так как этот CISC оказался слишком сложным для меня.
Побочно разрабатывал RISC, который очень быстро трансформировался в своеобразный простейший CISC и пытаюсь его докончить второй год…
Для облегчения работы можно купить на Али простую плату с FPGA Cyclone II.
… … …
Так что этой ПЛИС для экспериментов хватит за глаза.
Ну, я как-то уже решил, что DE2-115 хватит для любых сорвиголова-экспериментов без надобности в паяльнике. :solder:
Тут в проекте я еще решил натянуть Интел и приделал аппаратное умножение в виде кастомной инструкции, так как бесплатная версия ядра не умеет умножать и делить.
Вот из-за таких мелких ограничений хотелось бы чтобы в стоимость платы входили и всякие лицензии… :facepalm:
(Хотя, что-то сомневаюсь…)
Тем более, такие девайсы покупаются раз в жизни и покупать дешевле - накручивать счётчик следующих аналогичных покупок. :hunger:
То есть, хочется купить мощнее и дороже, чтобы хотелка больше не включалась! :)))
А что это за ПО - а то очень интересно симулировать довольно большие схемы на логике, от которых протеус хренеет. Но хотелось-бы иметь модели крупных ТТЛ микросхем прототипов ИЕ5,6,7,8, сдвиговых регистров ИР13,16, дешифраторов ИД3,7
Там от ТТЛ только сама суть. На деле - одни примитивы.
Но, среда позволяет из них самостоятельно строить аналогичные самостоятельные схемы, оформлять их в УГО, которое вставляется уже в общую схему.
А так, Logisim весит чуть более 6 Мб в jar… :tea:

P.S.: Ещё тут рассказали новость про бесплатное производство любительских процессоров - недурно бы и поучаствовать! :wink:

Re: Микропроцессоры: Попытки разработки собственной архитект

Сб янв 30, 2021 07:41:25

да господа че там в РУ(*.biz ) курят щас.... :dont_know:
от насваля такое точно не ТОРКНЕТ..... :oops:

"анаша анаша до чаво ж ты хараща ...
без тибя АНАША у миня болит душа"(с) :wink: :)))

Re: Микропроцессоры: Попытки разработки собственной архитект

Сб янв 30, 2021 11:30:26

Богомерзкая ява... еще и запускать её геммор.

Народ - есть симуляторы больших схем на TTL логике. Тут пару вещей суровых хочу протестировать. Микрокалькулятор на рассыпухе и такую интересной машинку как "Кенбак" с 1битным АЛУ. Это первое примерно 100 корпусов с учетом крупных - реверсивные счетчики аки 155ИЕ6, у второго более мелкая логика - но все-ж набирать узел ОЗУ на мелочи да на 4096 бит (пол моему) занятие довольно себе так.

У второго в оригинале 150+ корпусов, но в реалиях советской базы примерно 210 выйдет. 75 корпусов только микропрограммный автомат.

Микропроцессоры: Попытки разработки собственной архитектуры

Сб янв 30, 2021 12:00:11

Богомерзкая ява... еще и запускать её геммор.

Народ - есть симуляторы больших схем на TTL логике.
Eсть ещё Atanua. И LogicCircuit - тоже пробовал, когда примерялся к всяко-разному: KiCAD, Proteus, Atanua…

Но остановился на Logisim, так как в нём городить как попало легче всего, чем в остальных! :)))
Ответить