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

Первый блин, конечно же, вышел комом, но не без пользы. Получилась примитивная схема, которая не умела делать почти ничего полезного, но стала важным технологическим достижением: я сделал схему, которая умела последовательно выполнять команды, а так же разобрался с концепцией микрокода. После прогона пары тестовых программ я понял, что надо этот прототип отправлять на свалку истории и начинать с чистого листа.
Процессор 2.0
Попытки написать программы для Процессора 1.0 выявили примитивность и непрактичность его набора команд, поэтому целью разработки второго процессора стала поддержка полноценного набора команд, который позволит писать осмысленные программы. В частности, необходимым я счёл:
- Условные переходы
- Косвенная адресация (доступ к ячейке, адрес которой хранится в регистре)
- Работа со стеком (команды push/pop).
- Поддержка подпрограмм (команды call/ret)
Некоторые характеристики:
- Разрядность регистров, шины данных и адреса: 16 бит.
- Память адресуется только 16-битными словами
- Микрокодовая архитектура процессора реализующая 60 команд (RISC).
- Микрокод составляет 255 24-битных слова.
- Восемь регистров общего назначения (R0-R7)
- Прямая и косвенная адресация через регистры
- Косвенная адресация со смещением через два спец. регистра: SP (stack pointer) и OP (object pointer).
- Объединенная шина памяти и ввода-вывода.
- Одношинная микроархитектура
- Средняя длительность выполнения команды - 4 такта.
Процессор сделан по максимально простой одношинной архитектуре, которая даёт процессору хорошую гибкость, но делает его чрезвычайно медленным в исполнении команд. Пока я с этим смирился, так как простой процессор позволяет легко добавлять новые команды, просто расширяя микрокод.
При разработке процессора очень удобным инструментом оказался Excel. В нем я вел документацию, составлял микрокод и даже реализовал на VBA простой ассемблер. Вот так выглядит программа "Hello, World" и с генерированный ассемблером код:
Программа Logisim оказалась удивительно хорошо совместима с Excel: сгенерированный двоичный код прекрасно переносится в Logisim через copу/paste.
Заключение
Опыт создания своего процессора оказался очень интересным, как с точки зрения восполнения пробелов в знания, так и с точки зрения получения интеллектуального удовольствия. Такой радости от того, что моя поделка заработала, я не испытывал с детства, когда писал и запускал свои первые программы.
Вся магия рассеялась. На практике оказалось, что в основе работы процессора лежат очень простые идеи и принципы, которые достаточно легко реализовать даже без специальной подготовки. Впрочем, всё начинает сильно усложняться при попытке оптимизировать схему или обработать все крайние и исключительные ситуации.
Конечная цель моих игр с Logisim - создание простого виртуального компьютера и базового ПО к нему. Меня сильно вдохновляют советские домашние компьютеры 80-ых (например, ЮТ-088), которые я выбрал для себя как некий идеал конечного результата. К этой цели и буду двигаться по мере наличия вдохновения и свободного времени, так что ждите новых публикаций по этой теме :)
Комментариев нет:
Отправить комментарий