ЛР №2 Архитектура системы команд процессора NIOS II
Архитектура системы команд процессора NIOS II
Для кого этот документ
- Студентам курса "Организация ЭВМ"
- Необходимое ПО: Quartus II
Цель работы
Изучение архитектуры системы команд (АСК) процессора NIOS II, приобретение навыков создания новых программных компонентов и их отладки.
Объекты изучения
- Архитектура системы команд процессора «NIOS II»:
- типы и форматы его команд;
- используемые способы адресации операндов;
- форматы представления числовой информации;
- форматы представления символьной информации.
- приложение Intel Monitor Program (IMP) для работы со стендом, по части его использования для добавления новых программных компонентов, их компиляции, загрузки в ОП и отладке.
Планируемые результаты обучения
После выполнения этой работы студенты будут знать:
- Типы и форматы команд процессора NIOS II;
- Типы и форматы операндов;
- Способы адресации операндов.
Смогут:
- Создавать новые программные компоненты для процессорной системы и работать с ними;
- Выполнять их компиляцию и загрузку в оперативную память процессорной системы, управляя их размещением в ОП;
- Находить в ОП исполняемый код программы и отдельные её команды, исходные данные и их отдельные элементы;
- Отлаживать программные компоненты, используя контрольные точки, выполнение по шагам и в автоматическом режиме.
Приобретут навыки работы:
- с учебным стендом;
- с приложением IMP;
- с процессорной системой, реализованной в кристалле ПЛИС учебного стенда.
Исходные файлы лабораторной работы
Исходным является файл lab_max.s, в котором содержится программа нахождения наибольшего числа из списка. Листинг 3 этой программы с подробными комментариями приведен в приложении – Б.
Подготовка к лабораторной работе
- Изучите описание процессора NIOS II [12,3]. Включите в отчет описание его регистровой структуры, типов используемых команд, их форматов и способов адресации операндов. Уясните как выполняются команды условного перехода. Включите в отчет описание команд bge и blt, вместе с их кодами операций.
- Изучите описание процессорной системы DE 2 -115 Media Computer, реализованной в стенде [6,7,3]. Включите в отчет структурную схему процессорной системы и карту памяти, на которой должны быть отражены адреса ОП и портов ввода вывода периферийных устройств системы.
- Изучите директивы ассемблера .data, .text, .equ, .asciz, .word, .hword, .byte, .org, .end, .include. Поместите их описания в отчетные материалы.
- Уясните пункты задания, выполняемого в текущей лабораторной работе.
- Уясните логику работы программы lab_max (Листинг 3), нахождения наибольшего числа из списка. Выполните редактирование программы для выполнения пункта 2.2 задания и подготовьте новые данные для тестирования программы, соответствующие индивидуальному варианту задания (пункт 2.3). Включите текст измененной программы с обновленными данными в отчет.
- Выполните редактирование программы с целью нахождения минимального числа из списка с выводом его на зеленые светодиоды (пункт 2.7). Поместите текст измененной программы в отчет.
Вопросы для самоконтроля
- Сколько регистров общего назначения имеется в процессоре NIOS II? Какова их разрядность?
- Входят ли в состав процессора иные регистры, кроме регистров общего назначения?
- Для чего они предназначены?
- Можно ли смотреть и изменять содержимое регистров процессора в IMP?
- Какие из регистров общего назначения выполняют специальные функции?
- Какой из регистров в процессорной системе указывает на текущую выполняемую команду? Можно ли его изменить, и если да, то как?
- К какому типу АСК (RISC или CISС) относится процессор NIOS II? По каким признакам?
- Типы и форматы команд процессора NIOS II?
- Типы и форматы операндов?
- Используемые в процессоре способы адресации операндов?
- Какой код используется для представления чисел со знаком?
- Какой код используется для представления символьной информации?
- Какие директивы ассемблера используются для задания числовых операндов?
- Какие директивы ассемблера используются для задания символьных операндов?
- Какая директива ассемблера используется для задания констант?
- Как выполнить компиляцию исходной программы и загрузить её исполняемый файл в память процессорной системы?
- Какие возможности предоставляет IMP для отладки программы?
- Что такое контрольная точка? Как её установить, удалить?
- Можно ли загрузить исходные данные отдельно от кода программы и как это сделать?
Порядок выполнения лабораторной работы
Часть 1. Использование приложения IМР для компиляции, загрузки и отладки программы
1.1. В меню File откройте проект, созданный в первой лабораторной работе используя команду Open Project… или Open Reсent Project. Допускается также создание нового проекта, как это описано в предыдущей работе.
1.2. В меню Settings выполните команду Program settings. В появившемся окне в поле Source files удалите содержащиеся там файлы, если используете проект из первой работы, и выберите файл lab_max.s из папки «Исходные файлы к лабораторным работам», используя команду Add. Для завершения программных установок нажмите кнопку Ок.
1.3. Выполните компиляцию и загрузку новой программы, используя соответствующие команды IMP.
1.4. Найдите в ОП загруженную программу и исходные данные. Для этого используйте вкладку Disassembly. Отобразите в отчете диапазон адресов ОП, занятых программой и диапазон адресов, где размещены данные. Причем отдельно укажите адреса команд с метками _start, LOOP, STOP и адрес команды bge. Рекомендуется с помощью клавиши Print Screen сделать снимок экрана, выделить в нём указанные команды вместе с адресами, и добавить его в отчет, сопровождая вашими комментариями.
1.5. Используя вкладку Memory основного окна IMP, найдите в оперативной памяти процессорной системы загруженную программу и данные с заданным списком чисел, в котором будет выполнен поиск максимального числа. Для наблюдения содержимого ячеек памяти воспользуйтесь командами из меню View. Задавайте разные значения количества отображаемых ячеек на строке экрана и разную форму представления содержимого памяти (двоичную, восьмеричную, шестнадцатеричную, десятичную со знаком и без знака). Сделайте снимок экрана, выделите на нем секции кода и данных программы и поместите его в отчет.
1.6. Чтобы уяснить алгоритм программы поиска наибольшего числа из списка, начните её выполнять по шагам. Для этого используйте команду Actions > Single Step или пиктограмму на панели инструментов IMP. Наблюдайте результаты выполнения отдельных команд программы, используя окна отображения содержимого регистров Registers и памяти Memory. Обратите внимание на то, как выполнена компиляция псевдокоманд. Отразите в отчете.
1.7. После уяснения структуры программы, установите контрольную точку в начало цикла (метка LOOP). Для этого щелкните мышью в поле, слева от адреса команды. Контрольная точка отображается кружком красного цвета. Чтобы удалить контрольную точку, следует выполнить повторный щелчок по кружку. Выполните программу с использованием контрольной точки. Всякий раз после останова программы, наблюдайте содержимое изменяемых регистров процессора. Для продолжения выполнения программы, используйте команду Actions > Continue или пиктограмму на панели инструментов IMP. Чтобы визуализировать момент завершения программы рекомендуется поставить контрольную точку на последней команде с меткой STOP.
Часть 2. Представление числовой информации в процессорной системе Форматы команд
Следует напомнить, что в этой и в следующих лабораторных работах категорически запрещается вносить изменения в программные заготовки, предлагаемые студентам. Вначале необходимо сохранить их с новым именем, соответствующим вашей фамилии, а потом уже вносить изменения в программу.
2.1. Во вкладке Memory измените переменную N, задающую количество чисел в списке. Вместо первоначального значения 7, запишите новое значение 10. Проанализируйте числовые значения, которые хранятся в ячейках ОП и соответствуют обновленному списку чисел. Определите визуально максимальное число с учетом добавленных к прежнему списку новых чисел. Повторно выполните программу. Убедитесь, что полученный ею результат совпадает с ожидаемым. Если это не так, попробуйте найти объяснения. Поместите в отчет содержимое области данных в ОП и найденный результат.
2.2. Внесите изменения в программу таким образом, чтобы вывод найденного максимального числа осуществлялся на красные светодиоды. Для задания адреса соответствующего порта используйте символическое имя, например, LEDR, и директиву .equ, в которой этому имени присваивается конкретное значение. Альтернативный вариант - это использовать имя RED_LED_BASE из файла address_map.s, который должен быть добавлен к исходному файлу с помощью директивы ассемблера .include.
2.3. Измените количество чисел в списке и сами числа таким образом, чтобы в результате выполнения программы загорались светодиоды в соответствии с заданным вариантом. Номер варианта определяется номером стенда, за которым выполняется лабораторная работа. Таблица 2.1 в приложении В содержит варианты заданий. Добавьте в список отрицательные числа в соответствии с вашим вариантом. Наблюдайте во вкладке Memory как они будут представлены в ОП процессорной системы. Поместите в отчет листинг изменённой программы с обновленным списком чисел, представление списка в ОП во вкладке Memory и фото загораемых светодиодов.
2.4. Найдите в ОП команду условного перехода bge на метку LOOP. Исследуйте её машинный код. Для этого воспользуйтесь вкладкой Memory. Используйте двоичную форму представления содержимого ячеек памяти. Скопируйте бинарный код команды в любой текстовый редактор. Определите формат команды. Выделите отдельные поля команды и осмыслите их содержимое, включая поле Immed 16, которое соответствует разрядам с 6 по 21 команды. Следует напомнить, что нумерация разрядов начинается с нулевого и ведется справа налево. Убедитесь, что в мнемоническом представлении команды во вкладке Disassembly используется именно такое смещение. Уясните, как выполняется эта команда.
2.5. Найдите в программе другие команды условного и безусловного переходов. Определите формат одной из них в соответствии с индивидуальным вариантом задания и осмыслите значение поля Immed 16. Как оно зависит от направления перехода? Отразите в отчете. Рекомендуется этот пункт задания выполнить дома при подготовке отчета.
2.6. Измените содержимое поля кода операции команды (разряды с 0 по 5), рассмотренной в предыдущем пункте, на значение 0х16. Оно соответствует команде blt. Обратите внимание на то, что изменения не отражаются во вкладке Disassembly. Выполните программу повторно. Наблюдайте результат. Включите в отчет фото выводимого на светодиоды результата и ваши комментарии.
2.7. Внесите изменения в исходный код программы так, чтобы вновь найденное число выводилось на зеленые светодиоды, сохраните эту программу с другим именем.
2.8. *Внесите изменения в программу таким образом, чтобы она находила и максимальное и минимальное числа из списка и выводила их на красные и зеленые светодиоды, соответственно.
2.9. Найдите в программе команды иного формата, чем команды перехода. Выполните их декодирование. Выделите у них отдельные поля и осмыслите их содержимое. Включите в отчет. Этот пункт задания рекомендуется проделать дома при подготовке отчета.
Часть 3. Представление символьной информации в процессорной системе
3.1. Добавьте в исходный код программы из пункта 2.3, после ячейки N и перед списком чисел текстовую строку с Вашей фамилией именем и отчеством. Используйте для этого директиву ассемблера .asciz и латинские символы. Возможно появление ошибок в процессе компиляции измененной программы. Попробуйте понять причину, осмыслив выводимое компилятором сообщение, и устраните её.
3.2. Скомпилируйте и загрузите изменённую программу в память процессорной системы описанным ранее способом. С помощью вкладки Memory найдите в ОП добавленную текстовую строку. Используйте побайтовое представление информации и команды из меню View, позволяющие отображать содержимое текстовых строк. Сделайте снимок экрана с помощью клавиши Print Screen и поместите в отчет. Отразите в отчете местоположение текстовой строки и ASCII коды используемых символов. Они понадобятся для выполнения следующей лабораторной работы.
3.3. Попробуйте выполнить программу. Наблюдайте найденный ею результат на красных светодиодах. Корректно ли работает программа? Отразите в отчете и укажите причину.
3.4. Выполните дополнительное редактирование программы так, чтобы она корректно работала, как и прежде. Запустите программу и покажите результат её работы преподавателю.
3.5. Можно ли вставить добавленную текстовую строку прямо в код программы, разместив её между командами? Попробуйте это сделать и результат работы программы покажите преподавателю. Поместите в отчет ваше заключение.
Часть 4. Раздельное представление кода и данных в процессорной системе. Форматы чисел
4.1. С помощью директивы .data локализуйте область данных программы в отдельной секции. Выполните еще раз компиляцию и загрузку программы. Проверьте, используя вкладку Memory, изменилось ли место размещения кода программы и исходных данных в памяти процессорной системы. Отобразите в отчете.
4.2. Экспериментально определите, как работает директива ассемблера .org. Для этого в программу вставьте строку .org 0x100 сначала перед директивой .asciz, а затем перед директивой .data. Отразите в отчете ваши наблюдения и сделанные выводы.
4.3. Удалите добавленную директиву .org из программы. Завершите сеанс работы с текущей программой используя команду Disconnect из меню Actions. Выполните команду Settings > Memory settings. В появившемся окне в поле .data sections установите адрес, соответствующий начальному адресу статической памяти, используемой в процессорной системе. Выполните повторно компиляцию и загрузку программы. Используя вкладку Memory найдите в ОП место размещения исходных данных, включая текстовую строку с вашей фамилией, именем и отчеством. Отобразите в отчете, сделав снимок экрана. Выполните программу. Наблюдайте выводимый результат.
4.4. Внесите изменения в программу таким образом, чтобы заданные числа в списке были представлены в формате полуслов. Добавьте в список предельные значения чисел для этого формата, максимальные по модулю отрицательные и положительные числа.
4.5. Отладьте программу. Наблюдайте размещение исходных чисел в ОП и выводимый программой результат. Поместите в отчет листинг отлаженной программы, снимок ОП с размещённым списком чисел и фото загораемых светодиодов. Для вывода минимальных значений используйте измененную в пункте 2.7 программу.
4.6. Внесите изменения в программу таким образом, чтобы заданные числа в списке были представлены в формате байт. Добавьте в список предельные значения чисел для этого формата. Добейтесь правильного выполнения программы. Наблюдайте размещение исходных чисел в ОП и выводимый программой результат. Поместите в отчет листинг отлаженной программы, снимок ОП с размещённым списком чисел и фото загораемых светодиодов.
4.7. *Внесите изменения в программу таким образом, чтобы заданные числа в списке были представлены в формате двойных слов. Найденное максимальное число из списка поместите в два смежных регистра процессора. Добейтесь правильного выполнения программы. Наблюдайте размещение исходных чисел в ОП и найденный результат. Поместите в отчет листинг отлаженной программы, снимок ОП с размещённым списком чисел, и содержимое регистров с найденным результатом.
Отчетные материалы
Отчетные материалы должны содержать:
- Цель лабораторной работы.
- Материалы, связанные с подготовкой к работе, включая теоретическую часть и листинг программы lab_max нахождения наибольшего числа из списка.
- Информацию по выполнению каждого пункта задания. Причем в отчете должны содержаться выполняемые вами действия, зафиксированы наблюдаемые результаты, и приведены ваши объяснения.
- Разбор формата команд условного и безусловного переходов.
- Листинги подготовленных и отлаженных программ для выполнения пунктов 2.2, 2.3, 2.7,2.8*, 4.4, 4.6, 4.7* задания.
- Краткое заключение.
Защита лабораторной работы
Для защиты работы студенты должны продемонстрировать знания, умения и навыки, перечисленные в разделе «Планируемые результаты обучения». Ниже приводится список примерных вопросов и заданий, предлагаемых студентам.
- Какие форматы используются для представления чисел в процессорной системе? Приведите примеры, используя листинги программ, представленные в отчетных материалах.
- Какие форматы команд используются в процессорной системе? Приведите примеры, используя листинги программ, представленные в отчетных материалах.
- Какие способы используются для адресации операндов в процессорной системе? Приведите примеры, используя листинги программ, представленные в отчетных материалах.
Студенты должны уметь:
- Находить после загрузки программы в ОП сам программный код и данные, используемые в программе, включая отдельные команды и элементы данных;
- Изменять место загрузки в ОП секций с программным кодом и с исходными данными;
- Находить в программном коде команды заданного формата I, R или J;
- Уметь декодировать их и объяснять назначение отдельных полей команды;
- Находить в программном коде команды, использующие указанный способ адресации;
- Для любой команды из программного кода уметь пояснить её назначение, формат, количество операндов, их место размещения, способы их адресации и место сохранения результата;
- Создавать новые программные компоненты и отлаживать их, в том числе программы, использующие рассмотренные в предыдущей работе периферийные устройства. Например, используя переключатели SW управлять определенными индикаторами HEX, зелеными и красными светодиодами;
- Использовать разные форматы для представления числовой информации в процессорной системе.
Приложения
Приложение – А
Форматы команд
Машинные команды кодируются 32 разрядными словами. В программе на ассемблере могут использоваться псевдокоманды, которые после компиляции программы будут представлены одной или двумя машинными командами.
В процессоре Nios II используется 3 формата команд. [12,3]
- I-тип. Поля A и B, размером 5 бит, используются для указания регистров. Для непосредственных операндов используется поле IMMED16, которое в АЛУ будет расширено до 32 бит.
- R-тип. Поля A, B и C, размером 5 бит, используются для указания регистров. Поле OPX используется для расширения кода операций.
- J-тип. Данный формат используется для инструкций вызова подпрограмм Call. Поле IMMED26, дополненное справа двумя нулевыми битами и слева четырьмя старшими разрядами счетчика команд PC, используется для задания прямого адреса вызываемой процедуры.

Адресация в процессоре Nios II
Процессор Nios II использует для адресации 32-битный адрес, при этом память является адресуемой по байтам. С помощью команд можно записывать/считывать слова (32), полуслова (16) и байты данных(8). Чтение или запись данных по адресам, которые не связаны с памятью или периферийными устройствами, приводит к неопределенным результатам. В процессоре NIOS II используются следующие способы адресации.
- Непосредственная адресация. 16 битный операнд присутствует в самой команде. Он будет дополнен знаковыми разрядами до 32 разрядов при выполнении арифметической операции над 32 разрядными словами.
- Регистровая адресация. Операнды находятся в регистрах процессора.
- Относительная регистровая адресация. Операнд находится в ОП. Его эффективный адрес получается путем суммирования содержимого регистра и знакового 16 разрядного смещения, находящегося в самой команде.
- Косвенная регистровая адресация. Содержимое регистра является эффективным адресом операнда. Этот способ эквивалентен предыдущему способу, когда смещение в команде равно нулю.
- Абсолютная адресация. 16-битный абсолютный адрес операнда может быть определен путем использования смещения относительно регистра r0, который всегда равен нулю.
Приложение – Б
Листинг 3.
Исходный код программы lab_max.s, нахождения наибольшего числа из списка
Примечание: Код листинга 3 будет добавлен вручную.
Приложение – В
Таблица 2.1 Варианты заданий
| Номер стенда | Количество чисел в списке | Минимальное значение | Загораемые красные светодиоды | Декодируемые команды |
|---|---|---|---|---|
| 1 | 9 | -1 | пять правых | beq DONE |
| 2 | 11 | -2 | пять левых | br STOP |
| 3 | 13 | -3 | шесть в центре | br LOOP |
| 4 | 15 | -4 | шесть правых | beq DONE |
| 5 | 17 | -5 | шесть левых | br STOP |
| 6 | 16 | -6 | два в центре и по одному с краев | br LOOP |
| 7 | 14 | -7 | Четыре в центре и по два с краев | beq DONE |
| 8 | 12 | -8 | По три слева и справа | br STOP |
| 9 | 10 | -9 | По четыре слева и справа | br LOOP |
| 10 | 8 | -10 | Четыре левых и шесть правых | beq DONE |
Чеклист выполнения
- Работа выполнена
- Отчет подготовлен