User Tag List

Показано с 1 по 10 из 29

Тема: Проектирование процессора

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    180
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    80
    Поблагодарили
    39 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Проектирование процессора

    Как обладатель РЛК "Электроника КР-03", после освоения принципов программирования вообще и изучения схемы, как-то быстро вдруг родилось желание:
    • Разработать компьютер на своей архитектуре
    • Использовать процессор собственной архитектуры

    Что превратилось в хобби на всю последующую жизнь.

    Изучив много справочников по процессорным системам многих отечественных серий, к концу 90-х появились первые наброски эмуляторов собственных моделей процессоров. Однако, везде всплывали проблемы разного рода. То загрузка данных в регистры не была проработана, то ветвления не продуманы.
    И все 20 лет просто не приносили никакого результата, хотя я и написал несколько рабочих эмуляторов РАДИО-86РК и эмулятор процессора i8086.
    Из опытов с i8086 с его странным машинным кодом 00 как команда ADD, а не NOP, был выработан основной постулат, что:
    • Как и с текстом, код 00 должен означать "терминацию" цепочки - HLT (Останов)


    И вот в 2019 году удалось, наконец-то, сформировать некий концепт.
    Глядя на шестнадцатеричный дамп с его чередованием цифр с буквами, была предпринята попытка разработать архитектуру такого процессора, система команд которого была бы ближе к восприятию человеком именно на уровне шестнадцатеричного кодирования. То есть, что человеческое восприятие при беглом просмотре успевает вырвать из контекста, то должен делать и дешифратор команд.
    • Коды A0..A9 воспринимаются как "один из десяти Аккумуляторов" - пусть они будут командами активации одного из Аккумуляторов
    • Коды B0..B9 воспринимаются как "одна из десяти Баз/Буферов" - пусть они будут командами активации одного из Буфера
    • Коды C0..C9 воспринимаются как "один из десяти Счётчиков" - пусть они будут командами активации одного из Счётчиков
    • Коды D0..D9 воспринимаются как "один из десяти Девайсов" - пусть они будут командами активации одного из Устройств Ввода-Вывода

    Получается всего 30 Регистров Общего Назначения + 10 УВВ.

    Для нормального функционирования АЛУ-операций требуется, как минимум, пара операндов. Здесь очень кстати подходят коды:
    • AA/AB/AC/AD - как операнды (A,A) / (A,B) / (A,C) и (A,D)
    • BA/BB/BC/BD - как операнды (B,A) / (B,B) / (B,C) и (B,D)
    • CA/CB/CC/CD - как операнды (C,A) / (C,B) / (C,C) и (C,D)
    • DA/DB/DC/DD - как операнды (D,A) / (D,B) / (D,C) и (D,D)

    И здесь остаётся лишь найти группу кодов под АЛУ-Операции. В самой АЛУ-операции необходимо выбирать индекс правого операнда, так как левый - выбирается до АЛУ-операции как приёмник результата:
    • 0A..9A - операция Add, где цифра - индекс правого операнда
    • 0B..9B - операция suB, где цифра - индекс правого операнда
    • 0C..9C - операция and(Conjunct), где цифра - индекс правого операнда
    • 0D..9D - операция or(Disjunct), где цифра - индекс правого операнда
    • 0E..9E - операция Eor(Xor), где цифра - индекс правого операнда
    • 0F..9F - пересылка mov(For), где цифра - индекс правого операнда

    Тем самым:
    • код "CB C1 2A" означает "ADD C1,B2"
    • код "BA B2 3E" означает "EOR B2,A3"

    Легко вникнуть, легко освоиться, легко кодировать!

    Вот полная таблица:
    Код:
         +------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
         |  .0  |  .1  |  .2  |  .3  |  .4  |  .5  |  .6  |  .7  |  .8  |  .9  |  .A  |  .B  |  .C  |  .D  |  .E  |  .F  |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 0. | HLT  |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    |      | D0+1 | D0+2 | D0+3 | D0+4 | D0+5 | D0+6 | D0+7 | D0+8 | D0+9 | R,T0 | R,T0 | R,T0 | R,T0 | R,T0 | R,T0 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 1. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D1+0 | D1+1 | D1+2 | D1+3 | D1+4 | D1+5 | D1+6 | D1+7 | D1+8 | D1+9 | R,T1 | R,T1 | R,T1 | R,T1 | R,T1 | R,T1 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 2. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D2+0 | D2+1 | D2+2 | D2+3 | D2+4 | D2+5 | D2+6 | D2+7 | D2+8 | D2+9 | R,T2 | R,T2 | R,T2 | R,T2 | R,T2 | R,T2 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 3. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D3+0 | D3+1 | D3+2 | D3+3 | D3+4 | D3+5 | D3+6 | D3+7 | D3+8 | D3+9 | R,T3 | R,T3 | R,T3 | R,T3 | R,T3 | R,T3 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 4. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D4+0 | D4+1 | D4+2 | D4+3 | D4+4 | D4+5 | D4+6 | D4+7 | D4+8 | D4+9 | R,T4 | R,T4 | R,T4 | R,T4 | R,T4 | R,T4 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 5. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D5+0 | D5+1 | D5+2 | D5+3 | D5+4 | D5+5 | D5+6 | D5+7 | D5+8 | D5+9 | R,T5 | R,T5 | R,T5 | R,T5 | R,T5 | R,T5 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 6. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D6+0 | D6+1 | D6+2 | D6+3 | D6+4 | D6+5 | D6+6 | D6+7 | D6+8 | D6+9 | R,T6 | R,T6 | R,T6 | R,T6 | R,T6 | R,T6 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 7. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D7+0 | D7+1 | D7+2 | D7+3 | D7+4 | D7+5 | D7+6 | D7+7 | D7+8 | D7+9 | R,T7 | R,T7 | R,T7 | R,T7 | R,T7 | R,T7 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 8. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D8+0 | D8+1 | D8+2 | D8+3 | D8+4 | D8+5 | D8+6 | D8+7 | D8+8 | D8+9 | R,T8 | R,T8 | R,T8 | R,T8 | R,T8 | R,T8 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | 9. |      |      |      |      |      |      |      |      |      |      | ADD  | SUB  | AND  | OR   | EOR  | MOV  |
    |    | D9+0 | D9+1 | D9+2 | D9+3 | D9+4 | D9+5 | D9+6 | D9+7 | D9+8 | D9+9 | R,T9 | R,T9 | R,T9 | R,T9 | R,T9 | R,T9 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | A. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
    |    | A0   | A1   | A2   | A3   | A4   | A5   | A6   | A7   | A8   | A9   | A,A  | A,B  | A,C  | A,D  | AF   | AF   |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | B. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
    |    | B0   | B1   | B2   | B3   | B4   | B5   | B6   | B7   | B8   | B9   | B,A  | B,B  | B,C  | B,D  | BF   | BF   |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | C. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
    |    | C0   | C1   | C2   | C3   | C4   | C5   | C6   | C7   | C8   | C9   | C,A  | C,B  | C,C  | C,D  | CF   | CF   |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | D. | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | REG  | ARG  | ARG  | ARG  | ARG  | CLR  | NOT  |
    |    | D0   | D1   | D2   | D3   | D4   | D5   | D6   | D7   | D8   | D9   | D,A  | D,B  | C,D  | D,D  | DF   | DF   |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | E. | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  |
    |    | E000 | E100 | E200 | E300 | E400 | E500 | E600 | E700 | E800 | E900 | EA00 | EB00 | EC00 | ED00 | EE00 | EF00 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    | F. | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  | INT  |
    |    | F000 | F100 | F200 | F300 | F400 | F500 | F600 | F700 | F800 | F900 | FA00 | FB00 | FC00 | FD00 | FE00 | FF00 |
    +----+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+------+
    Где:
    • коды E0..FF работают как программное прерывание на адреса E000..FF00, при этом в регистрах B0 и C0 сохраняется "адрес возврата"
    • код CF буквально инвертирует "Флаг CF"
    Регистр A0 выполняет функцию PSW для хранения флагов:
    • AF - Арифметический Флаг (аналог SF)
    • BF - Буферный Флаг (Арифметическое переполнение, аналог OF)
    • CF - Флаг Переноса
    • DF - Дифференциальный Флаг (аналог ZF, только наоборот - NZ)

    Практически, это - весь набор команд.
    Чтобы начать программировать, даже в таблицу заглядывать не стоит: Всё "на своих местах" в буквальном смысле.
    Причём, коды BCD с 01 по 99 работают как префиксы адресации ячейки памяти, где D0-D9 - "Двойной регистр" / "Регистровая пара" B0:C0..B9:C9.

    • код "CB C1 2A" означал "ADD C1,B2", а с префиксом "CB C1 54_2A" означает "ADD C1,[D5+4],B2"
    • код "BA B2 3E" означал "EOR B2,A3", а с префиксом "BA B2 54_3E" означает "EOR B2,[D5+4],A3"
    • код "CF" означал "NOT CF" (CMC), а с префиксом "54 CF" означает "JCF [D5+4]"
    • код "C1" означал активацию регистра C1 как приёмника результата для АЛУ, а с префиксом "54_C1" означает "MOV [D5+4],C1"

    Как можно заметить, префиксы вносят значительную гибкость, а флаговые операции становятся командами ветвления.

    Для фанатов программирования машинного кода освоить кодирование под такой процессор будет как никогда легко!

    Вот схема рабочего прототипа 2019 года:
    Нажмите на изображение для увеличения. 

Название:	cpu_full.jpg 
Просмотров:	301 
Размер:	19.4 Кб 
ID:	79047
    А вот аккуратный эскиз процессора (отсутствуют блок регистрового файла и блок АЛУ).
    Нажмите на изображение для увеличения. 

Название:	cpu_minimal.jpg 
Просмотров:	251 
Размер:	21.7 Кб 
ID:	79048

    JavaScript-эмулятор доступен здесь.
    Эмулятор моего процессора под РАДИО-86РК - здесь.

    Как можно видеть, этот процессор легко эмулируется даже на ВМ80.
    (Концептуально, правда, эмуляторы устарели за прошедшие годы. Но для ознакомления - вполне подходят.)

    P.S.: Далее перейду к более серьёзным работам - разработанным Verilog-моделям и "маргинальным указателям", с помощью которых появились команды LEA и XLAT.

    Этот пользователь поблагодарил Alikberov за это полезное сообщение:

    Rio444(06.07.2023)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Проектирование идеального "советского" компьютера
    от CityAceE в разделе Разработка электроники
    Ответов: 229
    Последнее: 17.11.2022, 07:35
  2. Модуль процессора (МП)
    от Viktor2312 в разделе Ириша
    Ответов: 57
    Последнее: 28.12.2016, 10:02
  3. Ответов: 4
    Последнее: 01.11.2013, 00:47
  4. Ответов: 4
    Последнее: 12.09.2009, 15:35

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •