- PVSM.RU - https://www.pvsm.ru -

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

Проектирование процессора (CPU Design) RAM-машина - 1
Часть I [1]
Часть II [2]
Часть III [3]
Часть IV [4]
Часть V [5]

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

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

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

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

Будем загружать число из памяти в регистр каждый раз, когда происходит выборка новой команды из Памяти команд. При переключении мультиплексора MUX происходит переход на адрес, записанный в адресный регистр.
Проектирование процессора (CPU Design) RAM-машина - 3

Также будем загружать загружать адрес команды в аккумулятор Acc как число, для этого увеличим разрядность адресного входа мультиплексора, производящего выборку данных для загрузки в аккумулятор Асс. Адрес загружается на 4ый вход мультиплексора.
Проектирование процессора (CPU Design) RAM-машина - 4

Обработка команды будет производиться в два такта. Для этого подключим к тактовому генератору два D-триггера, которые будут переключать друг друга при поступлении тактового сигнала.
Проектирование процессора (CPU Design) RAM-машина - 5
1ый такт осуществляет загрузку адреса в адресный регистр, 2ой такт осуществляет загрузку числа в аккумулятор Acc или в Память данных.

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

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

2. Флаг Acc > 0. Флаг поднимается, если содержимое Асс больше нуля.
Проектирование процессора (CPU Design) RAM-машина - 6

Получилась вот такая схема, которую можно скачать отсюда [8]
Проектирование процессора (CPU Design) RAM-машина - 7
Линия, идущая на разрешающий вход аккумулятора, нужна для того, чтобы схема не глючила.

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

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

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

Автор: demsp

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/programmirovanie/302014

Ссылки в тексте:

[1] Часть I: https://geektimes.com/post/292289/

[2] Часть II: https://geektimes.com/post/300769/

[3] Часть III: https://habr.com/post/412379/

[4] Часть IV: https://habr.com/post/427629/

[5] Часть V: https://habr.com/post/432726/

[6] статья: https://habr.com/post/115229/

[7] статья: https://ru.wikipedia.org/wiki/RAM-%D0%BC%D0%B0%D1%88%D0%B8%D0%BD%D0%B0

[8] скачать отсюда: https://yadi.sk/d/7mCNYjaaZFN4Nw

[9] отсюда: http://www.szkup.com/?pid=praca_mgr

[10] Источник: https://habr.com/post/432726/?utm_campaign=432726