ЛР1 > Разработка процессорного ядра NiosII и программного обеспечения для него

Цель работы: Используя SOPC Builder сгенерировать NIOS II ядро, загрузить программный код и запустить на учебной плате DE II

Теоретические сведения

 Скачать Материалы к лабораторной работе №1.

NiosII – программное процессорное ядро, описанное на языке программирования аппаратуры и предназначенное для реализации в ПЛИС фирмы ALTERA. Для создания «системы на кристалле» к процессорному ядру необходимо добавить дополнительные компоненты – память, порты ввода/вывода, таймер, необходимые интерфейсы. Для этой цели используется специальная утилита, входящая в состав САПР Quartus II – SOPC Builder, позволяющая формировать требуемую архитектуру процессорной системы. Пример одного из вариантов реализации архитектуры процессорного ядра показан на рисунке 1.

Рисунок 1. Пример архитектуры процессорного ядра с Nios II.

Для обмена данными с внешними микросхемами (например – SRAM, SDRAM, Flash и пр.) внутри ПЛИС формируются специальные компоненты – интерфейсные блоки. Они связаны с процессорным ядром с помощью специальной шины – Avalon switch fabric. В состав процессорного ядра могут входить и специализированные блоки: JTAG UART – для обмена информацией с компьютером с помощью загрузочного кабеля (USB-Blaster или ByteBlaster), модуль JTAG Debug – для выполнения отладки программного обеспечения с помощью компьютера. Пользователь может подключать к процессорному ядру как библиотечные компоненты (входящие в состав САПР Quartus II), так и собственные модули.

    Для выполнения данной лабораторной работы используется отладочный модуль DE2 Cyclone II Edition. Исходные данные для работы размещены в папке «ИД для Лаб_1».

Задание 1

1. Создайте новый проект в Вашей рабочей директории. Укажите название проекта (рисунок 1).

Рисунок 1. Создание нового проекта.

2. В качестве микросхемы, для которой создается проект, укажите микросхему EP2C35F672C6 семейства Cyclone II (установлена на отладочном модуле DE2).

3. Создаваемый процессорный модуль должен содержать следующие компоненты:

– процессорное ядро (Nios II CPU);

внутренний блок памяти для хранения программы и данных (onchip memory);

– контроллер последовательного канала связи JTAG UART;

– параллельные порты ввода/вывода для связи с внешними компонентами отладочного модуля – светодиодами, кнопками (PIO peripherals).

4. Вызовите утилиту формирования архитектуры процессорного ядра (меню Tools > SOPC Builder…). Укажите имя процессорной системы – nios_system и язык описания – Verilog (рисунок 2).

Рисунок 2. Указание имени процессорной системы.

5. В открывшемся диалоговом окне (рисунок 3) проверьте системные настройки – семейство ПЛИС Cyclone II, тактовая частота (clk_0) – внешняя, 50МГц.

Рисунок 3. Проверка системных настроек.

6. Добавьте процессорное ядро в проект. В окне библиотеки системных компонентов (Component Library) в папке Processors выделите Nios II Processor и нажмите кнопку Add. В открывшемся диалоговом окне выберите архитектуру Nios II/e (рисунок 4).

Рисунок 4. Настройка процессорного ядра.

7. Нажмите кнопку Finish. В окне сообщений утилиты SOPC Builder могут появиться предупреждения или сообщения об ошибке. Они связаны с тем, что для процессора Nios II был пропущен ряд настроек. Мы их сделаем позже.

8. Внешний вид диалогового окна утилиты SOPC Builder должен выглядеть так, как показано на рисунке 5.

Рисунок 5. Внешний вид диалогового окна утилиты SOPC Builder.

9. Подключите к процессорному ядру внутренний блок памяти. Для этого в разделе Memories and Memory Controllers раскройте папку On-Chip и выделите компонент On-Chip Memory (RAM or ROM). Нажмите кнопку Add… В открывшемся диалоговом окне установите следующие параметры: тип памяти RAM (Writable), объем памяти – 4096 байт, разрядность шины данных – 32 (как показано на рисунке 6). Остальные настройки оставьте по умолчанию. Нажмите кнопку Finish.

Рисунок 6. Настройка внутреннего блока памяти.

10. Внешний вид диалогового окна утилиты SOPC Builder должен выглядеть так, как показано на рисунке 7.

Рисунок 7. Внешний вид диалогового окна утилиты SOPC Builder

11. Подключите к процессорному ядру контроллер порта ввода/вывода для переключателей. Для этого в перечне устройств в разделе Peripherals раскройте папку Microcontroller Peripherals и выделите компонент PIO (Parallel I/O). Нажмите кнопку Add…В открывшемся диалоговом окне установите разрядность порта равную 8 бит и направление передачи данных – Input ports only (как показано на рисунке 8). Нажмите кнопку Finish.


Рисунок 8. Настройки порта ввода/вывода для переключателей.

12. Аналогичным способом подключите к процессорному ядру контроллер порта ввода/вывода для светодиодов. Для этого в перечне устройств в разделе Peripherals раскройте папку Microcontroller Peripherals и выделите компонент PIO (Parallel I/O). Нажмите кнопку Add…В открывшемся диалоговом окне установите разрядность порта равную 8 бит и направление передачи данных – Output ports only. Нажмите кнопку Finish.

13. Внешний вид диалогового окна утилиты SOPC Builder должен выглядеть так, как показано на рисунке 9.

Рисунок 9. Внешний вид диалогового окна утилиты SOPC Builder.

14. Подключите к процессорному ядру контроллер последовательного канала JTAG UART. Для этого в перечне устройств в разделе Interface Protocols раскройте папку Serial и выделите компонент JTAG UART. Нажмите кнопку Add… В открывшемся диалоговом окне оставьте все значения без изменений (как показано на рисунке 10). Нажмите кнопку Finish.

Рисунок 10. Настройки контроллера последовательного канала.

15. Процессорный модуль собран. Для изменения имени компонента, входящего в состав процессорного модуля, нужно выделить компонент, нажать правую кнопку мышки и выбрать команду Rename из контекстного меню. По заданным именам происходит обращение к компонентам из программы.

16. Переименуйте порт ввода/вывода pio_0 на Switches, а порт ввода/вывода pio_1 на LEDs. Внешний вид диалогового окна утилиты SOPC Builder должен выглядеть так, как показано на рисунке 11.

Рисунок 11. Внешний вид диалогового окна утилиты SOPC Builder.

17. Для присвоения базовых адресов устройствам, входящим в состав процессорной системы, в меню System утилиты SOPC Builder выберите команду Auto-Assign Base Addresses. Обратите внимание на изменение базовых адресов компонентов, входящих в состав процессорного модуля.

18. Если все выполнено правильно, то процессорная система должна выглядеть так, как показано на рисунке 12.

Рисунок 12. Внешний вид процессорной системы.

19. Укажите размещение стартового адреса программы и таблицы векторов прерывания. Для этого вызовите диалоговое окно настройки процессорного модуля cpu_0 (двойным нажатием левой кнопки мыши на его имени). Из выпадающего меню для Reset Vector выберите значение onchip_memory2_0. И для Exception Vector – значение onchip_memory2_0 (рисунок 13). Нажмите кнопку Finish.

Рисунок 13. Настройка векторов прерывания процессора.

20. Перейдите на страницу System Generation утилиты SOPC Builder. Проверьте, что опция Simulation. Create project simulator files осталась не выбранной. Сохраните все настройки процессорной системы (меню File > Save). Нажмите кнопку Generate.

21. После получения сообщения об успешном завершении создания процессорной системы, закройте утилиту SOPC Builder.

22. Создайте в САПР Quartus II файл верхнего уровня иерархии. Это может быть графический файл или файл на языке HDL. В нем должны быть указаны внешние сигналы, которые подаются на процессорный модуль (тактовая частота, сигнал сброс, входные сигналы с переключателей и выходные сигналы на светодиоды).

23. Добавьте в файл созданный процессорный модуль (рисунок 14). Он находится в рабочей директории проекта. Данный пример – создание графического файла.

Рисунок 14. Добавление в проект процессорного модуля nios_system.

Для того, чтобы воспользоваться файлом с назначениями контактов ввода/вывода, поставляемым вместе с отладочным модулем DE2, имена внешних сигналов в Вашем файле должны совпадать с именами сигналов, указанных в файле DE2_pin_assignments.csv (как показано на рисунке 15).

Рисунок 15. Пример файла верхнего уровня иерархии.

24. Сохраните файл (меню File > Save). Сохраните проект (меню File > Save Project).

25. Подключите файл с назначениями контактов ввода/вывода. Для этого в меню Assignments выберите команду Import Assignments. В открывшемся диалоговом окне (рисунок 16) укажите расположение файла DE2_pin_assignments.csv. Нажмите ОК.

Рисунок 16. Подключение файла с назначениями.

26. Выполните полную компиляцию проекта.

Задание 2

1. После успешной компиляции проекта, загрузите его в ПЛИС, установленную на отладочном модуле (конфигурационный файл – *.sof).

2. Откройте среду разработки программного обеспечения для встраиваемого процессорного ядра Nios II IDE.

3. Создайте новый проект для процессорного ядра. Для этого в меню File выберите команду New > Project. В открывшемся диалоговом окне выберите Nios II C/C++ Application и нажмите кнопку Next>.

4. На следующей странице диалогового окна укажите имя проекта. В графе SOPC Builder System PTF File укажите расположение файла описания процессорного модуля nios_system.ptf (используйте кнопку Browse…Файл располагается в рабочей директории проекта). В окне выбора шаблона для проекта (Select Project Template) укажите Blank Project (рисунок 17). Нажмите кнопку Next>.

Рисунок 17. Настройки проекта для разработки программного обеспечения.

5. На следующей странице выберите настройку Create a new system library named:. Нажмите кнопку Finish. В окне доступных проектов приложения Nios II IDE появятся две новые директории: директория исходных данных проекта (training) и директория системной библиотеки проекта (training_syslib[nios_system]).

6. Создайте для проекта новый исходный файл training.c. Для этого в меню File выберите команду New > Source File. В открывшемся диалоговом окне укажите имя файла (рисунок 18). Нажмите Finish.


Рисунок 18. Создание исходного файла.

Напишите простую программу, которая отображает состояние переключателей с помощью светодиодов. Пример такой программы представлен ниже:

#define Switches (volatile char*)0x0003000

#define LEDs (char*)0x0003010

void main()

{ while(1)

*LEDs = *Switches;

}

Обратите внимание – имена переменных Switches и LEDs совпадают с именами портов ввода/вывода процессорного модуля, а значения адресов этих переменных – с адресами, назначенными утилитой SOPC Builder.

7. Сохраните файл.

8. Выделите директорию системной библиотеки проекта, нажмите правую кнопку мыши и выберите команду Properties из открывшегося контекстного меню. В открывшемся диалоговом окне выберите закладку System Library (рисунок 19).

Рисунок 19. Настройки системной библиотеки проекта.

9. Проверьте, что в настройках системной библиотеки проекта функции stdout, stderr, stdin связаны с устройством jtag_uart_0. Все секции программы располагаются в onchip_memory2_0. Сделаны установки для использования минимальных библиотек языка С и системных драйверов. Нажмите ОК.

10. Для компиляции проекта выделите рабочую директорию проекта training, нажмите правую кнопку мыши и выберите команду Build Project из открывшегося контекстного меню.

11. Если компиляция проекта завершилась без ошибок, проверьте работу программы с помощью отладочного модуля. Для этого выделите рабочую директорию проекта, нажмите правую кнопку мыши и выберите команду Run As > Nios II Hardware из открывшегося контекстного меню (рисунок 20).

Рисунок 20. Запуск программы на отладочном модуле.

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

13. Перейдите в режим отладки программного обеспечения. Для этого выделите рабочую директорию проекта, нажмите правую кнопку мыши и выберите команду Debug As > Nios II Hardware из открывшегося контекстного меню. Подтвердите разрешение перехода в режим отладки (кнопка Yes). Внешний вид отладочной среды показан на рисунке 21.

Рисунок 21. Режим отладки программного обеспечения.

14. Установите точку останова в строке 13 исходного текста программы (двойное нажатие левой кнопки мыши слева от номера строки). Если номер строки не отображается в текстовом редакторе, в меню Window выберите команду Preferences.. В открывшемся окне раскройте папку General, затем папку Editors и выделите строку Text Editors. В правой части диалогового окна установите опцию Show line numbers (рисунок 22). Нажмите ОК.

Рисунок 22. Настройка текстового редактора.

15. Нажмите кнопку запуска программы resume (или клавишу F8). Обратите внимание на точку останова программы.

16. Нажмите один из переключателей на отладочном модуле и повторно запустите программу. Что изменилось?

17. Для выхода из режима отладки в окне Debug выделите элемент Thread[0], нажмите правую кнопку мыши и выберите команду Terminate and Remove из открывшегося контекстного меню (рисунок 23).

Рисунок 23. Завершение отладки программы.

Задания для самостоятельной работы

1. Разработайте свой вариант программы для процессорного ядра nios_system. Проверьте ее работоспособность на отладочном модуле.

2. Подключите к процессорному модулю дополнительные порты ввода/вывода для отображения информации на семисегментных индикаторах и красных светодиодах.