Про Nios II.

Установка Quartus.

Процесс установки Quartus в linux детально описан по любой ссылке в инете. Здесь отмечу что во время прошивки проекта с использованием usb-blaster и если эта операция выполняется впервые, то есть вероятность появления вот такой ошибки:

«Unable to scan device chain. Please check the hardware setup»
означает что не хватает прав для доступа к usb-blaster. 

Решение очень простое:

1. sudo gedit /etc/udev/rules.d/altera-usb-blaster.rules
2. пишем в файле одну строчку: ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="666"

Nios II и hello world.

Весь процесс запуска helloworld для Nios II лучше пояснять с помощью скриншотов из квартуса и эклипса, но на самом деле это всё легко гуглится в инете. Для меня было особой проблемой это просто не понимание того что ваще надо делать и в какой последовательности. Поэтому здесь кратко последовательность шагов для helloworld для Nios II.

Есть платка с EP4CE15F17C8, на платке стоят 4 светодиода. Попробуем ими помигать с помощью Nios II.

1. Запускаем Quartus. Создаем новый проект. File->New Project wizard. Задаем место расположения проекта, имя и на следующей вкладке выбираем семейство «Cyclone IV E» и модель EP4CE15F17C8. Больше не каких настроек не требуется везде жмем «Next». Новый проект создан.

2. Создаём Nios II. Открываем «Qsys». Там уже будет создан компонент «clk_0». Добавляем еще компоненты:
«Nios II» - во вкладке «Jtag Debug Module» выставляем «No Debugger». Больше ничего не изменяем.
«On-Chip Memory (RAM or ROM)» - размер памяти укажем 8192.
«Pio (Parallel I/O)» - width = 4. Экспортируем выводы Leds наружу.
Соединяем связи. Назначаем адреса с помощью System->Assign Base Addresses. Назначаем «Reset Vector». «Exception Vectror», «Break Vectror» в настройках «Nios II». Нажимаем «Generate».
«Nios II» создан. Добавляем компонент «Nios II» на схему.

3. Создаём и добавляем на схему компонент «PLL»

4. Соединяем «PLL» и «Nios II». Остальные контакты определяем с помощью Tools->Tcl Scripts. Схема создана.

5. Напишем hello world для светодиодов. Запустим Eclipse: Tools->Nios II Software Build tools for Eclipse.
Создадим новый проект «File->New->Nios II Application and BSP from Template». Будет создано два проекта.
Тот который bsp. ПКМ->Nios II->Generate BSP.
Ток который не bsp. ПКМ->New->file->main.c. Вставляем туда:

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

int main ()
{
    char leds = 0xf;
    long i = 0;
    while(1)
    {
        IOWR_ALTERA_AVALON_PIO_DATA(PIO_0_BASE, leds);
        for (i=0; i<0xffffff; i++);    // Delay
        // Johnson code counter on leds
        leds = leds ^ 0xf;
    }
    return 0;
}

Собираем программу : ПКМ->Build project.(ctrl+B)
Конвертируем elf в hex. ПКМ->Make Targets->Build..->mem_init_generate.
Появится hex файл в директории проекта. Скопируем его в корень проекта Quartus.

6. Выполним компиляцию проекта в Quartus ->Start compilation. В результате чего получим sof файл пригодный для прошивки с помощью usb-blaster. Прошиваем его и смотрим как мигают светодиоды.