Время от времени возникает необходимость реализации какого-то проекта/узла на ПЛИС. В связи с возрастающей сложностью автоматов состояний, решил начать изучать софтовый процессор NIOS 2, который можно легко добавить в любой проект на базе ПЛИС Altera.
Проблема с которой я столкнулся уже на первом этапе- это сохранение программы для NIOS cpu во внешней, независимой памяти- например загрузочной памяти ПЛИС - EPCS.
Примеры с elf2flash .. sof2flash у меня так и не заработали, например утилита elf2flash на финальном этапе преобразования elf в hex просто пролетала без выполнения операции :(
Я нашел другой способ сохранения elf в загрузочной памяти ПЛИС.
Суть решения в том что в QSYS ( Platform designer ) память RAM можно заранее проинициализировать желаемой программой для NIOS.
Делается это так - открываем наш проект в QSYS, заходим в свойства добавленной нами RAM памяти - и в низу находим раздел Memory initialization . Далее устанавливаем две галки как на примере ниже:
И указываем нашу подготовленную прошивку для NIOS. После чего генерируем все исходные файлы которые создаются в QSYS, и добавляем их в квартусе в проект, как это обычно делается.
Далее, можем скомпилировать проект в квартусе, и на выходе получится SOF файл который уже будет содержать в себе программу для NIOS, и самое главное - квартус сам разберется с адресацией участков кода для ПЛИС и для NIOS.
Ну а чтоб сохранить все это дело непосредственно во внешнюю загрузочную память плис - EPCS, нужно всего лишь преобразовать наш SOF файл в JIC и соответствующим образом записать её в EPCS.
В процессе отладки естественно программа для NIOS ядра будет меняться, и для её обновления в составе SOF файла - нужно в квартусе на вкладке Processing выбрать Update Memory initialization file, после чего еще раз скомпилировать проект в квартусе.
И еще, чуть не забыл, hex файл с программой для NIOS можно сформировать в эклипсе. Для этого зажимаем shift + F9 и выбираем mem_init_generate. В результате будет сгенерирован hex файл с нашим кодом.
На этом все, надеюсь данный способ окажется кому то полезным, потому как я например убил не мало времени на поиск решения - как сохранить программу для NIOS во внешней памяти без танцев с бубном вокруг многократного преобразования файлов с правкой их адресов.