Найти тему
Дмитрий Маленда

Как сохранить прошивку для NIOS процессора в загрузочной памяти FPGA

Время от времени возникает необходимость реализации какого-то проекта/узла на ПЛИС. В связи с возрастающей сложностью автоматов состояний, решил начать изучать софтовый процессор NIOS 2, который можно легко добавить в любой проект на базе ПЛИС Altera.

Рис.1. Работающая отладка с NIOS на базе Cyclone V ядра
Рис.1. Работающая отладка с NIOS на базе Cyclone V ядра

Проблема с которой я столкнулся уже на первом этапе- это сохранение программы для NIOS cpu во внешней, независимой памяти- например загрузочной памяти ПЛИС - EPCS.

Примеры с elf2flash .. sof2flash у меня так и не заработали, например утилита elf2flash на финальном этапе преобразования elf в hex просто пролетала без выполнения операции :(

Я нашел другой способ сохранения elf в загрузочной памяти ПЛИС.

Суть решения в том что в QSYS ( Platform designer ) память RAM можно заранее проинициализировать желаемой программой для NIOS.

Делается это так - открываем наш проект в QSYS, заходим в свойства добавленной нами RAM памяти - и в низу находим раздел Memory initialization . Далее устанавливаем две галки как на примере ниже:

Рис.2. Инициализация RAM  памяти.
Рис.2. Инициализация RAM памяти.

И указываем нашу подготовленную прошивку для NIOS. После чего генерируем все исходные файлы которые создаются в QSYS, и добавляем их в квартусе в проект, как это обычно делается.

Далее, можем скомпилировать проект в квартусе, и на выходе получится SOF файл который уже будет содержать в себе программу для NIOS, и самое главное - квартус сам разберется с адресацией участков кода для ПЛИС и для NIOS.

Ну а чтоб сохранить все это дело непосредственно во внешнюю загрузочную память плис - EPCS, нужно всего лишь преобразовать наш SOF файл в JIC и соответствующим образом записать её в EPCS.

В процессе отладки естественно программа для NIOS ядра будет меняться, и для её обновления в составе SOF файла - нужно в квартусе на вкладке Processing выбрать Update Memory initialization file, после чего еще раз скомпилировать проект в квартусе.

И еще, чуть не забыл, hex файл с программой для NIOS можно сформировать в эклипсе. Для этого зажимаем shift + F9 и выбираем mem_init_generate. В результате будет сгенерирован hex файл с нашим кодом.

Рис.3. создание hex файла
Рис.3. создание hex файла

На этом все, надеюсь данный способ окажется кому то полезным, потому как я например убил не мало времени на поиск решения - как сохранить программу для NIOS во внешней памяти без танцев с бубном вокруг многократного преобразования файлов с правкой их адресов.