Alikberov Опубликовано 2 июня, 2020 Поделиться Опубликовано 2 июня, 2020 (изменено) В противоположность известных всем процессоров «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 корпусов... Скачать архив исходной схемы с прошивками можно по ссылке на странице проекта… Если смущает использование ПЗУ для дешифрации команд, имеется набросок схемы с использованием уровня комбинаторики, по которой можно осознать, что и красивую систему команд можно декодировать простейшим способом логических вентилей, без ущерба концептуальной задумки… Эмуляция? Никакого программного эмулятора не задумывалось специально, чтобы архитектурно процессор изначально готовился к реализации на физических макетных платах и не содержал в себе решений, которые аппаратно крайне сложно будет реализовывать в силу излишней вольности в эмуляторе. Вся схема разрабатывалась несколько лет в часы досуга эпизодически и несколько раз перерисовывалась вся с чистого листа. Изменено 2 июня, 2020 пользователем Alikberov 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Lexter Опубликовано 2 июня, 2020 Поделиться Опубликовано 2 июня, 2020 1 час назад, Alikberov сказал: легче запрограммировать Чего-то этот слоган явно не от этого "процессора", если надо составлять коды АЛУ для каждой операции, 1 час назад, Alikberov сказал: Программист при необходимости сам обязан позаботиться о всех операциях работы со стеком и описать их алгоритмом. и прочих 1 час назад, Alikberov сказал: 02…09: Префикс повтора операции от 2 до 9 раз или пропуск группы операций по условию Была когда-то "процессорная" серия 589, в ней тоже надо было программировать на уровне микрокодов АЛУ. Как вспомню, так вздрогну. Тот ещё геморрой. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Paguo-86PK Опубликовано 20 июня, 2020 Поделиться Опубликовано 20 июня, 2020 Оказыва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 - более логичнее: Попал в нули - остановись!) 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
mazzi Опубликовано 21 июня, 2020 Поделиться Опубликовано 21 июня, 2020 Какая производительность возможна у такого проца сделанного в реальном железе? 0 Пока ты жив, надежда есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 21 июня, 2020 Автор Поделиться Опубликовано 21 июня, 2020 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. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
mazzi Опубликовано 22 июня, 2020 Поделиться Опубликовано 22 июня, 2020 Посмотрел, очень здорово у вас получилось. Сколько времени вы потратили на создание этой схемы? 0 Пока ты жив, надежда есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
BARS_ Опубликовано 22 июня, 2020 Поделиться Опубликовано 22 июня, 2020 (изменено) И сразу вопрос, нафига оно нужно? Да еще и с такой унылой производительностью 11 часов назад, Alikberov сказал: а частотах ≈10 МГц, где пиковая производительность может достигать от 2½ MIPS или 7½ MIPS. Вот давайте, сколько тактов у вас занимают базовые мат операции: +, -, *, /. Для начала с целыми числами. Изменено 22 июня, 2020 пользователем BARS_ 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 22 июня, 2020 Автор Поделиться Опубликовано 22 июня, 2020 7 часов назад, BARS_ сказал: И сразу вопрос, нафига оно нужно? Да еще и с такой унылой производительностью Вот давайте, сколько тактов у вас занимают базовые мат операции: +, -, *, /. Для начала с целыми числами. Библиотеки арифметики я не ещё не написал и ничего сказать не могу… 7 часов назад, mazzi сказал: Посмотрел, очень здорово у вас получилось. Сколько времени вы потратили на создание этой схемы? Первая схема за март 2019 была слишком запутанной и экспериментальной чисто ради прикола… Но потом, за год раздумий на досуге, к этой весне несколько раз всё перерисовал и сделал схемку более симпатичной. Получается, год потратил, так как демонстрационные схемы процессоров в Ютубе отталкивали своим классически непонятным машинным кодом. На Хабрах есть тема как делать процессоры на Logisim по книжкам и там те же косяки: специфический машинный код… Койяанискаци придумывался чуть ли ни с потолка и без книжек, чтобы убедиться в возможности организации красивого кода, так как за 60 лет инженеры так и не научились создавать процессоры с красивым машинным кодом… И, прежде всего, это - проверка самого себя на уровень знаний, достаточный для построения ни хоть какого-то процессора, чтобы лампочками моргал непонятным машинным кодом… А конкретной архитектуры с конкретным кодом. P.S.: Спасибо за вопросы… 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
mazzi Опубликовано 22 июня, 2020 Поделиться Опубликовано 22 июня, 2020 Я тоже пару лет назад делал самодельный процессор в Логисиме. Но после того как он у меня заработал и я сделав несколько команд, составил программу и она заработала - энтузиазм пропал и я забросил это дело. Ваша схема намного сложнее и самое главное - она работает. По поводу целесообразности такой работы могу сказать следующее всем критикующим. Ловля рыбы на удочку, рисование картин, написание стихов и прочее не целесообразно. Человек своим творением выражает себя, и не каждый способен осмыслить, а тем более воплотить в жизнь проект такой величины. У меня эта работа вызвала уважение и зависть в хорошем смысле этого слова. Респект и уважение автору! 0 Пока ты жив, надежда есть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 23 июня, 2020 Автор Поделиться Опубликовано 23 июня, 2020 18 часов назад, mazzi сказал: Я тоже пару лет назад делал самодельный процессор в Логисиме. Но после того как он у меня заработал и я сделав несколько команд, составил программу и она заработала - энтузиазм пропал и я забросил это дело. Ваша схема намного сложнее и самое главное - она работает. Eсли быть честным, то сам этот процессор не возник на пустом месте… Лет 25 пытаюсь придумать и разработать свой процессор CISC-архитектуры с интуитивно понятным машинным кодом. А так как проектирование CISC - довольно сложное дело даже в рамках Verilog-эскиза, то как промежуточный вариант я решил использовать RISC-ядро. К сожалению, предлагаемые рынком PIC, ATmega или NIOS не удовлетворяют моей идеологии: Не хотел бы я в своей CISC-архитектуре с интуитивно понятным машинным кодом иметь чужое RISC-ядро, пусть и производительное, но с безобразным (в плане эстетики) кодом… А так как процессор задумывался лишь для того, чтобы сложную CISC-инструкцию отрабатывать десятком RISC-инструкций, то никакой библиотеки в плане арифметики не планировалось концептуально. Критикуют меня везде и всюду за этот мой фанатизм эстетической таблицы команд, который никому не нужен уже лет 50, так как ассемблеры и компиляторы для того и созданы, чтобы не опускать программиста до уровня машинного кода. Однако, раз в цифровом мире нет оглядки на эстетику, то я решил взять флаг в руки и шагать своей тропой. Пусть она ведёт меня невесть куда, но процессор с осмысленным машинным кодом - уже появился. И лишь недавно я выделил его из-под CISC-проекта как самостоятельный и самодостаточный проект и дал ему кодовое название, после просмотра одноимённого фильма. Не будь детской мечты придумать CISC, не было бы и этого RISC'а, далёкого от идеала, но всё таки с приветливым машинным кодом «на фоне стальных кораблей»… 18 часов назад, mazzi сказал: Респект и уважение автору! И Вам спасибо за проявленный интерес. В мире хаоса индустриальных войн пусть данная идея останется маленьким росточком, красоту которого можно разглядеть и невооружённым глазом: Без дизассемблера и отладчика… P.S.: Просто обидно, что в XXI веке студентов учат проектировать процессоры по-старинке: «Лишь бы работало! А там - покрасим, упакуем в красивый корпус и зальём компаундом, чтобы заусенцы не торчали щетиной…» 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 25 июня, 2020 Автор Поделиться Опубликовано 25 июня, 2020 (изменено) Кстати, теоретически в процессоре можно организовать конвейер и считывание команд не по одному байту, а сразу 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.: Можно к данному процессору относиться как к шестнадцатеричному подобию Кобола. Программирование на нём не лишено недостатков. А в минимальном своём исполнении всё способно функционировать и на шести РОН, вместо тридцати. Изменено 25 июня, 2020 пользователем Alikberov 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 15 июля, 2020 Автор Поделиться Опубликовано 15 июля, 2020 (изменено) Нарисовaл (кое-как) структурную схему процессора: Не люблю малевать то, что не сможет ожить… Вот в 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 МГц, что тогда вполне хватало…) Какая-то жидкая схема получилась. Слева - дешифратор команд: Красота, простота и компактность… Внизу - слишком много разрозненной логики, так как глядя в облако можно увидеть, что всё свалено кучей в основной модуль, что не очень хорошо! Оказывается на ПЛИС занимаемая площадь совсем мизерная, хотя я беспокоился. Тем самым, можно щедро фаршировать конвейерами и обвешивать различной периферийной средой… Наткнулся на статью Хабра, где демонстрируется описание процессора под ModelSim, но в Logisim параллельно собирается интерактивная модель… Дело в том, что Verilog я начал изучать лишь лет 10 тому назад и практически в нём так и не разобрался, так как многие из эскизов моих процессоров в нём не пошли в Icarus Verilog, а изучение графиков в GTKwave ни к чему не приводило, так как соответствующий институт я не оканчивал и не умею разбираться в формулах и графиках. И лишь год тому назад решил приколоться и скачал Logisim, набросав в нём первый вариант Койяанискаци. И за неделю отладки, к моему большому удивлению, схема завелась и стала адекватно исполнять код. Тем самым, 10 лет барахтанья в Verilog литературы ни к чему толковому не привели, а шуточный симулятор помог наконец-то добиться хоть чего-то работающего! Неделю назад скачал и установил Quartus с ModelSim по совету. Но, понял, что без Logisim не обойтись, так как снова какие-то графики, таблицы отчётов, которые я не понимаю вообще! Пусть это и инженерные инструменты, но без 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. Без этого - никак! Не учился же я строить процессоры в институтах Intel! Изменено 15 июля, 2020 пользователем Alikberov 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 11 января, 2021 Автор Поделиться Опубликовано 11 января, 2021 Написал Вторую статью с пошаговой иллюстрацией проектирования Койяанискаци, так как начал проектирование с нуля… Сейчас я полностью игнорирую моменты, связанные с производительностью. Регистровый Файл вынес в память, аналогично как в 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.: Тем самым, за производительностью не гонюсь, но хочу попробовать получить эскиз Койяанискаци с наименьшим количеством элементов, если браться всё-таки его делать рассыпухой на ТТЛ… 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ruhi Опубликовано 12 января, 2021 Поделиться Опубликовано 12 января, 2021 (изменено) 02.06.2020 в 13:48, Alikberov сказал: Не имеется ввиду код стиля «O'Kей, процик, вычисли мне среднее факториальное», а планировался машинный код с минимальным уровнем вхождения в основы искусства его программирования, не требующего жёсткой зубрёжки и заучивания всех команд. Для чайников, наверно, звучит красиво, а с профессиональной точки зрения маразм! ВСЕ ассемблеры ВСЕХ процессоров очень похожи, все делятся на одни и те же группы команд, все команды подчиняются жесткой логике, поэтому для их запоминания достаточно помнить очень ограниченный набор правил этой логики. Практически всегда (в любом ассемблере) существует около 20-50 базовых команд которые очень легко запомнить потому что это производные от элементарных математических операций с числами(регистрами) и/или с адресами. Интересно кто вам оплачивает эту достаточно ресурсоемкую работу??? Неужели вы миллионер и от нечего делать рисуете процессоры??? - Сложно поверить. У вас определленно талант в вешании высокотехнологичной чепухи на уши ! Похоже в этом заключается секрет! Вы навешали какому то милионеру - он выделил вам бюджет, и здесь мы видим ваш отчет по проделанной работе. Правильно? Нарисовать процессор уже давным давно не проблема, проблемма его изготовить по доступной цене. Изменено 12 января, 2021 пользователем ruhi дополнил 0 Можно сделать все! Но чем больше можно, тем больше нельзя! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 14 января, 2021 Автор Поделиться Опубликовано 14 января, 2021 12.01.2021 в 12:00, ruhi сказал: Нарисовать процессор уже давным давно не проблема, проблемма его изготовить по доступной цене. Бесплатное производство процессоров объявили - решил на скорую руку придумать оригинальную архитектуру… 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
ruhi Опубликовано 15 января, 2021 Поделиться Опубликовано 15 января, 2021 8 часов назад, Alikberov сказал: решил на скорую руку придумать оригинальную архитектуру "на скорую руку" вместе с "оригинальную" звучит, действительно, очень захватывающе ! Рядом лучше не стоять ! Шарахнет! 0 Можно сделать все! Но чем больше можно, тем больше нельзя! Ссылка на комментарий Поделиться на другие сайты Поделиться
Alikberov Опубликовано 7 июля, 2021 Автор Поделиться Опубликовано 7 июля, 2021 Кое-как накидал Web-эмулятор онлайн: Запуск эмулятора (инструкции не имеют фиксированного размера) Классический режим (одна инструкция - один байт, как и работает классическая Logisim-схема) Автозапуск Автозапуск в Классическом режиме Автозапуск листинга программы, загруженного с gist'а Эмулятор пока ещё сырой и активно дорабатывается, но уже вполне годится не только для визуализации задуманной идеи в демонстрации, но и для разработки и отладки кода под данную архитектуру. Немного занимался и проработкой акынской карты портов Устройств Ввода-Вывода… Не нарушая принципа «что вижу - с тем и работаю», пришёл к оптимальному варианту, где: Регистр D9 служит номенклатурным селектором целевой ИМС Регистр D8 служит индексным селектором выбранной категории ИМС ╔════╤════════╤════════════════════════════════════════════════════════════════╗ ║ D9 │ ИМС │ Описание доступа к ресурсам микросхемы через РОН процессора ║ ╠════╪════════╪════════════════════════════════════════════════════════════════╣ ║0x32│ i8232 │ D0 - Регистр Данных ║ ║ │1816ВЕ32│ D1 - Регистр Статуса ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x45│ i8245 │ D0 - Данные ║ ║ │ │ D1 - Адрес ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x53│ i8253 │ D0/D1/D2 - Каналы Счётчиков 0/1/2 ║ ║ │К580ВИ53│ D3 - Регистр Статуса Таймера ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x55│ i8255 │ D0/D1/D2 - Порты A/B/C ППА ║ ║ │К580ВИ55│ D3 - Регистр Статуса ППА ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x57│ i8257 │ D0/D2/D4/D6 - Каналы 0/1/2/3: ПДП Адрес ║ ║ │ │ D1/D3/D5/D7 - Каналы 0/1/2/3: ПДП Счёт ║ ║ │К580ВТ57│ D8 - Регистр Статуса ПДП ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x72│ i8272 │ D0 - Регистр Статуса ║ ║ │FDD Unit│ D1 - Регистр Данных ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x75│ i8275 │ D0 - Регистр Данных ║ ║ │К580ВГ75│ D1 - Регистр Статуса ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x79│ i8279 │ D0 - Регистр Данных ║ ║ │К580ВВ79│ D1 - Регистр Статуса ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x93│ FD1793 │ D0 - Регистр Команд / Регистр Статуса ║ ║ │ │ D1 - Регистр Дорожки ║ ║ │ │ D2 - Регистр Сектора ║ ║ │1818ВГ93│ D3 - Регистр Данных ║ ╚════╧════════╧════════════════════════════════════════════════════════════════╝ ╔════╤════════╤════════════════════════════════════════════════════════════════╗ ║ D9 │ ИМС │ Описание доступа к ресурсам микросхемы через РОН процессора ║ ╠════╪════════╪════════════════════════════════════════════════════════════════╣ ║0x06│ KS58006│ D0…D7 - Порты доступа к DTMF ║ ║ │1008ВЖ16│ ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x31│ UM91531│ D0…D7 - Порты доступа к DTMF ║ ║ │1008ВЖ19│ ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x70│ CMS8870│ D0…D7 - Порты доступа к DTMF ║ ║ │1008ВЖ18│ ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x73│ 74373 │ D0…D7 - Порты доступа к регистрам ║ ║ │ 555ИР22│ ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x74│ 7474 │ D0…D7 - Порты доступа к триггерам ║ ║ │ 155ТМ2 │ ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x10│AY3-8910│ D0…D7 - Порты доступа к Синтезатору звука ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x49│ YM2149 │ D0…D7 - Порты доступа к Синтезатору звука ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x51│TDA5051A│ D0…D7 - Порты доступа к AC-Модему ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x06│ DS2406 │ D0…D7 - Порты доступа к 1-Wire ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x08│ DS2408 │ D0…D7 - Порты доступа к 1-Wire ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x20│ DS18S20│ D0…D7 - Порты доступа к 1-Wire ║ ╟────┼────────┼────────────────────────────────────────────────────────────────╢ ║0x90│ DS9490R│ D0…D7 - Порты доступа к 1-Wire ║ ╚════╧════════╧════════════════════════════════════════════════════════════════╝ Откуда видно, что программисту карта адресации УВВ не нужна в принципе: Если программист знает специфику целевой интерфейсной микросхемы, он просто заносит её серию в регистр D9 BCD-кодированием, а через регистры D0…D7 уже обращается к выбранной ИМС как к порту. Тем самым, архитектура максимально развёрнута и открыта к масштабированию. Естественно, в рамках одной платформы нет необходимости подключения всех ИМС серии i82xx и можно смешивать. Главное, чтобы программа/драйвер в перспективе могла уверено по индексу в D9 найти нужную ИМС со смежным номенклатурным индексом. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.