Перейти к содержанию
    

Доброго времени суток! Возникла проблема с запуском программы NIOS из флеш памяти.

Создал конфигурацию ПЛИС, NIOS и написал программу. Всё работает, но только при непосредственном запуске из эклипса. Никак не получается записать на флеш и запустить с неё. При этому непосредственно логика ПЛИС работает после прошивки (перезагрузки).

Входная частота 20 МГц, после PPL в QSYS 100 МГц.

Делаю mem_init_generate и добавляю qip файл от этого mem_init_generate.

 

Следую данной иструкции:

1- Add EPCS Flash Controller in Qsys

2- Connect the Clk input of EPCS Flash Loader IP to a separate clock of < 25Mhz

3- Set Reset Vector offset of NiosII to the Base Address of EPCS Flash Loader.

4- Set Exception vector to any On Chip RAM

5- Generate Qsys

6- Open BSP Editor and set all linker regions to SDRAM / onchip memory

7- Generate BSP and Build the BSP project

8- Build Your C code and obtain *.elf

9- Goto make targets->Build and run "mem_init_generate"

10- From mem_init folder include *.qip file in your Quartus project and recompile to get *.SOF

11- copy *.SOF and *.elf files in a separate folder i.e /output

12- perform following in NiosII command Shell:

 

1. Create a flash file for the hardware and software image

sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs --verbose

elf2flash --input=<elf file>.elf --output=swimage.flash --epcs --after=hwimage.flash --verbose

 

 

2. Convert the flash images into Hex files

 

nios2-elf-objcopy -I srec -O ihex hwimage.flash hwimage.hex

nios2-elf-objcopy -I srec -O ihex swimage.flash swimage.hex

 

 

3. Generate *.JIC file

 

Create your jic file using Quartus® II Convert Programming File tool, add the Flash Loader and

both hex files with absolute addressing option selected.

 

Подскажите что может быть?

image.png

 

image.png

 

image.png

 

image.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уберите flash контроллер. Он вам сейчас явно не нужен.

Поставьте вектор сброса тоже на ончип память.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уберите flash контроллер. Он вам сейчас явно не нужен.

Поставьте вектор сброса тоже на ончип память.

Уточню.

Топикстартер делает две взаимоисключающие вещи - mem_init_generate и вектор сброса на EPCS Flash Controller.

 

Mem_init_generate нужно выполнять в том случае, если хочется положить исполняемый код прямо в sof-файл - т.е. в этом случае сегмент кода располагается в OnChip RAM, туда же должен указывать вектор сброса.

 

Если же при старте хочется загружать исполняемый код из EPCS (например, во внешнее ОЗУ), то для этого служит EPSC Flash Controller, и вектор сброса должен указывать на него. При старте системы первой начнет выполняться программа-копировшик, которая живет внутри EPSC Flash Controller'а. И после того, как исполняемый код будет перелит в нужное ОЗУ, копировшик передаст управление этому коду.

Но в этом случае необходимо, чтобы в настройках BSP было бы запрещено исполнение кода приложения с адреса сброса (галка "Allow code at reset" должна быть сброшена).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уточню.

Топикстартер делает две взаимоисключающие вещи - mem_init_generate и вектор сброса на EPCS Flash Controller.

 

Mem_init_generate нужно выполнять в том случае, если хочется положить исполняемый код прямо в sof-файл - т.е. в этом случае сегмент кода располагается в OnChip RAM, туда же должен указывать вектор сброса.

 

Если же при старте хочется загружать исполняемый код из EPCS (например, во внешнее ОЗУ), то для этого служит EPSC Flash Controller, и вектор сброса должен указывать на него. При старте системы первой начнет выполняться программа-копировшик, которая живет внутри EPSC Flash Controller'а. И после того, как исполняемый код будет перелит в нужное ОЗУ, копировшик передаст управление этому коду.

Но в этом случае необходимо, чтобы в настройках BSP было бы запрещено исполнение кода приложения с адреса сброса (галка "Allow code at reset" должна быть сброшена).

 

Спасибо за сведения!

 

Пробую всё таки сделать с mem_init, добавляю mem_init.qip к проекту и никаких результатов. Сброс естественно на он чип. И как определить где должен располагаться код, т.е. где эта настройка?

 

image.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8- Build Your C code and obtain *.elf

9- Goto make targets->Build and run "mem_init_generate"

10- From mem_init folder include *.qip file in your Quartus project and recompile to get *.SOF

3. Generate *.JIC file

Вам нужно только это, должно работать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Настройки линкера в bsp editor.

Если у вас есть еще какая-то память проекте, то может там указано не туда куда нужно.

 

ПС Там еще отдельно в main есть настройка указателей на стек прерываний и стек исключений.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не работает попробуйте выполнитьProcessing->Update Memory Initialization File, иногда помогало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробую всё таки сделать с mem_init, добавляю mem_init.qip к проекту и никаких результатов. Сброс естественно на он чип. И как определить где должен располагаться код, т.е. где эта настройка?

После того, как qip к проекту добавляете, не забываете проект перекомпилировать? Ну или, как минимум, ассемблер в квартусе запустить?

Все это нужно, чтобы в sof-файле содержимое OnChip RAM было проинициализировано исполняемым кодом.

 

Вот после заливки в микрросхему такого sof'а Ваш исполняемый код должен сразу начать выполняться (если, конечно, с ресетом косяков не имеется).

 

Ну и не забываем про настройки BSP (которые необходимо сделать перед компиляцией исполняемого кода в эклипсе), как коллега выше советовал.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в настройках памяти указали файл инициализации?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в настройках памяти указали файл инициализации?

Он там по умолчанию указывается, со стандартным наименованием.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Он там по умолчанию указывается, со стандартным наименованием.

Я имел ввиду память системную в кусисе. Странно, у меня всегда требует флажок поставить и путь указать. Пардон, видимо ключевое слово non-default...

post-18832-1505307587.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После того, как qip к проекту добавляете, не забываете проект перекомпилировать? Ну или, как минимум, ассемблер в квартусе запустить?

Все это нужно, чтобы в sof-файле содержимое OnChip RAM было проинициализировано исполняемым кодом.

 

Вот после заливки в микрросхему такого sof'а Ваш исполняемый код должен сразу начать выполняться (если, конечно, с ресетом косяков не имеется).

 

Ну и не забываем про настройки BSP (которые необходимо сделать перед компиляцией исполняемого кода в эклипсе), как коллега выше советовал.

 

Проект перекомпилирую полностью, но безрезультатно.

Файл с настройками BSP:

 

image.png

 

Non-default я ставлю без галки. Как я понимаю, если делать mem-init и добавлять этот qip, то галочка там и не нужна.

 

При обновлении памяти у меня выскакивает следующее, может ли это как-то повлиять. На форуме видел, что вроде как на это не надо обращать внимания, но все же.

 

image.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При обновлении памяти у меня выскакивает следующее, может ли это как-то повлиять. На форуме видел, что вроде как на это не надо обращать внимания, но все же.

Не открывается картинка. Вставьте ее прямо в сообщение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С этими сообщениями все нормально, ошибок нет, в моем проекте аналогичные варнинги.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...