Хабрахабр

Проектирование процессора (CPU Design) RAM-машина


Часть I
Часть II
Часть III
Часть IV
Часть V

На Хабре уже была опубликована статья, посвящённая RAM-машине.
Вообще, статья про RAM-машину есть на Википедии.

Кроме арифметических доступны также команды ввода-вывода, косвенной адресации и команды ветвления. RAM-машина, которая упоминается в книге «Построение и анализ вычислительных алгоритмов» -авторы: Ахо, Хопкрофт, Ульман — имеет ограниченный набор арифметических команд, у нас же из арифметических команд будут только «сложение» и «вычитание».

Отличием LIttle Man Computer'а (который я описывал в предыдущих частях цикла) от RAM-машины является механизм, обеспечивающий косвенную адресацию (возможность работать с числом, хранящемся в памяти, как с адресом).

Для того, чтобы работать с числом, хранящимся в памяти, как с адресом, подключим к адресному входу Памяти Данных мультиплексор MUX, осуществляющий выборку между, собственно, адресом (поступающим из Памяти Команд) и числом, представляющем адрес и хранящемся в Памяти Данных.

При переключении мультиплексора MUX происходит переход на адрес, записанный в адресный регистр.
Будем загружать число из памяти в регистр каждый раз, когда происходит выборка новой команды из Памяти команд.

Адрес загружается на 4ый вход мультиплексора. Также будем загружать загружать адрес команды в аккумулятор Acc как число, для этого увеличим разрядность адресного входа мультиплексора, производящего выборку данных для загрузки в аккумулятор Асс.

Для этого подключим к тактовому генератору два D-триггера, которые будут переключать друг друга при поступлении тактового сигнала. Обработка команды будет производиться в два такта.

1ый такт осуществляет загрузку адреса в адресный регистр, 2ой такт осуществляет загрузку числа в аккумулятор Acc или в Память данных.

Подключим к аккумулятору 2 флага:

Флаг Acc = 0. 1. Флаг поднимается, если содержимое Асс равно нулю.

Флаг Acc > 0. 2. Флаг поднимается, если содержимое Асс больше нуля.

Получилась вот такая схема, которую можно скачать отсюда

Линия, идущая на разрешающий вход аккумулятора, нужна для того, чтобы схема не глючила.

Будем в цикле увеличивать значение нулевой ячейки на единицу. Отключим некоторые команды и напишем программу, которая загружает нулевую ячейку Памяти данных по адресу, хранящемуся в нулевой ячейке. мы заполним Память данных порядковыми номерами. Т.о.

1401 загружаем в Acc число 1
1100 прибавляем число в Acc к числу в нулевой ячейке
2000 сохраняем результат в нулевой ячейке
2080 загружаем число из Acc по адресу, на который ссылается нулевая ячейка
0010 прыгаем в начало программы

Эмулятор классической RAM-машины (с раздельными лентами чтения/записи) можно скачать отсюда.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть