Научно-производственная фирма «ЛМТ» КОМПЛЕКС УЧЕБНЫЙ ЛАБОРАТОРНЫЙ SDK-6.1 «Система на кристалле» с процессором NIOS Руководство по применению Данное руководство ориентировано на версию оборудования SDK-6.1 Rev.2. При использовании оборудования версии SDK-6.1 Rev.1 пользователь должен самостоятельно изменить подключение выводов ПЛИС к ядру NIOS. Версия документа: 1.0.2 Дата изменения: 16.06.06 Санкт-Петербург 2006 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. Содержание 1. ВВЕДЕНИЕ ...........................................................................................................................3 2. СОЗДАНИЕ «СИСТЕМЫ НА КРИСТАЛЛЕ» С ПРОЦЕССОРОМ NIOS ..............3 2.1. СОЗДАНИЕ ПРОЕКТА В СРЕДЕ QUARTUS II ...................................................................... 3 2.2. СОЗДАНИЕ НОВОЙ «СИСТЕМЫ НА КРИСТАЛЛЕ» ............................................................. 3 2.3. ДОБАВЛЕНИЕ МОДУЛЕЙ В СИСТЕМУ ............................................................................... 3 2.3.1. Процессор NIOS .....................................................................................................3 2.3.2. Встроенное ОЗУ (On-Chip RAM) .........................................................................5 2.3.3. Параллельные порты ввода/вывода .....................................................................6 2.3.4. Контроллер Flash-памяти ....................................................................................7 2.3.5. Контроллер шины Avalon......................................................................................8 2.4. РАСПРЕДЕЛЕНИЕ АДРЕСНОГО ПРОСТРАНСТВА................................................................ 8 2.5. ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ ПРОЦЕССОРА ............................................................... 9 2.6. ГЕНЕРИРОВАНИЕ СИСТЕМЫ .......................................................................................... 10 2.7. КОМПИЛЯЦИЯ И ЗАГРУЗКА СИСТЕМЫ В СТЕНД SDK-6.1.............................................. 10 3. СОЗДАНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ДЛЯ ПРОЦЕССОРА NIOS .10 3.1. РАЗРАБОТКА ПРОГРАММЫ............................................................................................. 10 3.1.1. В корневом каталоге проекта (nios32_for_sdk61) после генерации системы появится подкаталог nios_0_sdk, в котором, в свою очередь, будет каталог src. В этом каталоге по умолчанию находятся примеры программ на языке C для процессора Nios. В этот же каталог (nios32_for_sdk61\nios_0_sdk\src) нужно поместить собственный файл nios_for_sdk61.c, содержащий C-программу, зажигающую светодиоды. Исходный код программы приведен в листинге 1. .................................................................................10 3.2. КОМПИЛЯЦИЯ ............................................................................................................... 11 3.3. ПРЕОБРАЗОВАНИЕ SREC-ФАЙЛА В BIN-ФАЙЛ ................................................................ 11 3.4. ЗАПИСЬ ПРОГРАММЫ ВО FLASH-ПАМЯТЬ СТЕНДА ........................................................ 11 4. ЗАПУСК СИСТЕМЫ........................................................................................................12 стр. 2из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. 1. Введение В данном руководстве рассматривается процесс создания «системы на кристалле» с 32разрядным процессором Altera NIOS для учебного стенда SDK-6.1 и тестовой программы для нее. Программа записывается во Flash-память стенда, откуда ее и исполняет процессор Nios-32, загруженный в ПЛИС “Cyclone”. При создании проекта использовалось следующее программное обеспечение: − Altera Quartus II 4.1 SP2; − Altera Nios Development Kit, Version: 3.20. В случае отсутствия этого программного обеспечения его необходимо установить. 2. Создание «системы на кристалле» с процессором NIOS 2.1. Создание проекта в среде Quartus II В среде Quartus II создать новый проект с именем nios32_for_sdk61 для микросхемы Altera Cyclone EP1C3T144C8, не добавляя в него никаких файлов, после чего открыть созданный проект; 2.2. Создание новой «системы на кристалле» Запустить программу SOPC Builder из меню Tools среды Quartus II. В появившемся диалоговом окне “Create New System” ввести имя создаваемой системы (“sdk61nios”), выбрать требуемый язык HDL (Verilog или VHDL) и нажать кнопку “OK” (рис. 1); Рисунок 1. Диалоговое окно “Create New System” 2.3. Добавление модулей в систему В открывшемся окне “Altera SOPC Builder – sdk61nios” во вкладке “System Contents” в выпадающем списке “Device Family” выбрать “Cyclone”, в поле “System Clock Frequency” ввести частоту тактового генератора (40 МГц для стенда SDK-6.1), после чего выбрать и добавить в систему необходимые модули из списка в левой части окна: 2.3.1. Процессор NIOS Добавить в систему процессор Altera NIOS. Для этого выбрать пункт “Nios Processor – Altera Corporation” во вкладке “Avalon Modules” и нажать кнопку “Add”. Откроется диалоговое окно настройки процессора, в котором необходимо: стр. 3из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. - в блоке “Processor Architecture” выбрать архитектуру “Nios-32”; - в блоке “Configuration Options” из выпадающего списка “Preset Configurations” выбрать “Standard Features / Average LE usage”, не отмечая флажками опции “Enable advanced configuration controls” и “Smart Regeneration”. После этого нажать кнопку “Finish” (рис. 2). В результате в окне “Altera SOPC Builder – sdk61nios” в списке модулей появится первый модуль – “nios_0”, а так же новая вкладка “Nios More “nios_0” Settings”, к которой мы вернемся позднее (рис. 3); Рисунок 2. Диалоговое окно настройки процессора стр. 4из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. Рисунок 3. Добавлен модуль процессора “nios_0” 2.3.2. Встроенное ОЗУ (On-Chip RAM) Добавить в систему модуль встроенной памяти (памяти, которая будет физически размещена внутри ПЛИС “Cyclone” вместе с процессором). Для этого выбрать пункт “OnChip Memory (RAM or ROM) ” во вкладке “Avalon Modules -> Legacy Components” и нажать кнопку “Add”. Откроется диалоговое окно настройки встроенной памяти, в котором необходимо: - во вкладке “Attributes” в блоке “Memory Type” выбрать “RAM (writeable)”, не отмечая флажком опцию “Dual-Port Access”, в блоке “Size” установить ширину шины данных равной 16 битам и размер памяти равным 4 килобайтам; - во вкладке “Contents” отметить флажком вариант “Blank”. После этого нажать кнопку “Finish” (рис. 4). В результате в окне “Altera SOPC Builder – sdk61nios” в списке модулей появится модуль “onchip_memory_0”; стр. 5из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. Рисунок 4. Диалоговое окно настройки встроенной памяти 2.3.3. Параллельные порты ввода/вывода Добавить в систему модуль параллельных портов ввода/вывода. Для этого выбрать пункт “PIO (Parallel I/O)” во вкладке “Avalon Modules -> Other” и нажать кнопку “Add”. Откроется диалоговое окно настройки параллельных портов ввода/вывода, во вкладке “Basic Settings” которого необходимо: - в блоке “Width” установить ширину порта равной 8 битам (состояние порта будет отображаться на линейку светодиодов); - в блоке “Direction” выбрать вариант “Output ports only”. После этого нажать кнопку “Finish” (рис. 5). В результате в окне “Altera SOPC Builder – sdk61nios” в списке модулей появится модуль “pio_0”; стр. 6из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. Рисунок 5. Диалоговое окно настройки параллельных портов ввода/вывода 2.3.4. Контроллер Flash-памяти Добавить в систему модуль контроллера Flash-памяти. Для этого выбрать пункт “AMD 29LV800 Flash for EP20K200E Nios Development Board” во вкладке “Avalon Modules -> EP20K200E Nios Development Board” и нажать кнопку “Add”. Откроется диалоговое окно настройки модуля контроллера Flash-памяти, в котором необходимо: - во вкладке “Attributes” которого необходимо установить ширину шины данных контроллера равной 18 битам; - во вкладке “Simulation” выбрать вариант “Do Not Create Simulation Model”. После этого нажать кнопку “Finish” (рис. 6). В результате в окне “Altera SOPC Builder – sdk61nios” в списке модулей появится модуль “nios_dev_board_flash_0”; Рисунок 6. Диалоговое окно настройки контроллера Flash-памяти стр. 7из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. 2.3.5. Контроллер шины Avalon Добавить в систему модуль контроллера тристабильной шины Avalon. Для этого выбрать пункт “Avalon Tri-State Bridge” во вкладке “Avalon Modules -> Bridges” и нажать кнопку “Add”. Откроется диалоговое окно настройки модуля контроллера тристабильной шины Avalon, в котором необходимо выбрать вариант “Registered” в блоке “Incoming Signals”, после чего нажать кнопку “Finish” (рис. 7). В результате в окне “Altera SOPC Builder – sdk61nios” в списке модулей появится модуль “tri_state_bridge_0”; Рисунок 7. Диалоговое окно настройки контроллера тристабильной шины Avalon 2.4. Распределение адресного пространства После добавления в систему модулей необходимо распределить между ними адресное пространство процессора. Для иллюстрации распределения памяти на рис. 8 приведена ее карта: Рисунок 8. Карта памяти Страницы 0 – 3 Flash-памяти стенда отображаются в адресное пространство процессора, т. о. процессор имеет возможность исполнять программу, записанную в эти страницы, при этом адрес, с которого процессор начинает считывать команды после включения питания, задается константой “Reset Location” (см. п. 5). Чтобы при записи образа программы во Flash-память не повредить загрузчик, расположенный в нулевой странице, значение “Reset стр. 8из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. Location” соответствует адресу начала 3-ей страницы Flash-памяти стенда (0x060000), т.о. программу необходимо записывать в третью страницу. Размер программы не может превышать размера одной страницы (128Кб). После распределения адресных пространств модулей (начальный адрес которых указан в соответствующих строках столбца “Base”, конечный – столбца “End”) необходимо убедиться, что они не перекрываются (рис. 9); Рисунок 9. Окно “Altera SOPC Builder” после добавления модулей 2.5. Дополнительные настройки процессора Во вкладке “Nios More “nios_0” Settings” окна “Altera SOPC Builder – sdk61nios” нужно функциям “Reset Location”, “Vector Table”, “Program Memory”, “Data Memory”, “Primary Serial Port” и “Auxiliary Serial Port” назначить модули так, как показано на рис. 10; стр. 9из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. Рисунок 10. Назначение модулей функциям 2.6. Генерирование системы Во вкладке “System Generation” окна “Altera SOPC Builder – sdk61nios” нужно отметить флажками только опции “SDK” и “HDL”, после чего нажать кнопку “Generate”. В случае успешной генерации системы появится надпись “SUCCESS: SYSTEM GENERATION COMPLETED”. После этого можно закрыть SOPC Builder либо внести изменения и заново генерировать систему. 2.7. Компиляция и загрузка системы в стенд SDK-6.1 В результате выполнения п.6 в корневом каталоге проекта (nios32_for_sdk61) было создано 4 файла с описанием системы на языке Verilog: sdk61nios.v, nios_0.v, onchip_memory_0.v и pio_0.v. Эти файлы нужно вручную добавить в проект в среде Quartus II, после чего скомпилировать его, не забыв назначить используемым в проекте портам ввода/вывода конкретные выводы микросхемы (используя “Assignment Editor”). В результате компиляции должен быть получен конфигурационный rbf-файл, который при помощи программы sdk61fw.exe нужно записать в любую страницу Flash-памяти стенда SDK-6.1, не используемую для хранения конфигурационных файлов, данных или программ (в примере, приведенном на рис. 8, использовалась страница 14). Для более подробного ознакомления с процессом записи файлов во Flash-память рекомендуется воспользоваться документацией к стенду SDK-6.1. 3. Создание программного обеспечения для процессора NIOS 3.1. Разработка программы 3.1.1. В корневом каталоге проекта (nios32_for_sdk61) после генерации системы появится подкаталог nios_0_sdk, в котором, в свою очередь, стр. 10из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. будет каталог src. В этом каталоге по умолчанию находятся примеры программ на языке C для процессора Nios. В этот же каталог (nios32_for_sdk61\nios_0_sdk\src) нужно поместить собственный файл nios_for_sdk61.c, содержащий C-программу, зажигающую светодиоды. Исходный код программы приведен в листинге 1. #include "excalibur.h" int main() { long i, j; np_pio *p = na_pio_0; p->np_piodirection = 0xFF; p->np_piodata = 0x5A; while(1) { for (i = 0; i p->np_piodata for (j = 0; j p->np_piodata } < = < = 400000; i++); 0xF8; 400000; j++); 0x07; return 0; } Листинг 1. Программа, зажигающая светодиоды 3.2. Компиляция Необходимо скомпилировать файл nios_for_sdk61.c. Для этого нужно запустить Nios SDK Shell (Пуск -> Программы -> Altera -> Nios Development Kit 3.20 -> Nios SDK Shell), перейти в каталог nios32_for_sdk61\nios_0_sdk\src и выполнить команду nb –b 0x060000 nios_for_sdk61.c где 0x060000 – адрес “Reset Location”. В результате будет создан файл nios_for_sdk.srec; 3.3. Преобразование srec-файла в bin-файл Файл nios_for_sdk61.srec нужно преобразовать в файл nios_for_sdk61.bin при помощи программы srec2bin.exe: srec2bin –o 0x060000 nios_for_sdk61.srec nios_for_sdk61.bin где 0x060000 – адрес “Reset Location”; 3.4. Запись программы во Flash-память стенда Полученный файл nios_for_sdk61.bin при помощи программы sdk61fw.exe нужно записать в третью страницу Flash-памяти стенда SDK-6.1: стр. 11из 12 ООО «ЛМТ» SDK-6.1. SOC на базе ядра NIOS. Руководство пользователя. sdk61fw write page3 nios_for_sdk61.bin com1 или sdk61fw write 0x060000 nios_for_sdk61.bin com1 где 0х060000 – адрес начала страницы 3, com1 – имя используемого COM-порта. 4. Запуск системы Загрузив в стенд конфигурационный файл из 14 страницы Flash-памяти стенда SDK-6.1, система начнет исполнять программу, записанную в третью страницу Flash-памяти стенда. стр. 12из 12