Перейти к основному содержимому

ЛР №2 Архитектура системы команд процессора NIOS II

Архитектура системы команд процессора NIOS II

Для кого этот документ

  • Студентам курса "Организация ЭВМ"
  • Необходимое ПО: Quartus II

Цель работы

Изучение архитектуры системы команд (АСК) процессора NIOS II, приобретение навыков создания новых программных компонентов и их отладки.

Объекты изучения

  • Архитектура системы команд процессора «NIOS II»:
    • типы и форматы его команд;
    • используемые способы адресации операндов;
    • форматы представления числовой информации;
    • форматы представления символьной информации.
  • приложение Intel Monitor Program (IMP) для работы со стендом, по части его использования для добавления новых программных компонентов, их компиляции, загрузки в ОП и отладке.

Планируемые результаты обучения

После выполнения этой работы студенты будут знать:

  • Типы и форматы команд процессора NIOS II;
  • Типы и форматы операндов;
  • Способы адресации операндов.

Смогут:

  • Создавать новые программные компоненты для процессорной системы и работать с ними;
  • Выполнять их компиляцию и загрузку в оперативную память процессорной системы, управляя их размещением в ОП;
  • Находить в ОП исполняемый код программы и отдельные её команды, исходные данные и их отдельные элементы;
  • Отлаживать программные компоненты, используя контрольные точки, выполнение по шагам и в автоматическом режиме.

Приобретут навыки работы:

  • с учебным стендом;
  • с приложением IMP;
  • с процессорной системой, реализованной в кристалле ПЛИС учебного стенда.

Исходные файлы лабораторной работы

Исходным является файл lab_max.s, в котором содержится программа нахождения наибольшего числа из списка. Листинг 3 этой программы с подробными комментариями приведен в приложении – Б.

Подготовка к лабораторной работе

  1. Изучите описание процессора NIOS II [12,3]. Включите в отчет описание его регистровой структуры, типов используемых команд, их форматов и способов адресации операндов. Уясните как выполняются команды условного перехода. Включите в отчет описание команд bge и blt, вместе с их кодами операций.
  2. Изучите описание процессорной системы DE 2 -115 Media Computer, реализованной в стенде [6,7,3]. Включите в отчет структурную схему процессорной системы и карту памяти, на которой должны быть отражены адреса ОП и портов ввода вывода периферийных устройств системы.
  3. Изучите директивы ассемблера .data, .text, .equ, .asciz, .word, .hword, .byte, .org, .end, .include. Поместите их описания в отчетные материалы.
  4. Уясните пункты задания, выполняемого в текущей лабораторной работе.
  5. Уясните логику работы программы lab_max (Листинг 3), нахождения наибольшего числа из списка. Выполните редактирование программы для выполнения пункта 2.2 задания и подготовьте новые данные для тестирования программы, соответствующие индивидуальному варианту задания (пункт 2.3). Включите текст измененной программы с обновленными данными в отчет.
  6. Выполните редактирование программы с целью нахождения минимального числа из списка с выводом его на зеленые светодиоды (пункт 2.7). Поместите текст измененной программы в отчет.

Вопросы для самоконтроля

  1. Сколько регистров общего назначения имеется в процессоре NIOS II? Какова их разрядность?
  2. Входят ли в состав процессора иные регистры, кроме регистров общего назначения?
  3. Для чего они предназначены?
  4. Можно ли смотреть и изменять содержимое регистров процессора в IMP?
  5. Какие из регистров общего назначения выполняют специальные функции?
  6. Какой из регистров в процессорной системе указывает на текущую выполняемую команду? Можно ли его изменить, и если да, то как?
  7. К какому типу АСК (RISC или CISС) относится процессор NIOS II? По каким признакам?
  8. Типы и форматы команд процессора NIOS II?
  9. Типы и форматы операндов?
  10. Используемые в процессоре способы адресации операндов?
  11. Какой код используется для представления чисел со знаком?
  12. Какой код используется для представления символьной информации?
  13. Какие директивы ассемблера используются для задания числовых операндов?
  14. Какие директивы ассемблера используются для задания символьных операндов?
  15. Какая директива ассемблера используется для задания констант?
  16. Как выполнить компиляцию исходной программы и загрузить её исполняемый файл в память процессорной системы?
  17. Какие возможности предоставляет IMP для отладки программы?
  18. Что такое контрольная точка? Как её установить, удалить?
  19. Можно ли загрузить исходные данные отдельно от кода программы и как это сделать?

Порядок выполнения лабораторной работы

Часть 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. *Внесите изменения в программу таким образом, чтобы заданные числа в списке были представлены в формате двойных слов. Найденное максимальное число из списка поместите в два смежных регистра процессора. Добейтесь правильного выполнения программы. Наблюдайте размещение исходных чисел в ОП и найденный результат. Поместите в отчет листинг отлаженной программы, снимок ОП с размещённым списком чисел, и содержимое регистров с найденным результатом.

Отчетные материалы

Отчетные материалы должны содержать:

  1. Цель лабораторной работы.
  2. Материалы, связанные с подготовкой к работе, включая теоретическую часть и листинг программы lab_max нахождения наибольшего числа из списка.
  3. Информацию по выполнению каждого пункта задания. Причем в отчете должны содержаться выполняемые вами действия, зафиксированы наблюдаемые результаты, и приведены ваши объяснения.
  4. Разбор формата команд условного и безусловного переходов.
  5. Листинги подготовленных и отлаженных программ для выполнения пунктов 2.2, 2.3, 2.7,2.8*, 4.4, 4.6, 4.7* задания.
  6. Краткое заключение.

Защита лабораторной работы

Для защиты работы студенты должны продемонстрировать знания, умения и навыки, перечисленные в разделе «Планируемые результаты обучения». Ниже приводится список примерных вопросов и заданий, предлагаемых студентам.

  1. Какие форматы используются для представления чисел в процессорной системе? Приведите примеры, используя листинги программ, представленные в отчетных материалах.
  2. Какие форматы команд используются в процессорной системе? Приведите примеры, используя листинги программ, представленные в отчетных материалах.
  3. Какие способы используются для адресации операндов в процессорной системе? Приведите примеры, используя листинги программ, представленные в отчетных материалах.

Студенты должны уметь:

  • Находить после загрузки программы в ОП сам программный код и данные, используемые в программе, включая отдельные команды и элементы данных;
  • Изменять место загрузки в ОП секций с программным кодом и с исходными данными;
  • Находить в программном коде команды заданного формата 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, используется для задания прямого адреса вызываемой процедуры.

Рис. 2.1 – Форматы команд процессора Nios II

Адресация в процессоре Nios II

Процессор Nios II использует для адресации 32-битный адрес, при этом память является адресуемой по байтам. С помощью команд можно записывать/считывать слова (32), полуслова (16) и байты данных(8). Чтение или запись данных по адресам, которые не связаны с памятью или периферийными устройствами, приводит к неопределенным результатам. В процессоре NIOS II используются следующие способы адресации.

  • Непосредственная адресация. 16 битный операнд присутствует в самой команде. Он будет дополнен знаковыми разрядами до 32 разрядов при выполнении арифметической операции над 32 разрядными словами.
  • Регистровая адресация. Операнды находятся в регистрах процессора.
  • Относительная регистровая адресация. Операнд находится в ОП. Его эффективный адрес получается путем суммирования содержимого регистра и знакового 16 разрядного смещения, находящегося в самой команде.
  • Косвенная регистровая адресация. Содержимое регистра является эффективным адресом операнда. Этот способ эквивалентен предыдущему способу, когда смещение в команде равно нулю.
  • Абсолютная адресация. 16-битный абсолютный адрес операнда может быть определен путем использования смещения относительно регистра r0, который всегда равен нулю.

Приложение – Б

Листинг 3.

Исходный код программы lab_max.s, нахождения наибольшего числа из списка

Примечание: Код листинга 3 будет добавлен вручную.

Приложение – В

Таблица 2.1 Варианты заданий

Номер стендаКоличество чисел в спискеМинимальное значениеЗагораемые красные светодиодыДекодируемые команды
19-1пять правыхbeq DONE
211-2пять левыхbr STOP
313-3шесть в центреbr LOOP
415-4шесть правыхbeq DONE
517-5шесть левыхbr STOP
616-6два в центре и по одному с краевbr LOOP
714-7Четыре в центре и по два с краевbeq DONE
812-8По три слева и справаbr STOP
910-9По четыре слева и справаbr LOOP
108-10Четыре левых и шесть правыхbeq DONE

Чеклист выполнения

  • Работа выполнена
  • Отчет подготовлен