Jump to content
Alikberov

Logisim-процессор «Койяанискаци»: Сложно выговорить, легче запрограммировать

Recommended Posts

В противоположность известных всем процессоров «Intel», марку которых довольно легко запоминать и выговаривать, «Койяанискаци» задумывался как процессор, имя которого сложнее произнести, чем разобраться в его архитектуре и научиться его программировать на самом элементарном уровне машинного кода редакторами дампа, чтобы проверить, действительно ли стоит прогибаться под радиолюбительские ТУ и невозможно сформировать красивую систему команд, понятную на уровне интуиции?
Не имеется ввиду код стиля «O'Kей, процик, вычисли мне среднее факториальное», а планировался машинный код с минимальным уровнем вхождения в основы искусства его программирования, не требующего жёсткой зубрёжки и заучивания всех команд.

Архитектура процессора

Весь процессор основан на регистровом файле из четырёх функциональных групп по десять ячеек в каждой. Хотя операции АЛУ возможны над любыми ячейками, правила корректного оперирования с ними соблюдать необходимо более-менее строго. Здесь стоит просто запомнить логику и назначение этих функциональных групп:

  • A₀…₉ - Аккумуляторы (A₀ хранит флажки статуса АЛУ)
  • B₀…₉ - Base/База доступа к памяти (B₀ хранит Базу возврата из подпрограммы)
  • C₀…₉ - Counter/Счётчик/Смещение байта в памяти (C₀ хранит Смещение возврата из подпрограммы)
  • D₀…₉ - Devices/Доступные устройства с мгновенным откликом (можно организовать кеш)


Так как процессор достаточно прост и не имеет встроенных аппаратных механизмов организации стековых операций, регистры B₀:C₀ сохраняют адрес, на котором была размещена операция обращения к подпрограмме. Программист при необходимости сам обязан позаботиться о всех операциях работы со стеком и описать их алгоритмом.

Система команд
Практически все команды кодируются WYSIWYG-стилем акына:«Что вижу, то значит». Шестнадцатеричная кодировка отчасти является аббревиатурой самой команды и всё задумывалось так, чтобы большинство команд просто совершали понятные действия.

  • 00: HLT (останов программы) - крайне логичный и гармоничный код!
  • 01: Приращение единицы к активному регистру-приёмнику
  • 02…09: Префикс повтора операции от 2 до 9 раз или пропуск группы операций по условию
  • 10…99: Используется BCD-код приращения к активному регистру-приёмнику - код 56 означает именно 56₁₀, а не 0x56₁₆
  • A0…A9, B0…B9, C0…C9: Безвременные префиксы выбора активного регистра указанной группы - A₀…A₉, B₀…B₉, C₀…C₉ соответственно
  • D0…D9: Выбор активного устройства группы Devices - D₀…D₉
  • AA…AD, BA…BD, CA…CD, DA…DD: Безвременные префиксы выбора сочетания операндов для АЛУ-операций - A,A…D,D соответственно
  • E0…E7: Обращение к расширению (Extension) через подпрограмму - CALL 0xE000…0xE700
  • F1…F9: Обращение к функции (Function) с указанным индексом - CALL 0xF100…0xF900
  • E8…EF: Условный префикс к исполнению кода следующей операции - Enable if SF/PF/CF/ZF
  • F0: Завершение текущей функции (Function Over - как Game Over)
  • AE/BE/CE/DE: Извлечение (Extract) данных из памяти в указанный регистр
  • AF/BF/CF/DF: Запись/фиксация (Fix) данных указанного регистра в память
  • FA…FF: Вызов прочих функций - CALL 0xFA00…0xFF00
  • 0A/1A/2A…9A: АЛУ-операция "Сумма" (Add) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0B/1B/2B…9B: АЛУ-операция "Вычитание" (suB) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0C/1C/2C…9C: АЛУ-операция "Конъюнкция" (Conjunct/and) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0D/1D/2D…9D: АЛУ-операция "Дизъюнкция" (Disjunct/or) над группой операндов - индекс правого операнда указывается явно 0…9
  • 0E/1E/2E…9E: АЛУ-операция "Исключающее ИЛИ" (Exclusive or/Eor/xor) над группой операндов - индекс правого операнда указывается явно 0…9

Основы программирования
Однако, тут не стоит думать, что «процессор акына» совсем ничего не требует от продвинутого пользователя-программиста: Минимальный порог вхождения преодолеть всё-таки придётся… А значит, придётся чуточку поднапрячься и преодолеть порог!
(Здесь подразумевается, что читатель уже имеет все базовые понятия и принципы, позволяющие ориентироваться в синтаксической конструкции и строить выражения…)

Сложение величин из регистров A₁ и B₂ традиционно можно представить выражением «A1 += B2» или мнемонической записью «ADD A1,B2», которую и следует оформить в машинный код. Так как архитектура процессора предельно проста и организовалась на польской записи, буквально необходимо сначала предопределить используемые в операции операнды, чтобы потом произвести саму конкретную операцию вычисления.
Так как используется сочетание регистров «A1» и «B2» в порядке «An,Bn», то под их определение следует указать машинный код AB₁₆. Выбор индексов на конкретных операндах выполняется кодами A1₁₆ и B2₁₆, что указывает на буквальность кодов. Так как индекс правого операнда равен двум, то в коде АЛУ-операции «Сумма» его следует указать явно в левой тетраде как 2A₁₆. Тем самым, становится очевидным размещения кода всего выражения как «A1 AB B2 2A». Но так как индекс B₂ указан явно в АЛУ-операции, байт команды «B2» можно исключить из цепочки, так как сам регистр B₂ не является приёмником результата и код сократится до одной из двух комбинаций записи «A1 AB 2A» или «AB A1 2A», так как от расположения префиксов перед операциями результат не изменяется и всё зависит от стиля программиста.

0000 A1      |----vv   ;A1 выбирает регистр A₁
0001    AB   |------v  ;AB задаёт порядок операндов A,B
0002       2A|ADD A1,B2;2A - ADD, где двойка выбирает индекс B₂
           ^----------^

Выражение «A1 = A1 + B2 - B3 & B4 | B5 ^ B6» можно описать последовательностью «A1 AB 2A 3B 4C 5D 6E», так как в каждом следующем коде операции явно указан и индекс правого операнда, что позволяет писать код компактно и производительно.

Максимально доступно каждому любителю
Так как Logisim куда доступнее и проще того же Proteus и компактнее KiCAD, вся схема процессора разрабатывалась в рамках проекта именно Logisim, чтобы проект был по-детски прост и лёгок для использовании заинтересованными любителями. По предварительным подсчётам, если схему проекта попытаться собирать микросхемами серии 74xx или отечественной номенклатуры, понадобится порядка 250 корпусов...
Скачать архив исходной схемы с прошивками можно по ссылке на странице проекта
Если смущает использование ПЗУ для дешифрации команд, имеется набросок схемы с использованием уровня комбинаторики, по которой можно осознать, что и красивую систему команд можно декодировать простейшим способом логических вентилей, без ущерба концептуальной задумки…

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

Edited by Alikberov

Share this post


Link to post
Share on other sites
1 час назад, Alikberov сказал:

легче запрограммировать

Чего-то этот слоган явно не от этого "процессора", если надо составлять коды АЛУ для каждой операции,

1 час назад, Alikberov сказал:

Программист при необходимости сам обязан позаботиться о всех операциях работы со стеком и описать их алгоритмом.

и прочих

1 час назад, Alikberov сказал:

02…09: Префикс повтора операции от 2 до 9 раз или пропуск группы операций по условию

:D

 

Была когда-то "процессорная" серия 589, в ней тоже надо было программировать на уровне микрокодов АЛУ. Как вспомню, так вздрогну. Тот ещё геморрой. :bad:

Share this post


Link to post
Share on other sites

Изготовление 2-х слойных плат от 2$, а 4-х слойных от 5$!

Быстрое изготовление прототипа платы всего за 24 часа! Прямая доставка с нашей фабрики!

Смотрите видео о фабрике JLCPCB: https://youtu.be/_XCznQFV-Mw

Посетите первую электронную выставку JLCPCB https://jlcpcb.com/E-exhibition чтобы получить купоны и выиграть iPhone 12, 3D-принтер и так далее...

Оказываeтся, я чуточку ошибся в расчётах когда планировал дизайн Регистрового Файла…
Если Logisim-схему рассматривать в ТТЛ-исполнении как есть на буферах, то потребуется:

  • К155ИР13 - 30 штук
  • К531АП4 - 60 штук
  • К555ИД6 - 6 штук
  • ЛА/ЛЕ/ЛИ - 7-8 штук

Но, если рассматривать вариант на мультиплексорах, то получается:

  • К155ИР13 - 30 штук
  • К155КП1 - 24 штуки
  • К555ИД6 - 3 штуки

Получается, 105 корпусов против 57, что вдвое меньше…
Почему-то я думал, что с буферами - экономнее.
Однако, наткнулся ещё на одно чудо Отечества - К1533ИР39, у которой не видно аналога. На двух корпусах можно выполнить весь Регистровый Файл и сэкономить практически на 50 микросхемах.
Правда, кристалл не такой уж доступный и снят с производства: Не во всяком регионе СНГ легко достать из-за охотников на драгмет…

Сейчас я пытаюсь отладить схему на мультиплексорах, а также - набросал дешифратор команд в Proteus, чтобы обойтись без ПЗУ и продемонстрировать простоту декодирования всех команд открытой комбинаторикой. Получается:

  • К155ЛА3 - 1 штука
  • К155ЛА4 - 4 штуки
  • К155ЛЕ1 - 1 штука
  • К155ЛЕ4 - 1 штука
  • К155ЛИ1 - 1 штука
  • К155ЛЛ1 - 1 штука
  • К155ЛН1 - 1 штука
  • К155ЛП5 - 1 штука

Пробная плата дешифратора на этих 11 микросхемах в Proteus получается примерно 50×70 - с кредитную карточку.
Чтобы переводить BCD-код, можно использовать ПР6, а в качестве АЛУ использовать ИК2, так как они менее запутанные, чем ИК4 или ИП3…
 

02.06.2020 в 17:52, Lexter сказал:

Чего-то этот слоган явно не от этого "процессора"

Как я уже сказал: Практически никакой из существующих процессоров инженерами не задумывался так, чтобы в дампе Hex-код напоминал аббревиатуры…
Напротив, во многих RISC'ах байт-код нужно либо жёстко зубрить, либо спихивать рутину на трансляторы…
Если даже этот блин и получился комом, то - я никак не инженер и специального образования не имею. К вопросу подходил как эстет-радиолюбитель и эстетически красивую таблицу команд увидел именно такой, а никак не иной.
(В том же i8086 код 00 означает ADD: Это как надо было инженерам обкуриться, чтобы обнулённая память состояла из операций сложения с вектором на память!? У i8080 код 00 - NOP, что более разумно. Хотя HLT - более логичнее: Попал в нули - остановись!)

koyaanisqatsi-combo.png

Share this post


Link to post
Share on other sites

Вебинар «Параметры выше, цена ниже. Обновление в линейке AC/DC- и DC/DC-преобразователей MORNSUN» (26.01.2021)

Приглашаем 26 января на бесплатный вебинар, посвящённый преимуществам и отличиям новых источников питания и DC/DC-преобразователей Mornsun. На вебинаре будут рассмотрены изолированные и неизолированные DC/DC-преобразователи последнего, четвертого, поколения (R4) и компактные модульные источники питания второго и третьего поколений (семейства LS/R3 и LD/R2) на плату. Рассмотрим новую группу продукции – встраиваемые источники питания в кожухе.

Подробнее

Какая производительность возможна у такого проца сделанного в реальном железе?


Пока ты жив, надежда есть.

Share this post


Link to post
Share on other sites

Вебинар "Новый BlueNRG-LP с Bluetooth 5.2 и Long Range — волшебная палочка разработчика IoT" (04/02/2021)

Приглашаем 4 февраля на бесплатный вебинар о BlueNRG-LP - новом программируемом чипе SoC STMicroelectronics. На вебинаре будут детально рассмотрены новые возможности, особенности подключения, аппаратные и программные средства для разработки, а также практические примеры работы с микросхемой.

Подробнее

1 час назад, mazzi сказал:

Какая производительность возможна у такого проца сделанного в реальном железе?

В идеальных условиях Logisim-симуляции получается:

  • Операции с префиксом повтора - 4…12 тактов
  • Операции обмена данными с памятью (AE/AF/BE/BF/CE/CF/DE/DF) - 4 такта + возможные такты ожидания готовности
  • Операции обращения к подпрограмме - 2 такта
  • Операции возврата из подпрограммы - 2…10 тактов
  • Операции условного блочного исполнения - 2…12 тактов
  • Операции выбора операндов АЛУ, вычислительные операции АЛУ - 2 такта

Пиковая производительность может достигать до 9 операций за 12 тактов с префиксом повтора.
Вся схема разрабатывалась достаточно долго из-за вникания в суть построения строгой синхронной архитектуры. А именно, по срезу тактового входа выполняется реконфигурация комбинаторики, а по фронту - запись в РОН. Так, если использовать тактовый импульс со скважностью ≥3, теоретически можно достигнуть стабильной работы реальной ТТЛ-схемы на частотах ≈10 МГц, где пиковая производительность может достигать от 2½ MIPS или 7½ MIPS.

Share this post


Link to post
Share on other sites

Плата STEVAL-IDB011V1 – тестируем идеи на новом BLE 5.2-чипе BlueNRG-LP

Новая система на кристалле BlueNRG-LP производства STMicroelectronics предназначена для устройств интернета вещей(IoT ) и не только, отвечает стандарту BLE 5.2 и поддерживает MESH-сети. Микросхема содержит малопотребляющий MCU Cortex-M0+. Отладка STEVAL-IDB011V1 позволит сэкономить время на разработку новых устройств.

Подробнее

Посмотрел, очень здорово у вас получилось. Сколько времени вы потратили на создание этой схемы?


Пока ты жив, надежда есть.

Share this post


Link to post
Share on other sites

И сразу вопрос, нафига оно нужно? Да еще и с такой унылой производительностью

11 часов назад, Alikberov сказал:

а частотах ≈10 МГц, где пиковая производительность может достигать от 2½ MIPS или 7½ MIPS.

Вот давайте, сколько тактов у вас занимают базовые мат операции: +, -, *, /. Для начала с целыми числами.

Edited by BARS_

Share this post


Link to post
Share on other sites
7 часов назад, BARS_ сказал:

И сразу вопрос, нафига оно нужно? Да еще и с такой унылой производительностью

Вот давайте, сколько тактов у вас занимают базовые мат операции: +, -, *, /. Для начала с целыми числами.

Библиотеки арифметики я не ещё не написал и ничего сказать не могу…

7 часов назад, mazzi сказал:

Посмотрел, очень здорово у вас получилось. Сколько времени вы потратили на создание этой схемы?

Первая схема за март 2019 была слишком запутанной и экспериментальной чисто ради прикола…
Но потом, за год раздумий на досуге, к этой весне несколько раз всё перерисовал и сделал схемку более симпатичной.
Получается, год потратил, так как демонстрационные схемы процессоров в Ютубе отталкивали своим классически непонятным машинным кодом.
На Хабрах есть тема как делать процессоры на Logisim по книжкам и там те же косяки: специфический машинный код…

Койяанискаци придумывался чуть ли ни с потолка и без книжек, чтобы убедиться в возможности организации красивого кода, так как за 60 лет инженеры так и не научились создавать процессоры с красивым машинным кодом…

И, прежде всего, это - проверка самого себя на уровень знаний, достаточный для построения ни хоть какого-то процессора, чтобы лампочками моргал непонятным машинным кодом… А конкретной архитектуры с конкретным кодом.

P.S.: Спасибо за вопросы…

Share this post


Link to post
Share on other sites

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

По поводу целесообразности такой работы могу сказать следующее всем критикующим. Ловля рыбы на удочку, рисование картин, написание стихов и прочее не целесообразно. Человек своим творением выражает себя, и не каждый способен осмыслить, а тем более воплотить в жизнь проект такой величины. У меня эта работа вызвала уважение и зависть в хорошем смысле этого слова. Респект и уважение автору!


Пока ты жив, надежда есть.

Share this post


Link to post
Share on other sites
18 часов назад, mazzi сказал:

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

Eсли быть честным, то сам этот процессор не возник на пустом месте…
Лет 25 пытаюсь придумать и разработать свой процессор CISC-архитектуры с интуитивно понятным машинным кодом. А так как проектирование CISC - довольно сложное дело даже в рамках Verilog-эскиза, то как промежуточный вариант я решил использовать RISC-ядро.
К сожалению, предлагаемые рынком PIC, ATmega или NIOS не удовлетворяют моей идеологии: Не хотел бы я в своей CISC-архитектуре с интуитивно понятным машинным кодом иметь чужое RISC-ядро, пусть и производительное, но с безобразным (в плане эстетики) кодом…
А так как процессор задумывался лишь для того, чтобы сложную CISC-инструкцию отрабатывать десятком RISC-инструкций, то никакой библиотеки в плане арифметики не планировалось концептуально.

Критикуют меня везде и всюду за этот мой фанатизм эстетической таблицы команд, который никому не нужен уже лет 50, так как ассемблеры и компиляторы для того и созданы, чтобы не опускать программиста до уровня машинного кода.
Однако, раз в цифровом мире нет оглядки на эстетику, то я решил взять флаг в руки и шагать своей тропой. Пусть она ведёт меня невесть куда, но процессор с осмысленным машинным кодом - уже появился.

И лишь недавно я выделил его из-под CISC-проекта как самостоятельный и самодостаточный проект и дал ему кодовое название, после просмотра одноимённого фильма.
Не будь детской мечты придумать CISC, не было бы и этого RISC'а, далёкого от идеала, но всё таки с приветливым машинным кодом «на фоне стальных кораблей»…:pilot:

18 часов назад, mazzi сказал:

Респект и уважение автору!

И Вам спасибо за проявленный интерес.:thank_you2:

В мире хаоса индустриальных войн пусть данная идея останется маленьким росточком, красоту которого можно разглядеть и невооружённым глазом: Без дизассемблера и отладчика…:rolleyes:

P.S.: Просто обидно, что в XXI веке студентов учат проектировать процессоры по-старинке:
«Лишь бы работало! А там - покрасим, упакуем в красивый корпус и зальём компаундом, чтобы заусенцы не торчали щетиной…»

Share this post


Link to post
Share on other sites

Кстати, теоретически в процессоре можно организовать конвейер и считывание команд не по одному байту, а сразу 32-битным словом.
Тогда последовательность «AB A1 1B 2C 3D 4E» как код:

AB      |ARG An,Bn
   A1   |REG A1
      1B|SUB A1,B1
      2C|AND A1,B2
      3D|OR  A1,B3
      4E|EOR A1,B4

развернётся в код:

AB A1 1B|SUB A1,B1
AB A1 2C|AND A1,B2
AB A1 3D|OR  A1,B3
AB A1 4E|EOR A1,B4

В таком случае, все полные команды будут выполняться за один такт.
Правда, в таком случае потребуется ввести 3 дешифратора команд, каждый из которых вычленял бы из 32-битного слова именно свой байт…
Лет 12 тому назад я пытался заниматься подобными устройствами аппаратного разбора формул в открытом ASCII-кодировании…

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

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

Так как в схеме каждый из 30 РОН оснащён светодиодами сборками в светофоры, в грубых полевых условиях прямо на любые эти регистры можно навесить непосредственную подтяжку под датчики/двигатели/соленоиды и организовать механическую автоматику с непосредственным программным управлением через РОН без обращения к портам ввода/вывода и непосредственной индикацией состояния процессора…

Например, PICO-8 и Gigatron, а также MegaProcessor или MyCPU хоть и разработаны специалистами, но никто не подходил к вопросу с чувством эстета, опираясь на сухой технологический расчёт.
К тому же, те же языки программирования, как КОБОЛ, хоть и задумывались с акцентом на гуманитарии, но в широком практическом применении оказались непрактичными и неудобными…
Сейчас, с заменой файлов конфигурации *.inf и *.ini на *.xml, получается, что история снова повторяется…

P.S.: Можно к данному процессору относиться как к шестнадцатеричному подобию Кобола.
Программирование на нём не лишено недостатков. А в минимальном своём исполнении всё способно функционировать и на шести РОН, вместо тридцати.

Edited by Alikberov

Share this post


Link to post
Share on other sites

Нарисовaл (кое-как) структурную схему процессора:

Koyaanisqatsi-CPU.png.f12fc6155f938be36a935fb826f25178.png

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

Набросал Verilog-эскиз - получилось порядка 386 эффективных (синтезируемых) строк…
Писал небрежно, так как просто любопытно стало посмотреть, как это переварит Quartus…

Flow Status			Successful - Sun Jul 12 03:26:43 2020
Quartus II 64-Bit Version	15.0.0 Build 145 04/22/2015 SJ Web Edition
Revision Name			Koyaanisqatsi_CPU
Top-level Entity Name		Koyaanisqatsi_CPU
Family				Cyclone V
Device				5CEBA2F23C7
Timing Models			Final
Logic utilization (in ALMs)	395 / 9,430 ( 4 % )
Total registers			374
Total pins			28 / 224 ( 13 % )
Total virtual pins		0
Total block memory bits		0 / 1,802,240 ( 0 % )
Total DSP Blocks		0 / 25 ( 0 % )
Total HSSI RX PCSs		0
Total HSSI PMA RX Deserializers	0
Total HSSI TX PCSs		0
Total HSSI PMA TX Serializers	0
Total PLLs			0 / 4 ( 0 % )
Total DLLs			0 / 4 ( 0 % )

К сожалению, никакой отладочной платы не имею и могу полагаться лишь на симуляцию.
Симуляция работает в целом и где-то докопался до таблиц с максимальной задержкой порядка ≈20 нс - около 50 МГц получается?
Для восьмибитника с 64 Кб памяти это - слишком даже высокая частота!
(Учитывая мой РАДИО-86РК с 1,776 МГц, что тогда вполне хватало…)

Koyaanisqatsi-Syntez.thumb.png.307d59ad17fd39516f08b1144a577422.png

Какая-то жидкая схема получилась.
Слева - дешифратор команд: Красота, простота и компактность…
Внизу - слишком много разрозненной логики, так как глядя в облако можно увидеть, что всё свалено кучей в основной модуль, что не очень хорошо!

Koyaanisqatsi-zone.png.5675e018a3b085a00d5ec4b443f5774d.png

Оказывается на ПЛИС занимаемая площадь совсем мизерная, хотя я беспокоился.
Тем самым, можно щедро фаршировать конвейерами и обвешивать различной периферийной средой…

Наткнулся на статью Хабра, где демонстрируется описание процессора под ModelSim, но в Logisim параллельно собирается интерактивная модель…
Дело в том, что Verilog я начал изучать лишь лет 10 тому назад и практически в нём так и не разобрался, так как многие из эскизов моих процессоров в нём не пошли в Icarus Verilog, а изучение графиков в GTKwave ни к чему не приводило, так как соответствующий институт я не оканчивал и не умею разбираться в формулах и графиках.
И лишь год тому назад решил приколоться и скачал Logisim, набросав в нём первый вариант Койяанискаци. И за неделю отладки, к моему большому удивлению, схема завелась и стала адекватно исполнять код. Тем самым, 10 лет барахтанья в Verilog литературы ни к чему толковому не привели, а шуточный симулятор помог наконец-то добиться хоть чего-то работающего!

Неделю назад скачал и установил Quartus с ModelSim по совету. Но, понял, что без Logisim не обойтись,  так как снова какие-то графики, таблицы отчётов, которые я не понимаю вообще!:ph34r:
Пусть это и инженерные инструменты, но без Logisim отладить свой процессор я бы никогда не смог, так как ориентируюсь на ощупь визуально: Бегаю глазами по схеме и вижу, какую логику нужно врезать там-то и там. То есть, схему год назад делал наобум без чёткого плана, лишь бы заставить исполнять «акынскую систему команд».

Нашёл один онлайн-сервис с визуализацией Verilog-листинга в электрическую схему.
Это мне здорово помогло проработать Verilog-эскиз, так как никакие документированные примеры описания регистрового файла не подходили под мой исходный регистровый файл Logisim-схемы. А значит, модель могла оказаться нерабочей и требовала бы отладки по академическим графикам! Пф-ффф…

Напротив, год назад, прорабатывая в Logisim узел выборки команд, ориентировался на свой график, взятый с потолка:

             FETCH  (WAIT) DECODE+DO  WRITE RAM      FETCH DECODE+DO FETCH DECODE+DO
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
       ┌───┐t1 ┌───┐tw ┌───┐t3+┌───┐t4+┌───┐t5+┌───┐t1 ┌───┐t2 ┌───┐t1 ┌───┐t2 ┌───┐ 
CLOCK ─┘...└───┘T1 └───┘T2 └───┘T3+└───┘T4+└───┘T5+└───┘T1 └───┘T2 └───┘T1 └───┘T2 └
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
      ...........        ┌────────........┌──────........ ┌───────...........┌──────..
READY ───────────────────┘        ........┘      ........─┘       ...........┘      ..
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
            ┌───────────────┐                       ┌───────┐       ┌───────┐       ┌─
   M1 ──────┘       WAIT    └───────────────────────┘       └───────┘       └───────┘ 
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
                            ┌───────┐                       ┌───────┐       ┌───────┐ 
   M2 ──────────────────────┘       └───────────────────────┘       └───────┘       └─
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
                                    ┌───────┐                                         
   M3 ──────────────────────────────┘       └─────────────────────────────────────────
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
                                            ┌───────┐                                 
   M4 ──────────────────────────────────────┘       └─────────────────────────────────
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
 ADDR -<IP.......................IP><Bi:Ci....Bi:Ci><IP..........................IP>--
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
                ┌───────────────┐                       ┌───────┐       ┌───────┐
 READ ──────────┘               └───────────────────────┘       └───────┘       └─────
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
                                        ┌───────┐                                     
WRITE ──────────────────────────────────┘       └─────────────────────────────────────
       |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |

P.S.: В общем, «процессор акына» с «акынской системой команд» требует и «акынских инструментов», как Logisim.:moil:
Без этого - никак! Не учился же я строить процессоры в институтах Intel!:lol2:

Edited by Alikberov

Share this post


Link to post
Share on other sites

Написал Вторую статью с пошаговой иллюстрацией проектирования Койяанискаци, так как начал проектирование с нуля…

Сейчас я полностью игнорирую моменты, связанные с производительностью.
Регистровый Файл вынес в память, аналогично как в MOS 6502…
Операция АЛУ занимает целых 5 тактов:

  • Цикл M₀ читает регистр A₀ с PSW-словом
  • Цикл M₁ читает регистр правого операнда
  • Цикл M₂ читает регистр-приёмника левого операнда
  • Цикл M₆ сохраняет результат в ячейку регистра-приёмник
  • Цикл M₉ сохраняет PSW-слово

Иными словами, операция «A₁ += B₂» разворачивается в:

  • M₀: Load PSW:[0x00A₀]
  • M₁: Load SRC:[0x00B₂]
  • M₂: Load DST:[0x00A₁]
  • M₆: Save [0x00A₁]:DST+SRC
  • M₉: Save [0x00A₀]:PSW

И требует 1+5=6 тактов, где 1 такт - на считывание кода самой операции, а ещё 5 - на все те циклы…

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

Share this post


Link to post
Share on other sites
02.06.2020 в 13:48, Alikberov сказал:

Не имеется ввиду код стиля «O'Kей, процик, вычисли мне среднее факториальное», а планировался машинный код с минимальным уровнем вхождения в основы искусства его программирования, не требующего жёсткой зубрёжки и заучивания всех команд.

Для чайников, наверно, звучит красиво, а с профессиональной точки зрения маразм! ВСЕ ассемблеры ВСЕХ процессоров очень похожи, все делятся на одни и те же группы команд, все команды подчиняются жесткой логике, поэтому для их запоминания достаточно помнить очень ограниченный набор правил этой логики.

Практически всегда (в любом ассемблере) существует около 20-50 базовых команд которые очень легко запомнить потому что это производные от элементарных математических операций с числами(регистрами) и/или с адресами.

Интересно кто вам оплачивает эту достаточно ресурсоемкую работу???

Неужели вы миллионер и от нечего делать рисуете процессоры??? - Сложно поверить.

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

Правильно?

Нарисовать процессор уже давным давно не проблема, проблемма его изготовить по доступной цене.

Edited by ruhi
дополнил

Можно сделать все! Но чем больше можно, тем больше нельзя!

Share this post


Link to post
Share on other sites
12.01.2021 в 12:00, ruhi сказал:

Нарисовать процессор уже давным давно не проблема, проблемма его изготовить по доступной цене.

Бесплатное производство процессоров объявили - решил на скорую руку придумать оригинальную архитектуру…:buba:

Share this post


Link to post
Share on other sites
8 часов назад, Alikberov сказал:

решил на скорую руку придумать оригинальную архитектуру

"на скорую руку" вместе с "оригинальную" звучит, действительно, очень захватывающе :) ! Рядом лучше не стоять :) ! Шарахнет!


Можно сделать все! Но чем больше можно, тем больше нельзя!

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • и что? Ну и у меня .... только толку ТУТ с тебя с твоей   ???! я с полутонами - не дружу .... посему "по-полной" привык .... ламерье в стойло ставить .... потому ПОВТОРЯЮ - твой ФЛУД тут будет подчищен и не несет НИЧЕГО .... окромя упоминания про меня .... Еще хочешь на БАН наговорить?
    • У меня LUKEY  702 !! А ты слегка ... не офуел ?
    • но еще больше - делает .... Посему хитрожопость, жмотство и ламерство афтара - будут наказаны ... а пост - удален ... Ты в секскунданты к аФтару записАлся, решил пятаком в теме засветить с постом НИ О ЧЕМ?
    • Краб много чего говорит - не надо ему верить !
    • решил засрать весь форум:   Ответ ТАМ ....
    • в книги ... ТУПАЯ ЗАМЕНА деталей без понимания ПРИЧИНЫ НЕИСПРАВНОСТИ - это глупость ....
    • В описание на протокол RDS все есть, там все указывается какой номер символа в строке, что это название станции, радио текст или еще что то. Я уже давал asvetp процедуру декодирования потока RDS, но это не так быстро перенести код с Си на Ассемблер. Да и еще небольшой момент rda5807 декодирует ошибки только в первых двух блоках RDS, что влияет на качество приема данных, эту проблему можно частично решить принимая только максимально сильный уровень RDS (не путать с уровнем RSSI).Мои примеры работы с RDS можно посмотреть здесь https://pichobby.lg.ua/shemu/sound.html

  • Модуль усилителя звука PAM8403

  • Similar Content

    • By KLARUS
      В этой теме периодически буду предлагать компьютерное железо.
       • 1.Офисная платформа LGA1155 (motherboard + CPU):
      Asus P8H61 - MX (R2.0)
      Intel Pentium G2020
      Всё абсолютно исправно, планка I/O в комплекте, мало б/у, любые тесты по требованию, вплоть до видео, модуль DDR III 10600 2 GB и кулер (PWM) по желанию, отправка почтой или ТК ПЭК (предпочтительней) за счёт покупателя.
      Ценник вижу в районе 5 000.
       • 2.Gigabyte GTX650 1GDR5/128Bit, не играла, не майнила, не жарилась, не разбиралась, в полном порядке - 2 500
      Обсуждаемо.
    • By Даниил Милоянин
      Доброго времени суток.
      У меня проблема, мне нужно сделать в программе Logisim кодовый замок (не собрать, просто на логике). В интернете есть всего одна схема замка (https://www.youtube.com/watch?v=cz1sd5DFmKc ) которая вроде как и работает, но схема LockControl показанная в начале видео не показана полностью. Не могли бы вы помочь в создании схемы.пожалуйста.
       
    • By thunder367
      Приветствую, форумчане!
      Перерыл весь интернет, информации по процу нет. Обращаюсь к вам за помощью, может у кого окажется.
    • By energy455
      Есть у меня такая штука -
      http://images.yandex.ru/yandsearch?source=psearch&text=%D0%9C4283&pos=0&rpt=simage&lr=39&uinfo=sw-1504-sh-714-fw-1279-fh-508-pd-1&img_url=http%3A%2F%2Fwww.zip-2002.ru%2Falbom%2Fm4283_200mk_%28jnom%293.jpg
      Можно ли что бы он показывал нагрузку или нагрев процера?
      Можно ли схему?
    • By PTK
      Куплю платы Siemens Simatic S5 любых линеек - S5-90U/S5-95U/S5-100U/S5-115U/S5-130/S5-135/S5-150/S5-155
      А также S7, CPU, блоки питания, карты памяти, модули ввода вывода дискретного и цифрового сигнала и т.д.
      Жду предложений на sirotec@mail.ru
×
×
  • Create New...