Nios II Быстрый старт

Все популярнее становится тенденция создания устройства на одном кристалле. Да, в любой момент можно создать плату со жменей контроллеров и наладить между ними обмен (будь то spi, uart или еще что), но зачем это делать, если можно создать систему на одном кристале?! Всего одна микросхема! Как следствие простая схема и плата. Компактный размер.
ПЛИС безусловно в этом плане лидер. Но без процессора порой не обойтись. Ведь бизнес логику писать на vhdl/verilog как-то не вставляет.
У компании Altera есть отличное решение для таких задач — процессор Nios II. Он имеет несколько конфигураций и уйму настроек, что позволяет развернуть на его основе любой программное обеспечение от пульта до системы под управлением Linux.
Ну а сейчас рассмотрим как же добавить Nios II в проект ПЛИС. Любое изучение в embedded мире начинается с моргания светодиодом, с этого начнем и мы.

Создайте новый проект для вашей ПЛИС. У меня это Cyclone II ep2c5t144. Довольно древняя штука на текущий момент.
Когда все готово добавите схему (bdf) в проект. После чего приступим к настройке Nios.
Открываем Qsys: Tools — Osys.

В левой части окна ищем нужные компоненты.
Нам нужен процессор Nios II, память Onchip Memmory и параллельный порт ввода-вывода PIO.
Находим Nios кликаем по нему дважды. Открывается окно настройки.

Выбираем самую «дохлую» комплектацию. Остальное пока не настраиваем.
Добавляем память.

Размер укажем 8192Кб. Остальные настройки оставляем как есть.
Теперь настало время порта ввода-вывода.

Делаем его 3 разрядным. Это потому что у меня 3 светодиода на плате.
Получаем такую систему.

Все линии нужно соединить как на картинке выше.
Заходим в настройки Nios II. Для этого дважды кликаем по добавленному элементу.
В появившемся окне выбираем векторы сброса и исключения. Пока укажем только что они будут у нас в памяти onchip memmory. Адреса же предоставим вычислить автоматически.

Для назначения адресов устройствам воспользуемся меню System — Assign Base Addresses

Теперь в низу окна Qsys не должно остаться предупреждений.

Идем во вкладку Clock Settings и указываем частоту тактирования. Я не буду использовать PLL и укажу частоту внешнего кварцевого резонатора.
Готово. Переходим во вкладку Generate. Указваем Qsys что хотим симулировать и синтезировать vhdl модель.

Жмем Generate и ждем.

Теперь необходимо написать ПО для нашей системы. Это делается при помощи встроенного в пакет Eclipse и компилятора.
Идем в Tools — Nios II Software Build Tools for Eclipse. Откроется окно Eclipse в котором нам нужно создать два проекта.
Один из них будет собственно прошивкой, а второй — bsp, необходим для описания ядра.
Жмем File — New — Nios II Application and BSP from Template

Выбираем Blank Project и SOPS Info файл из нашего проекта. Жмем финиш и ожидаем завершения генерации нового проекта.

В итоге получаем в левой часта Eclipse два новых проекта.
Кликаем правой кнопкой по BSP проекту — Nios II — Generate BSP. Ожидаем генерации описания процессора.

В основной проект добавляем файл main.c:

#include "system.h"
#include "altera_avalon_pio_regs.h"

int main ()
{
    char leds = 0x1;
    int i = 0;
    while(1)
    {
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, leds);
        for (i=0; i<(ALT_CPU_CPU_FREQ/500); i++);

        leds = (leds >= 0x08) ? 1u : (leds << 1u);
    }
    return 0;
}

Жмем Build.
Теперь у нас есть бинарник с прошивкой.
В проект Quartus можно подключить hex файл прошивки, чтобы не прошивать созданный процессор каждый раз.
Для этого жмем правой клавишей по проекту — Make Targets — Build — mem_init_generate .

Пока оставим в покое Eclipse и перейдем назад в проект ПЛИС. Файл с прошивкой нужно скопировать в каталог с nios. У меня nios/synthesis/submodules/
Добавляем в проект сгенерированный процессор. Добавляем файлы.

nios/simulation/submodules/nios_nios2_qsys_0.sdc
nios/synthesis/nios.qip

Я также создал main.sdc чтобы указать настройки тактирования проекта.

create_clock -name CLK -period 20 -add [get_ports clk]
set_output_delay -clock {CLK} 1 [all_outputs]

Добавляем в проект Nios II, вход тактирования и выводы для светодиодов.

Синтезируем прошивку ПЛИС. Прошиваем. Если скопировали hex диоды уже моргают.
Подключим отладчик.

В проекте Eclipse идем в Debug Configurations и добавляем новую конфигурацию Nios II Hardware.

Во вкладке Target Connection ищем устройство.

Для начала отладки жмем Debug.
Eclipse предлагает переключиться в отладочный вид.

Можем построчно выполнять программу.
Прошивка ПЛИС занимает довольно не много.

А счастья полные штаны 😉

Скачать проект

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий

  1. Николай

    Дошел до добавления в проект main.c/ Как его добавить?

    Ответить