CPU Sim 3.1: Инструмент для моделирования компьютерных архитектур для классов организации компьютеров

Автор: Dale Skrien

Автор перевода: Святоха А.А.

Источник: https://docplayer.net/39973718-Cpu-sim-3-1-a-tool-for-simulating-computer-architectures-for-computer-organization-classes.html

Аннотации

CPU Sim 3.1 - это образовательный программный пакет, написанный на Java для использования в курсах CS3. CPU Sim обеспечивает студентам - активную учебную среду, в которой они могут проектировать, модифицировать и сравнивать различные компьютерные архитектуры на уровне регистров и так далее. Они могут разработавать программы на ассемблере или машинном языке для этих архитектур с помощью моделирования. CPU Sim - это полноценная среда разработки, включая диалоговые окна для проектирования архитектуры процессора, текстовый редактор для редактирования программы на языке ассемблера, ассемблер, несколько окон отображения для просмотра регистров и оперативной памяти во время выполнения программы и широкие функции отладки, такие как возможность шагать вперед или назад во время выполнения, проверка и при необходимости изменение значений в регистрах и ОЗУ после каждого шага. Благодоря этим функциям и обсуждаются вариант использования CPU Sim в классах CS3.

Ключевые слова

cимулятор компьютерной архитектуры, обучение.

1. Введение

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

К сожалению, большинство из этих пакетов имитируют только одну фиксированную архитектуру. Мы чувствуем что студенты должны быть подвержены нескольким компьютерным архитектурам, и в идеале должны иметь практический опыт работы с как можно большим количеством из них, и даже практический опыт проектирования простых архитектур. С использованием симулятора, который позволяет студентам такой контроль над симуляцией, инструкторы имеют гораздо больше возможности для предоставления ценного опыта обучения. Например, чтобы сделать программирование проще для этой архитектуры, преподаватели могут дать студентам архитектуру и ряд заданий, которые постоянно просят студентов добавлять и внедрять новые функции, такие как новые режимы адресации, новые машинные инструкции или новые регистры. На каждом этапе студентам также может быть предоставлено программирование на ассемблере назначения, которые подчеркивают преимущества добавляемых новых функций.

CPU Sim - это инструмент, предназначенный для облегчения такого интерактивного практического обучения. С CPU Sim, студенты могут разрабатывать свои собственные архитектуры с нуля или модифицировать архитектуры, данные им. Студенты могут моделировать различные архитектуры, в том числе, например, процессоры на основе аккумуляторов, регистров (RISC) и стеков, и они смогут запускать программы на них без необходимости какого-либо физического оборудования, кроме компьютера, на котором запущен процессор Sim.

2. Основной дисплей CPU SIM

Когда CPU Sim запущен, появляется главное окно дисплея (см. Рисунок 1). За исключением некоторые диалоговые окна и окна справки, все окна являются внутренними по отношению к этому главному окну. Внутренние окна включают те, которые отображают содержимое регистров и ОЗУ и те, которые содержат текст, такие как программы сборки. Каждое из этих внутренних окон и многие пункты меню обсуждаются в последующих разделах этой статьи.

Главное окно дисплея CPU SimРисунок 1 – Главное окно дисплея CPU Sim

3. Особенности дизайна CPU Sim

В CPU Sim архитектуры разрабатываются на уровне передачи регистров. То есть пользователь указывает регистры, основные запоминающие устройства (ОЗУ), микроинструкции, машинные инструкции, и инструкции на ассемблере для гипотетической машины.

Машинная инструкция реализуется последовательностью микроинструкций, называемая "выполняемая последовательность." Пользователь указывает последовательность выполнения всей машиной инструкции, и поэтому пользователь имеет полный контроль над семантикой каждой инструкции. Когда CPU Sim выполняет программу, он многократно выполняет машинные циклы которые состоят из последовательности выборки (последовательности микроинструкций, указанных пользователем) сопровождается последовательностью выполнения машинной инструкции, которая была выбрана.

3.1 Указание компонентов оборудования

Если пользователи строят новую архитектуру, им необходимо сначала создать базовые аппаратные компоненты ЦП. Одним из типов компонентов является регистр или регистр массив.

Диалог для редактирования массивов регистровРисунок 2 – Диалог для редактирования массивов регистров

Пользователи могут создавать столько регистров и массивов регистров, сколько пожелают, с произвольной шириной (числом бит). Для каждого регистра пользователь указывает имя и ширину. Для каждого массива регистров пользователь указывает имя, количество регистров в массиве и ширину всех регистров. Эти массивы указываются в диалоговом окне, показанном на рисунке 2. Если массив из 16 регистров называется "A", то CPU Sim автоматически присваивает каждому отдельному регистру в массиве имена "A [0]", "A [1] ", ...," A [15] ".

Другой тип аппаратного компонента, который пользователь должен указать, - это память или ОЗУ. ОЗУ адресуется байтами, и каждое ОЗУ доступно ЦПУ только через микроинструкции доступа к памяти, которые передают данные между регистрами и ОЗУ. Пользователь может указать столько оперативной памяти, сколько нужно, каждая со своим размером. Например, пользователь может захотеть создать три ОЗУ, одну для хранения кода, одну для хранения стека и одну для хранения кучи, или пользователь может захотеть использовать только одну ОЗУ для хранения всего.

Последний тип аппаратного компонента, который пользователь указывает, это бит условия (см. Рисунок 3). Биты условия - это просто конкретные биты существующих регистров, которые могут быть установлены в 1 с помощью микроинструкций и, возможно, арифметических операций, если происходит переполнение или выполнение. Например, типичный регистр состояния с битами NZVC может быть указан таким образом. Пользователь также может указать, остановит ли установка бита условия выполнение текущей программы.

Диалог для редактирования битов условияРисунок 3 – Диалог для редактирования битов условия

3.2 Указание микроинструкций

Затем пользователь создает микроинструкции для манипулирования данными в регистрах и ОЗУ. Микроинструкции, включающие арифметические операции, предполагают, что целочисленные значения хранятся в представлении дополнения 2. Существует 15 видов микроинструментов, которые можно создать:

  1. Перенос (или копирование) операции между двумя регистрами. Пользователь указывает регистры, подмножество последовательных битов исходного регистра, который должен быть скопирован, и подмножество последовательных битов регистра назначения, в который должны быть скопированы данные; см. Рисунок 4 для диалога редактирования инструкций передачи.
  2. Передача операции из регистра в регистр в массиве. В дополнение к спецификациям передачи между регистрами пользователь указывает, какие биты какого регистра содержат индекс регистра назначения в массиве.
  3. Передача операции из регистра в массиве в регистр. Эта операция похожа на предыдущий вид микроинструкции.
  4. Целочисленная арифметическая операция (сложение, вычитание, умножение, деление). Пользователь указывает операцию, два исходных регистра, целевой регистр, и должны ли быть установлены какие-либо биты условия, если происходит переполнение или выполнение. Обратите внимание, что в CPU Sim нет поддержки с плавающей запятой.
  5. Логическая (логическая) операция. Пользователь указывает операцию (и, или, nand, nor, xor, not), исходные регистры и регистр назначения.
  6. Сдвиг операции. Пользователь указывает тип сдвига (логический, арифметический или циклический), направление сдвига (влево или вправо), величину сдвига, а также регистры источника и назначения.
  7. Тестовая операция над битами регистра. Эти микроинструкции позволяют переходить к другим микроинструкциям вперед или назад в пределах последовательности микроинструкций. Тестовая микроинструкция сравнивает значение в части регистра с заданным значением. Если сравнение успешно, то ряд последовательных микроинструкций в текущей последовательности пропускается. Пользователь указывает используемое сравнение (=, <, >, <=, >=), сравниваемое значение, регистр, биты регистра, подлежащего проверке, и величину, которую следует пересечь, если проверка прошла успешно.
  8. Операции переходов. Эта микроинструкция похожа на тестовую микроинструкцию, за исключением того, что это безусловный скачок. Пользователь указывает количество прыжков, которое может быть положительным или отрицательным.
  9. Инкрементная операция. Пользователь указывает регистр, который должен быть увеличен, величину приращения, и должны ли быть установлены какие-либо биты условия, если происходит переполнение или выполнение.
  10. Операции установики. Эта операция устанавливает указанную часть регистра в указанное значение. Пользователь выбирает регистр, последовательные биты этого регистра, которые должны быть установлены, и значение.
  11. Операции установики флагов. Эта операция устанавливает бит условия на 0 или 1. Пользователь выбирает бит условия и значение, на которое он должен быть установлен.
  12. Операция доступа к памяти. Пользователь указывает регистр данных, регистр адресов, ОЗУ и направление перемещения данных (чтение или запись).
  13. Операция ввода / вывода. Пользователь указывает буферный регистр, в который или из которого должны быть перемещены данные, направление перемещения данных (ввод или вывод), тип перемещаемых данных (целое число, ASCII или Unicode), а также внешний источник или назначение данные (либо диалоговое окно для взаимодействия с пользователем, либо текстовый файл, указанный пользователем для пакетного режима).
  14. Операция декодирования. Эта операция используется в последовательности выборки и вызывает декодирование содержимого указанного регистра команд и выполнение декодированной машинной инструкции.
  15. Завершить операцию. Эта операция указывает на завершение выполнения текущей машинной инструкции и указывает CPU Sim перейти к первой микроинструкции в последовательности выборки и начать новый машинный цикл.
Диалог для редактирования перевода микроинструкцийРисунок 4 – Диалог для редактирования перевода микроинструкций

3.3 Указание машинных инструкций и последовательности выборки

Пользователь задает семантику каждой машинной инструкции с помощью последовательности микроинструкций, называемой ее «последовательностью выполнения». Следовательно, пользователь может создавать очень простые инструкции, такие как увеличение регистра или очень сложные инструкции со сложными схемами адресации, включающими несколько регистров и ОЗУ. Пользователь может создавать инструкции, похожие на RISC, так как все они имеют одинаковую длину и расположение, или пользователь может выбирать инструкции, похожие на CISC, с переменной длиной и различными форматами.

В дополнение к последовательности выполнения пользователь указывает имя для каждой машинной инструкции, код операции и последовательность длин полей. Сумма длин полей - это длина (в битах) инструкции. Первое поле соответствует коду операции, а остальные поля соответствуют операндам инструкции; см. рисунок 5 для диалогового окна для редактирования машинных инструкций.

Диалог для редактирования машинных инструкцийРисунок 5 – Диалог для редактирования машинных инструкций

CPU Sim также имеет диалоговое окно (здесь не показано), в котором пользователь может указать последовательность выборки. Последовательность выборки - это последовательность микроинструкций, которые CPU Sim выполняет в начале каждого машинного цикла. Пользователи могут указать любую последовательность, которую они пожелают, но последовательность выборки обычно включает в себя микроинструкции, которые выбирают следующую машинную инструкцию, помещают ее в регистр команд, увеличивают счетчик программ, а затем декодируют инструкцию в регистре команд.

3.4 Сохранение и просмотр спецификации

После того как архитектура была указана, пользователь может сохранить эту спецификацию в файле XML для последующей перезагрузки в CPU Sim и редактирования. Пользователь также может сохранить спецификацию машины в файле HTML, который можно просматривать с помощью любого веб-браузера.

4. Написание и выполнение программ в CPU Sim

После определения полной архитектуры ЦП пользователь может писать программы на машинном языке или языке ассемблера и запускать их на этом ЦПУ посредством моделирования. Для написания таких программ CPU Sim имеет встроенный текстовый редактор, включающий все средства вырезания/копирования/вставки/поиска/замены/печати, требуемые для такого редактора.

Программы на машинном языке пишутся в виде текста в виде последовательности нулей и единиц на каждой строке, за которыми, возможно, следуют комментарии. Эти программы могут быть загружены в любое указанное ОЗУ и затем выполнены; см. рисунок 6 для примера программы на машинном языке.

Простая программа на машинном языкеРисунок 6 – Простая программа на машинном языке

На ассемблере инструкция пишется с использованием имени машинной инструкции, за которым следует список значений (либо констант, либо символов), по одному для каждого поля инструкции. Например, инструкция для добавления содержимого регистра A[0] в A[1] может выглядеть следующим образом:

add A0, A1

где A0 и A1 равны значениям 0 и 1, указывающим индексы добавляемых регистров; см. окно «W1-0.a» на рисунке 1 для примера программы на языке ассемблера.

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

После того, как программа сборки написана и сохранена в файл, ее можно собрать. Ассемблер CPU Sim проверит наличие ошибок в коде и, если такие ошибки есть, отобразит сообщение об ошибке и выделит ошибочную строку в коде сборки. Если ошибок не возникает, собранный машинный код может быть загружен в любое указанное ОЗУ, пользователь может инициализировать любой из регистров указанными значениями, и тогда может начаться выполнение программы.

Если во время выполнения пользовательская программа запрашивает ввод данных у пользователя, появляется диалоговое окно с просьбой ввести значение. Если программа указывает вывод пользователю, этот вывод появляется в диалоговом окне. Ввод и вывод также могут быть направлены в и из текстовых файлов.

Как только программа останавливается (поскольку бит условия был установлен в 1, произошла ошибка или пользователь выбрал пункт меню «Стоп»), пользователь может проверить состояние машины, включая содержимое регистров и ОЗУ.

5. Выводы

CPU Sim - это программа моделирования CPU, предназначенная для использования с курсами CS3, которая позволяет студентам создавать или изменять изучаемые архитектуры. Это интерактивная среда обучения, в которой учащиеся могут создавать, изучать и модифицировать различные простые архитектуры на уровне передачи регистров. Это полностью интегрированный пакет, который включает в себя текстовые редакторы для написания программ, ассемблер, интерактивную справку и множество средств отладки, которые помогают пользователю легко модифицировать архитектуры, а затем писать и выполнять программы на этих архитектурах.

Список источников