Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Загрузка .sof + .elf в EPCS16
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Acvarif
Подскажите пожалуйста как можно сформировать общий загрузочный файл из .sof и .elf (Nios) для загрузки его в кофигурационную ПЗУ типа EPCS16.
Очевидно нужно в систему добавить EPCS контроллер и поставить Reset вектор на него? Или это не обязательно? Но как объединить файлы .sof и .elf, чтобы потом зашить в EPCS16, так чтобы по включению питания все грузилось последовательно как и при отладке? (Для отладки пользуюсь USB Blaster в режиме JTAG)
gosu-art
Можно не добавлять, а указать ресет на он чип и выполнить следующую процедуру
http://naliwator.narod.ru/les/les_nios_epcs_03.html
Stewart Little
Цитата(Acvarif @ Jan 28 2013, 15:47) *
Очевидно нужно в систему добавить EPCS контроллер и поставить Reset вектор на него? Или это не обязательно?

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

Цитата
Но как объединить файлы .sof и .elf, чтобы потом зашить в EPCS16, так чтобы по включению питания все грузилось последовательно как и при отладке? (Для отладки пользуюсь USB Blaster в режиме JTAG)

Изучайте Nios II Flash Programmer User Guide
vadimuzzz
Цитата(Acvarif @ Jan 28 2013, 18:47) *
Очевидно нужно в систему добавить EPCS контроллер и поставить Reset вектор на него? Или это не обязательно?

не обязательно. можно ресет нацелить на он-чип, а в качестве файла инициализации этой памяти указать hex-файл программы. но если вы захотите поменять программу только ниоса, то придется перекомпилировать квартусовский проект. если же ресет указывает на внешнюю ПЗУ, то программу можно менять независимо от sof. выбирайте, что удобнее
Acvarif
Спасибо. Общий смысл понятен.
Сначала попробую без контроллера.
Пытаюсь конвертить файлы согласно статьи http://naliwator.narod.ru/les/les_nios_epcs_03.html
Пока не получается. Нажмите для просмотра прикрепленного файла
Для удобства я вынес файл sof2flash.jar и свой Neptun.sof в корневую директорию.
Очевидно так не верно. В статье пишут, что нужно войти в директорию проекта. Насколько это обязательно? Если директория проекта глубоко то в командной строке долго набирать. Можно ошибиться... Может наоборот переместить Neptun.sof в директорию ..Altera/Q90/nios2eds/bin - туда где находится sof2flash.jar и выполнить нужную команду из Total Commander в командной строке?
Acvarif
Спасибо. Конвертация получилась. Программирование тоже. Подсматривал еще и тут http://www.altera.com/support/kdb/solution...132010_126.html
Вынес в отдельную корневую директорию свои файлы .sof .elf и sof2flash.jar elf2flash.jar nios2-elf-objcopy.exe из комплекта Nios. Конвертил на базе TotalCommander в командной строке.
Это проще чем вызывать консоль Nios.
Вроде все сделал правильно и адреса в .map идут последовательно
Код
BLOCK        START ADDRESS        END ADDRESS

Page_0        0x00000000        0x000AF6E6
ne.hex        0x000AF6E7        0x000BFEAA

Note: All the addresses in this file are byte addresses

Но по включению питания проект работает наполовину. Похоже, что загружен только .sof После принудительной загрузки .elf проект начинает работать. Похоже, что с вектором сброса проблема. У меня все работает в SDRAM. On_chip нет Как быть в этом случае?

Хотя... Виноват. Очевидно в конфмгурацию нужно все же добавить on_chip и свойствах системной библиотеки переопределить на sdram только данные...Правильно-ли я мыслю?
Serhiy_UA
Цитата(Acvarif @ Jan 28 2013, 14:47) *
Подскажите пожалуйста как можно сформировать общий загрузочный файл из .sof и .elf (Nios) для загрузки его в кофигурационную ПЗУ типа EPCS16.

В приложении описано. Там же, в конце, немного о необходимой конфигурации SOPC.
Ну и naliwator разъяснял.
vadimuzzz
Цитата(Acvarif @ Jan 28 2013, 20:41) *
принудительной загрузки .elf проект начинает работать. Похоже, что с вектором сброса проблема. У меня все работает в SDRAM. On_chip нет Как быть в этом случае?

на EPCS сброс направить и не мучиться. (контроллер EPCS это и есть on-chip с кодом загрузчика по SPI)
Acvarif
Цитата(vadimuzzz @ Jan 28 2013, 17:11) *
на EPCS сброс направить и не мучиться. (контроллер EPCS это и есть on-chip с кодом загрузчика по SPI)

Понял. Но в этом случае придется добавить в систему epcs контроллер?
Получается что именно для такго случая понадобится последовательная (тройная) конвертация файлов для получения окончательнго .hex где последвательно прописаны данные конфигураци и собственно прграммы для SDRAM?
vadimuzzz
Цитата(Acvarif @ Jan 28 2013, 23:22) *
Понял. Но в этом случае придется добавить в систему epcs контроллер?
Получается что именно для такго случая понадобится последовательная (тройная) конвертация файлов для получения окончательнго .hex где последвательно прописаны данные конфигураци и собственно прграммы для SDRAM?

да. но ленивые люди вроде меня пишут скрипт для nios2-flash-programmer, тогда все эти телодвижения делаются одним щелчком мыши
gosu-art
А еще не получается дебугится если ресет указан на EPCS. Может я че делаю не так?
2 vadimuzzz
А где можно почитать как работать со скриптами для флешьпрограммера. Ну и буду благодарен за примерчик rolleyes.gif
vadimuzzz
Цитата(gosu-art @ Jan 29 2013, 11:51) *
А еще не получается дебугится если ресет указан на EPCS. Может я че делаю не так?
2 vadimuzzz
А где можно почитать как работать со скриптами для флешьпрограммера. Ну и буду благодарен за примерчик rolleyes.gif

все прекрасно отлаживается, разницы никакой не будет. при отладке код программы загружается напрямую в ОЗУ и туда же передается управление. останов обычно на main стоит. если какая-то проблема с этим, выкладывайте логи, настройки проекта.
вот пример скрипта:
Код
#!/bin/sh
EPCS_BASE=0x1001800
cd /home/vadik/Qdesigns/sdr400cpu-ng
# Creating .flash file for the FPGA configuration
"$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="./sdr400cpu-ng.sof" --output="sdr400cpu-ng.flash"
# Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=$EPCS_BASE  "sdr400cpu-ng.flash"
# Creating .flash file for the project
"$SOPC_KIT_NIOS2/bin/elf2flash" --epcs --after="sdr400cpu-ng.flash" --input="./software/sdr400/sdr400.elf" --output="epcs_flash_controller_0.flash"
# Programming flash with the project
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=$EPCS_BASE  "epcs_flash_controller_0.flash"

значения всех ключиков есть в доке, что тут выше выкладывали
gosu-art
Стесняюсь спросить rolleyes.gif А откуда запускать это добро?
vadimuzzz
Цитата(gosu-art @ Jan 29 2013, 12:47) *
Стесняюсь спросить rolleyes.gif А откуда запускать это добро?

да откуда угодно. открываете консоль и вызываете скрипт, можно куда-нибудь на видное место положить.
Цитата
cd /home/vadik/Qdesigns/sdr400cpu-ng
- это переход в каталог проекта, тут свои пути поставите. если у вас винда, то там д.б. что-то типа nios console
Acvarif
Добавил в систему EPCS контроллер и наткнулся на ноги двойного назначения.
Выставил все как I/O. Все откомпилировалось нормально.
Не уверен, что я правильно все понимаю по поводу прошивки EPCS. Поскольку у меня все (программа, данные, стек...) находится в SDRAM то и очевидно вектор сброса я должен выставить на SDRAM.
Я так понимаю, что теперь нужно в EPCS зашить все так, чтобы по включению питания сначала в ПЛИС грузилась конфигурация, затем в SDRAM загружалась программа Nios, затем по сбросу начинало крутиться все вместе. Похоже что для этого достаточно выполнить только это:
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
Теперь для создания jic file достаточно добавить оба .hex c их абсолютной адресацией и затем все зашить в EPCS. Правильно-ли я все понимаю?


vadimuzzz
Цитата
Поскольку у меня все (программа, данные, стек...) находится в SDRAM то и очевидно вектор сброса я должен выставить на SDRAM.

нет, вектор сброса указывает на EPCS. а вот в настройках линкера проекта все секции программы кидаете на SDRAM. тогда при подаче питания произойдет следующее:
  1. сконфигурируется ПЛИС (и ядро процессора в том числе)
  2. запустится программа, которая лежит по адресу сброса (контроллер EPCS), это бутлодер, который перепишет программу в SDRAM
  3. по окончании копирования в SDRAM управление будет передано вашей программе
Acvarif
Цитата(vadimuzzz @ Jan 29 2013, 12:12) *
нет, вектор сброса указывает на EPCS. а вот в настройках линкера проекта все секции программы кидаете на SDRAM. тогда при подаче питания произойдет следующее:
  1. сконфигурируется ПЛИС (и ядро процессора в том числе)
  2. запустится программа, которая лежит по адресу сброса (контроллер EPCS), это бутлодер, который перепишет программу в SDRAM
  3. по окончании копирования в SDRAM управление будет передано вашей программе

Спасибо. Понятно.
Осталась небольшая загвоздка. Сформировал я последовательно 2 .hex один из .sof другой из .elf. Каждый начинается со своего нужного адреса. Но конвертор jic разрешает добавить только один .hex как их теперь состыковать? Или может добавить просто .sof, а затем .hex который сделан из .elf с относительной настройкой адресации?
gosu-art
Цитата(vadimuzzz @ Jan 29 2013, 11:12) *
нет, вектор сброса указывает на EPCS. а вот в настройках линкера проекта все секции программы кидаете на SDRAM. тогда при подаче питания произойдет следующее:
  1. сконфигурируется ПЛИС (и ядро процессора в том числе)
  2. запустится программа, которая лежит по адресу сброса (контроллер EPCS), это бутлодер, который перепишет программу в SDRAM
  3. по окончании копирования в SDRAM управление будет передано вашей программе

А у меня не получалось так crying.gif http://electronix.ru/forum/index.php?s=&am...t&p=1088042
Наверное потому что я это не сделал ?
sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs --verbose
nios2-elf-objcopy -I srec -O ihex hwimage.flash hwimage.hex
Acvarif
Цитата(gosu-art @ Jan 29 2013, 12:25) *
Наверное потому что я это не сделал ?
sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs --verbose
nios2-elf-objcopy -I srec -O ihex hwimage.flash hwimage.hex

Это Вы делаете .hex из .sof. Но для формирования jic какраз и нужен .sof А вот после него должен идти .hex который сформирован из .elf
elf2flash --input=<elf file>.elf --output=swimage.flash --epcs --after=hwimage.flash --verbose
nios2-elf-objcopy -I srec -O ihex swimage.flash swimage.hex
Может все же так?
vadimuzzz
Цитата(gosu-art @ Jan 29 2013, 15:25) *
А у меня не получалось так crying.gif http://electronix.ru/forum/index.php?s=&am...t&p=1088042

там не все видно на второй картинке (видны параметры команды elf2flash, а надо бы еще sof2flash глянуть). то, что есть, выглядит правильно. какие еще симптомы? FPGA конфигурируется?
gosu-art
Да, ПЛИС грузится, процессор видно, но программа не выполняется. Выкрутился пока так http://electronix.ru/forum/index.php?showt...4&hl=sdram* но хотелось бы по нормальному делать. Плат пока на столе нет, потом с DDR2 еще попробую.
vadimuzzz
Цитата(gosu-art @ Jan 29 2013, 16:20) *
Да, ПЛИС грузится, процессор видно, но программа не выполняется.

а через отладчик программа запускается (в sdram)?
Acvarif
Пока не получается. По включению питания система загружается (.sof) (FPGA конфигурируется)
Но программа - .hex созданный из .elf
sof2flash --input=<hwimage>.sof --output=hwimage.flash --epcs --verbose
elf2flash --input=<elf file>.elf --output=swimage.flash --epcs --after=hwimage.flash --verbose
nios2-elf-objcopy -I srec -O ihex swimage.flash swimage.hex
не запускается.
Запускается (sdram) только после принудительной загрузки из Nios Eclipse
Конвертация и вектора на картинках
Нажмите для просмотра прикрепленного файлаНажмите для просмотра прикрепленного файла
Вроде все должно работать. Но не хочет
gosu-art
Цитата(vadimuzzz @ Jan 29 2013, 12:23) *
а через отладчик программа запускается (в sdram)?

Я уже если честно не помню, но потратил не мало времени. Плата была не серийная, один раз решил - забыл rolleyes.gif Но сейчас чувствую снова придется возвращаться к этому вопросу. Жду пока припаяют DDR2. wacko.gif
Serhiy_UA
Цитата(Acvarif @ Jan 29 2013, 12:26) *
Вроде все должно работать. Но не хочет

Сделайте маленький тестовый проект, используя для Ниоса внутреннею память FPGA... От простого с сложному..
Потом, была еще заморочка: в *.hex нужно было по ходу дела переформатировать ширину слова к формату байта. На это я указал выше в своей шпаргалке hex.doc.
А принт-скрины, вроде бы в норме... Не хватает только еще вида структуры из SOPC (Qsys)...
Acvarif
Цитата(Serhiy_UA @ Jan 29 2013, 14:29) *
Сделайте маленький тестовый проект, используя для Ниоса внутреннею память FPGA... От простого с сложному..
Потом, была еще заморочка: в *.hex нужно было по ходу дела переформатировать ширину слова к формату байта. На это я указал выше в своей шпаргалке hex.doc.
А принт-скрины, вроде бы в норме... Не хватает только еще вида структуры из SOPC (Qsys)...

Про ширину слова я забыл. Надо попробовать. Конфигурация системы на картинке. На EPCS подается pll_sys (100 мГц - может многовато будет?)
Нажмите для просмотра прикрепленного файла Вверху cpu_0
Если опять застрянет, начну с внутренней памятью.
vadimuzzz
Acvarif, я нить дискуссии немного потерял, а вы через flash-programmer пробовали?
Acvarif
Цитата(vadimuzzz @ Jan 29 2013, 15:29) *
Acvarif, я нить дискуссии немного потерял, а вы через flash-programmer пробовали?

EPCS прошиваю USB Blaster но через Quartus II Programmer. flash-programmer не пробовал.
А в чем будет разница?
Stewart Little
Цитата(Serhiy_UA @ Jan 29 2013, 14:29) *
Не хватает только еще вида структуры из SOPC (Qsys)...

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

Цитата(Acvarif @ Jan 29 2013, 15:56) *
А в чем будет разница?

Разница будет в том, что не придется чесать левое ухо правой ногой. angry.gif
Acvarif
Цитата(Stewart Little @ Jan 29 2013, 16:02) *
Не только. Еще важны настройки BSP - в каком состоянии находится галка "Allow code at reset" (или что-то в этом роде).

Работаю в Q90 - настройки системной библиотекиНажмите для просмотра прикрепленного файла И все же почему именно flash-programmer если Q II programmer тоже позволяет программировать EPCS?
vadimuzzz
Цитата(Acvarif @ Jan 29 2013, 19:13) *
И все же почему именно flash-programmer если Q II programmer тоже позволяет программировать EPCS?

меньше телодвижений. один раз скрипт настроил и все.
Acvarif
Цитата(vadimuzzz @ Jan 29 2013, 17:26) *
меньше телодвижений. один раз скрипт настроил и все.

Хорошо, попробую еще и так.
Попробую Ваш скрипт. Какое расширение нужно поставить файлу скрипта? Или просто последовательно набрать все в консоли Nios?
А через Q программер не получается, даже с он-чип мемори. Пробовал по всякому. Менял на 8 бит .hex - ничего не изменилось. Всеравно загружается только кофигурация FPGA. Не понятно как все же .hex программы (который записан в EPCS сразу после .sof ) попадает в память (он-чип или sdram) и там запускается.
Код
Page_0        0x00000000        0x000AF6E6
NeptunE.hex    0x000AF6E7        0x00105018

данные конфигурации (Nios + разная логика) (начинаются в EPCS с0x00000000) После включения питания они попадают куда надо.
А программа (в EPCS находится по адресу 0x000AF6E7) никуда не попадает или попадает не туда. Или попадает куда надо но не запускается...
Цитата
запустится программа, которая лежит по адресу сброса (контроллер EPCS), это бутлодер, который перепишет программу в SDRAM

По поводу бутлоадера - он в памяти контроллере EPCS от производителя или его нужно отдельно туда загрузить?
Да, понял. Бутлоадер в памяти контроллера уже имеется. Вроде с контроллером EPCS самый простой путь. Попробую еще через flash programmer...
Serhiy_UA
Сделайте маленький тест для памяти NiosII внутри FPGA, с программным миганием одного светодиода и все.
Испробуйте. Если нее пойдет, то выложите проект для обозрения.
Могу выслать свой аналогичный тест, все работает, объем в упаковке *.zip около 12м. Там один светодиод мигает от QII, а другой от NiosII. Связка аналогичная Вашей - Cyclone III EP3C40Q240C8 и EPCS16SI8N. Отличие, что Вы используете VHDL, а у меня verilog, но это не принципиально. Применяю QII 7.2, а Вы QII 9.0, все получается и без скриптов, прямо из GUI, но здесь уже надо выбирать...
Не сложно там...
Дайте свой адрес для высылки, можно на мой личный ящик.


Acvarif
Цитата(Serhiy_UA @ Jan 30 2013, 10:36) *
Сделайте маленький тест для памяти NiosII внутри FPGA, с программным миганием одного светодиода и все.
Испробуйте. Если нее пойдет, то выложите проект для обозрения.
Могу выслать свой аналогичный тест, все работает, объем в упаковке *.zip около 12м. Там один светодиод мигает от QII, а другой от NiosII. Связка аналогичная Вашей - Cyclone III EP3C40Q240C8 и EPCS16SI8N. Отличие, что Вы используете VHDL, а у меня verilog, но это не принципиально. Применяю QII 7.2, а Вы QII 9.0, все получается и без скриптов, прямо из GUI, но здесь уже надо выбирать...
Не сложно там...
Дайте свой адрес для высылки, можно на мой личный ящик.

Спасибо. Ящик vladb727 собака gmail точка com
Вроде получилось. Пока до конца еще не осмыслил как, но заработало (пока только в он-чип). Теперь нужно на sdram попробовать. Шил через flash программер.
Думаю проблема была в сбросе (до конца пока не выяснил). Тоесть все грузилось но не запускалось без дополнительного принудительного сброса всей системы.
С flasf программатором не понял как устанавливать в нем offset? Я установил после того как вручную выполнил преобразование .elf в .flash и посмотрел смещение в .map файле.
Нажмите для просмотра прикрепленного файла
А как это сделать проще?
vadimuzzz
не надо там никакие офсеты вручную выставлять, для этого есть опция -after. посмотрите скрипт, что я приводил выше
Acvarif
Цитата(vadimuzzz @ Jan 30 2013, 11:44) *
не надо там никакие офсеты вручную выставлять, для этого есть опция -after. посмотрите скрипт, что я приводил выше

Скриптом я попробую. Все должно сработать.
На панели flash программера которая вызывается из Nios Eclipse есть только окно для установки смещения.
Попробовал в sdram. Все заработало, но только после принудительного сброса системы после включения питания. Со сбросом надо будет чего -нибудь придумывать...
gosu-art
Цитата(Acvarif @ Jan 30 2013, 11:07) *
Все заработало, но только после принудительного сброса системы после включения питания. Со сбросом надо будет чего -нибудь

Так может у меня поэтому не работало!? blink.gif Я просто делал вкл\выкл питания и все. Нужно тоже будет попробовать...
Acvarif
Цитата(gosu-art @ Jan 30 2013, 12:30) *
Так может у меня поэтому не работало!? blink.gif Я просто делал вкл\выкл питания и все. Нужно тоже будет попробовать...

На данный момент заработало все по включению питания. Условия:
1. Программирование через flash programmer. Если делать так http://naliwator.narod.ru/les/les_nios_epcs_03.html не работает никак.
2. Странно, но только компиляция программы без оптимизации кода "Debug" работает стабильно (Release сразу не запускается и работает не стабильно).
vadimuzzz
Цитата(Acvarif @ Jan 30 2013, 23:30) *
2. Странно, но только компиляция программы без оптимизации кода "Debug" работает стабильно (Release сразу не запускается и работает не стабильно).

похоже на кривые тайминги sdram
Acvarif
Цитата(vadimuzzz @ Jan 31 2013, 03:41) *
похоже на кривые тайминги sdram

Тайминги вообще еще не настраивал. Красным подсвечивает несколько позиций. Но в отладчике все работает нормально. Для sdram выставил только фазовый сдвиг -60 град. Прокрутил тест (100 мГц). Все в норме.
Похоже что-то другое.
FLTI
Цитата(Acvarif @ Jan 30 2013, 12:07) *
Все заработало, но только после принудительного сброса системы после включения питания. Со сбросом надо будет чего -нибудь придумывать...

Цитата(gosu-art @ Jan 30 2013, 13:30) *
Так может у меня поэтому не работало!? blink.gif Я просто делал вкл\выкл питания и все. Нужно тоже будет попробовать...

Цитата(Acvarif @ Jan 30 2013, 20:30) *
На данный момент заработало все по включению питания. Условия:
1. Программирование через flash programmer.

Расскажите, что сделали, что заработало по включению питания?
И почему до этого работало только после принудительного сброса системы после включения питания?
Цитата(Acvarif @ Jan 30 2013, 20:30) *
Если делать так http://naliwator.narod.ru/les/les_nios_epcs_03.html не работает никак.

Почему? Там ошибка или иная причина?
FLTI
Сейчас вплотную занялся именно этой темой.
Возможно, что кто-то из участников этой темы ответит на мой предыдущий пост.
Это было бы поучительно для многих.
_Anatoliy
Цитата(FLTI @ Oct 30 2013, 19:06) *
Почему? Там ошибка или иная причина?

Тоже интересует,хотя пользуюсь флеш_программером,но любопытно. Вы не докопались?Вообще реально кто нибудь конвертировал .sof+.elf в .jic?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.