Целью было сделать некое программируемое Тьюринг-полное устройство, пригодное к использовании в качестве Центрального Процессорного. Основной акцент делался на кодировании микропрограмм посредством реального механического дампа из шестнадцатеричных тумблеров. А чтобы не придумывать очередной бинарный машинный код, за основу были взяты тетрады этих тумблеров.
Тем самым…
Код «A1» на тумблере в дампе так и означает выборку регистра «A1»
Код «B2» означает выборку регистра «B2»
Код «AB» означает группу операндов «A,B» для АЛУ-операций. В данном случае - «A1,B2»
Код «EC» означает «End-by-Carry» - выход из подпрограммы по флагу «CF»
Тем самым, чтобы кодировать какую-нибудь небольшую программу, не нужно иметь у себя под носом даже шпаргалку, так как сами тетрады байтов машинного кода являются аббревиатурами и годятся в качестве мнемоники ассемблера сами-по-себе.
В исполнении Принстонской архитектуры на одну операцию затрачивается по 2 такта. Соответственно, Гарвардский вариант требует по 1 такту.
Разрядность контроллера может варьироваться от 4 бит до 64, в зависимости от поставленной задачи и реализации. Количество всех Регистров Общего Назначения может также варьироваться от 6 до 30.
Причём, роль РОН могут исполнять любые типовые устройства: Таймеры, ПДП, Датчики, Сервоприводы и т.п… Также, за РОН можно использовать и универсальную магазинную память в режиме FIFO или LIFO, чтобы обеспечить стековые операции. Концептуально архитектура не ограничивает конечную реализацию процессора. Так как самое главное в процессоре - дешифратор команд, который не должен менять свою логику и обязан декодировать команды в соответствии с парадигмой описываемой архитектуры.
В классическом варианте выполнение программы выполняется не спешно:
Код:
0000 A9 |REG A9 ; (Такт #1) Выборка регистра блока A с индексом #9 0001 AB |ARG A,B ; (Такт #2) Сборка группы операндов регистровых групп A и B 0002 0F|MOV A9,B0 ; (Такт #3) Фиксирование в левом операнде данных правого | | ^^ \ / || V |/ | | +----------+
Но можно ускорить весь процесс:
Код:
0000 A9 AB 0F|MOV A9,B0 ; (Такт #1) Операция выполняется за 1 такт
Если усложнить декодирование команд добавлением нескольких дешифраторов.
Вложение:
Комментарий к файлу: Четыре дешифратора команд декодируют 32-битное машинное слово в полную команду за 1 такт Koyaanisqatsi-quatro.png [70.5 KiB]
Скачиваний: 25
Минимально же весь микроконтроллер без АЛУ и РОН можно представить вот так:
Вложение:
Комментарий к файлу: Минимальный вариант схемы процессора без АЛУ и РОН Koyaanisqatsi_minimal.png [87.43 KiB]
Скачиваний: 29
Допустим, можно на «Кой-Коде» организовать подобие RISC-ядра для эмуляции выполнения команд процессора i8080. Сначала назначим все регистры i8080 на Кой-Регистры:
Код:
B - B1 C - C1 D - B2 E - C2 H - B3 L - C3 SP- B4C4 A - A1 PC- B5C5 PSW-A1A0 M - B3C3
Теперь можно описать большинство инструкций процессора i8080 примерно вот так:
Откуда видно, что большинство команд легко накладываются на эмуляцию. Тем самым, если использовать ПЗУ 4 кб под прошивку микрокода и под каждую команду выделить по 16 байтов Кой-Кода, то в Гарвардском исполнении большинство из этих команд будут выполняться за 3 такта. И если на считывание кода команды в цикле M1 будет затрачено 2 такта, то на большинство этих команд в общей сложности будет затрачиваться по 5 тактов или 8 тактов, что практически сравнимо с производительностью самого i8080… Если не скупиться и использовать четвёрку дешифратора команд, на Кой-Команды будет уходить по 1 такту или по 3, а в общей сложности на чтение i8080-кода и его исполнение будет тратиться по 3 такта или 5, что уже заметно лучше.
P.S.: Здесь и далее будут использоваться сокращения вида «Кой-Дамп», «Кой-Код» и т.п…
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения