Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проект не стартует
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
ilkz
Добрый день!

Имею кит CIII_DEV_KIT. В проекте есть NIOS с флэшкой.

Такая проблема: надо собрать .sof и .elf в один файл и залить, чтобы запускалось.

Делаю так:
Код
sof2flash --epcs --input=project.sof --output=hw.flash --verbose

elf2flash --input=project_nios.elf --output=sw.flash --boot="$ALTERA/nios2eds/components/altera_nios2/boot_loader_cfi.srec" \
          --base=0xc000000 --end=0x10000000 --reset=0xe000000 --verbose

nios2-elf-objcopy -I srec -O binary hw.flash hw.bin
nios2-elf-objcopy -I srec -O binary sw.flash sw.bin

cat hw.bin sw.bin > firmware.bin
nios2-elf-objcopy -I binary -O ihex firmware.bin firmware.hex

quartus_cpf -c make_pof.cof
quartus_pgm pgm_pof.cdf


В make_pof.cof, соответственно, прописано:
Нажмите для просмотра прикрепленного файла

В pgm_pof.cdf прописано:
Нажмите для просмотра прикрепленного файла

Программатор долго сначала стирает, затем прошивает, но проект в итоге не стартует (горит светодиод ERROR).

Что я делаю не так?
Спасибо!


P.S.: Если делать по отдельности - сначала заливать только .POF с образом ПЛИС, потом .SOF с ней же, потом на нее накатывать .FLASH с ниосом, то все работает прекрасно. Но хочется уйти от такой кучи файлов.
Alexey_Rostov
Цитата(ilkz @ Feb 20 2015, 10:46) *
Что я делаю не так?
Спасибо!
P.S.: Если делать по отдельности - сначала заливать только .POF с образом ПЛИС, потом .SOF с ней же, потом на нее накатывать .FLASH с ниосом, то все работает прекрасно. Но хочется уйти от такой кучи файлов.


Попробуйте flash programmer в Eclipse. Там вручную конвертировать и объединять sof и elf не нужно.
ilkz
Цитата(farbius @ Feb 20 2015, 11:13) *
Попробуйте flash programmer в Eclipse. Там вручную конвертировать и объединять sof и elf не нужно.


Так для того, чтобы им воспользоваться, надо все равно сначала .sof залить (иначе он не видит что в чип залито), плюс потом .POF, чтобы сам образ ПЛИС во флэшке оказался. А мне надо уйти от этих, по сути, лишних для производственника действий. Хочу просто один файл (содержащий и ПЛИС и ОС), который заливается через какой-то программатор (пускай пока через quartus_pgm), после чего устройство готово к использованию.
Alexey_Rostov
Цитата(ilkz @ Feb 20 2015, 11:28) *
Так для того, чтобы им воспользоваться, надо все равно сначала .sof залить (иначе он не видит что в чип залито), плюс потом .POF, чтобы сам образ ПЛИС во флэшке оказался. А мне надо уйти от этих, по сути, лишних для производственника действий. Хочу просто один файл (содержащий и ПЛИС и ОС), который заливается через какой-то программатор (пускай пока через quartus_pgm), после чего устройство готово к использованию.


Буквально недавно шил в память один старый проект, собранный в Q7.1. Для заливки во флеш использовал Q 11.1. Делал следующее:
Залил через программер sof
Открыл flash programmer там указал sopcinfo и добавил файлы на заливку: sof + elf
нажал programm flash.
отключил/включил питание. Все заработало
doom13
Есть такой вариант:
1) Компилите проект в Eclipse
2) Выполняете Make Targets -> Build -> mem_init_generate -> OK
3) В Quartus добавляете файл software/project_name/mem_init/meminit.qip в проект
4) Компилите проект в Quartus
5) Полученный SOF уже содержит проинициализированную память для Nios II.
6) Конвертируете SOF в нужный формат и заливаете в конфигурационное устройство.
Stewart Little
Цитата(ilkz @ Feb 20 2015, 10:46) *
sof2flash --epcs --input=project.sof --output=hw.flash --verbose

Я таки не понял - у Вас флэшка параллельная (CFI) или последовательная (EPCS)???
И еще - какой установлен режим конфигурирования (что на MSEL'ах)?
ilkz
Параллельная, CFI. Режим - 1bit-PS.

Ой, а ключика --epcs я и не заметил...
ilkz
Цитата(farbius @ Feb 20 2015, 11:44) *
Буквально недавно шил в память один старый проект, собранный в Q7.1. Для заливки во флеш использовал Q 11.1. Делал следующее:
Залил через программер sof
Открыл flash programmer там указал sopcinfo и добавил файлы на заливку: sof + elf
нажал programm flash.
отключил/включил питание. Все заработало


Делаю в точности как Вы описали - не стартует, горит светодиод ERROR.

Выхлоп флэш-программера:
CODE
Info: Info: *******************************************************************
Info: Info: Running Quartus II 32-bit Convert_programming_file
Info: Info: Command: quartus_cpf --no_banner --convert D:/projects/pack/firmware.sof D:/projects/pack/firmware_ext_flash.rbf
Info: Info: Quartus II 32-bit Convert_programming_file was successful. 0 errors, 0 warnings
Info: Info: Peak virtual memory: 189 megabytes
Info: Info: Processing ended: Fri Feb 20 14:32:58 2015
Info: Info: Elapsed time: 00:00:01
Info: Info: Total CPU time (on all processors): 00:00:01
Info: Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Info: Resetting and pausing target processor: OK
Info: Reading System ID at address 0x08000040:
Info: ID value verified
Info: Timestamp value was not verified: value was not specified
Info:
Info: : Checksumming existing contents
Info:
Info: Checksums took 1.2s
Info: Erase not required
Info:
Info: 00000000 ( 0%): Programming
Info:
Info: 00020000 ( 3%): Programming
Info:
Info: 00040000 ( 7%): Programming
Info:
Info: 00060000 (11%): Programming
Info:
Info: 00080000 (14%): Programming
Info:
Info: 000A0000 (18%): Programming
Info:
Info: 000C0000 (22%): Programming
Info:
Info: 000E0000 (25%): Programming
Info:
Info: 00100000 (29%): Programming
Info:
Info: 00120000 (33%): Programming
Info:
Info: 00140000 (36%): Programming
Info:
Info: 00160000 (40%): Programming
Info:
Info: 00180000 (44%): Programming
Info:
Info: 001A0000 (47%): Programming
Info:
Info: 001C0000 (51%): Programming
Info:
Info: 001E0000 (55%): Programming
Info:
Info: 00200000 (58%): Programming
Info:
Info: 00220000 (62%): Programming
Info:
Info: 00240000 (66%): Programming
Info:
Info: 00260000 (69%): Programming
Info:
Info: 00280000 (73%): Programming
Info:
Info: 002A0000 (77%): Programming
Info:
Info: 002C0000 (80%): Programming
Info:
Info: 002E0000 (84%): Programming
Info:
Info: 00300000 (88%): Programming
Info:
Info: 00320000 (91%): Programming
Info:
Info: 00340000 (95%): Programming
Info:
Info: 00360000 (99%): Programming
Info:
Info: Programmed 3488KB in 52.8s (66.0KB/s)
Info: Device contents checksummed OK
Info: Leaving target processor paused
Info: Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Info: Resetting and pausing target processor: OK
Info: Reading System ID at address 0x08000040:
Info: ID value verified
Info: Timestamp value was not verified: value was not specified
Info:
Info: : Checksumming existing contents
Info:
Info: Checksums took 0.1s
Info: Erase not required
Info:
Info: 02000000 ( 0%): Programming
Info:
Info: 02020000 (37%): Programming
Info:
Info: 02040000 (75%): Programming
Info:
Info: Programmed 338KB in 5.5s (61.4KB/s)
Info: Device contents checksummed OK
Info: Leaving target processor paused
ilkz
Получается возможность сделать единый файл прошивки из .sof+.elf, и залить его сразу, отсутствует?
Swup
В проекте, где ниос работает на onchip memory использую вариант doom13. При производстве прошивается только .pof.
ilkz
Цитата(Swup @ Feb 25 2015, 13:08) *
В проекте, где ниос работает на onchip memory использую вариант doom13. При производстве прошивается только .pof.

В моем случае ниос работает в ddr2-памяти.
ilkz
Цитата(doom13 @ Feb 20 2015, 12:59) *
Есть такой вариант:
1) Компилите проект в Eclipse
2) Выполняете Make Targets -> Build -> mem_init_generate -> OK
3) В Quartus добавляете файл software/project_name/mem_init/meminit.qip в проект
4) Компилите проект в Quartus
5) Полученный SOF уже содержит проинициализированную память для Nios II.
6) Конвертируете SOF в нужный формат и заливаете в конфигурационное устройство.


Спасибо, Ваш метод хорош, но он приводит к ненужной пересборке ПЛИС в случае если изменился только код NIOS (а он меняется на порядок чаще).
Вопрос по-прежнему открыт...
des00
Цитата(ilkz @ Feb 27 2015, 15:07) *
он приводит к ненужной пересборке ПЛИС в случае если изменился только код NIOS (а он меняется на порядок чаще).

smart compilation не помогает ?
doom13
Цитата(ilkz @ Feb 27 2015, 11:07) *
Спасибо, Ваш метод хорош, но он приводит к ненужной пересборке ПЛИС в случае если изменился только код NIOS (а он меняется на порядок чаще).
Вопрос по-прежнему открыт...

Если меняется только код Nios и используется Smart Compilation, то анализ/синтез и фиттер не выполняются, много времени не занимает, почему нет.
_Anatoliy
Цитата(doom13 @ Mar 2 2015, 22:49) *
Если меняется только код Nios и используется Smart Compilation, то анализ/синтез и фиттер не выполняются, много времени не занимает, почему нет.

Большое спасибо! Давно искал нечто подобное.
_Anatoliy
А не выходит каменный цветок. Выполнил все пункты внимательно согласно Тыц. Не стартует ниос. Вектор сброса ниос не нужно изменять?
_Anatoliy
Вот результат трансляции без файла meminit.qip

Код
BLOCK        START ADDRESS        END ADDRESS

Page_0        0x00000000        0x0004845F


а вот с ним
Код
BLOCK        START ADDRESS        END ADDRESS

Page_0        0x00000000        0x0004849B


Программа ниос занимает примерно 16Кб, так что она к sof не пристегнулась.
doom13
У меня всё нормально работает и Ниос при данном способе получения прошивки стартует (5CEFA9, Q14.0). Есть ли в системе EPCS Flash Controller? Если да то где-то видел, что на Q13.0 могут быть проблемы с запуском Ниоса.

Цитата(_Anatoliy @ Mar 5 2015, 11:32) *
Программа ниос занимает примерно 16Кб, так что она к sof не пристегнулась.

Это - неправильный метод оценки. Если компрессия не используется, то значение END ADDRESS будет соответствовать размеру прошивки (максимальному без компрессии для используемого девайса) и не будет зависеть от того, подключён meminit.qip или нет. Т.е. подключение meminit.qip влияет на внутреннее содержимое выходного файла, а не на его размер. Если компрессия используется, то и размер прошивки будет изменяться при изменении программы Ниос, но не на величину программы.
_Anatoliy
Цитата(doom13 @ Mar 5 2015, 12:32) *
У меня всё нормально работает и Ниос при данном способе получения прошивки стартует (5CEFA9, Q14.0). Есть ли в системе EPCS Flash Controller? Если да то где-то видел, что на Q13.0 могут быть проблемы с запуском Ниоса.

Да,контроллер есть. И проект рабочий,среда Q12.1. Если проект загружать nios2-flash-programmerом то проблем нет.
Я конвертирую *.sof в файл *.jic.
Тогда странно что не работает. А meminit.qip посто добавить в проект и всё?
doom13
Цитата(_Anatoliy @ Mar 5 2015, 14:33) *
Я конвертирую *.sof в файл *.jic.

Всё аналогично, работает.
Цитата(_Anatoliy @ Mar 5 2015, 14:33) *
Тогда странно что не работает. А meminit.qip посто добавить в проект и всё?

Да, должно работать. После того как проект железа скомпилен, если меняем программу для Ниос и говорим пересобрать проект в Quartus, то выполнится только ассемблер (smart compilation должен стоять). По этому можно определить понял ли Quartus, что произошли изменения в программе Ниоса. Иногда происходили глюки, не хотел пересобирать прошивку, типа ничего не изменилось, хотя были изменения в программе Ниоса.
_Anatoliy
Наконец опять появилась возможность продолжить эксперименты. А ресет вектор для такого режима каким должен быть? Когда программировал nios2-flash-programmer-ом то у меня был вектор на epcs.controller. Пробовал сделать вектор на onchip ram_sys (память программ) всё равно ниос не стартует. Что ещё можно глянуть?
p.s. В отчётах компиляции не нашёл упоминания о файле nios2s_ram_sys.hex , сформированном с помощью mem_init_generate. Так и должно быть?
doom13
Цитата(_Anatoliy @ Apr 6 2015, 09:43) *
А ресет вектор для такого режима каким должен быть? Когда программировал nios2-flash-programmer-ом то у меня был вектор на epcs.controller.

В моём случае всё в on-chip memory.
Stewart Little
Цитата(_Anatoliy @ Apr 6 2015, 09:43) *
Пробовал сделать вектор на onchip ram_sys (память программ) всё равно ниос не стартует. Что ещё можно глянуть?

Еще нужно глянуть настройки bsp (allow code at reset и т.п.).
_Anatoliy
Цитата(Stewart Little @ Apr 6 2015, 23:41) *
Еще нужно глянуть настройки bsp (allow code at reset и т.п.).


Бит allow code at reset был сброшен, но после установки ничего не изменилось. Что ещё важно для этого режима?Видно что программа в памяти есть,проблема со стартом. Может скриншотов настроек bsp набросать?
_Anatoliy
Всем спасибо,ребята! Пошёл старт ниоса. Кстати, вместо запуска компиляции в квартусе можно просто выполнить Update MIF а затем start assebler.
_Anatoliy
Опять появилась возможность продолжить эксперименты.
Выяснилось что при изменении в qsys reset vector memory c epcs_flash_controller на ram_sys ,где ram_sys является блочной областью памяти, ниос начинает стартовать и работает, но почему-то отрубается доступ к epcs из моего софта. Программа зависает при обращении к epcs. Что посоветуете,коллеги?
Kuzmi4
2 _Anatoliy
а в приведённой вами конфигурации, если черег Debug делать - где вываливаетесь ?
_Anatoliy
Цитата(Kuzmi4 @ Apr 23 2015, 16:19) *
2 _Anatoliy
а в приведённой вами конфигурации, если черег Debug делать - где вываливаетесь ?

При ресет-векторе на ram_sys?Пошагово дохожу до чтения епцс, при входе в п/п чтения программа зависает.Остановить и глянуть чего ждёт нет возможности(я вам писал когда-то об этом).Если же ресет-вектор поставить на epcs_flash_controller то тогда чтение/запись епцс проходят нормально.
Kuzmi4
2 _Anatoliy
я бы асм глянул именно этого места...
Stewart Little
Цитата(_Anatoliy @ Apr 23 2015, 16:58) *
при входе в п/п чтения программа зависает.

Вы через HAL к EPCS обращаетесь, или на низком уровне?
_Anatoliy
Цитата(Stewart Little @ Apr 23 2015, 18:06) *
Вы через HAL к EPCS обращаетесь, или на низком уровне?

На низком,пользуюсь epcs_write_buffer(),epcs_read_buffer() из epcs_commands.c
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.