Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Не программируется EPCS16
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Acvarif
Еще вчера все прошивалось с помощью flash_programmer от Nios (Q90).
Но внезапно перестало шиться с сообщением
Код
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00002800 --cable='U
SB-Blaster [USB-0]' --instance=0 "epcs_flash_controller_0.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: FAILED
Leaving target processor paused

По ходу работы скрипта программатора в консоли обратил внимание, что он вместо EPCS16 работает с EPCS128
Код
# Creating .flash file for the FPGA configuration
"$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="D:/MyDesignsXp/AsicPrj/AlteraPrj
/QuartusPrj/NiosEthOcmEnisey_Quartus90/NiosEthOcmEnisey.sof" --output="NiosEthOc
mEnisey.flash"
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert --device=EPCS128 --option=NiosE
thOcmEnisey.opt D:/MyDesignsXp/AsicPrj/AlteraPrj/QuartusPrj/NiosEthOcmEnisey_Qua
rtus90/NiosEthOcmEnisey.sof NiosEthOcmEnisey.pof
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
    Info: Peak virtual memory: 71 megabytes
    Info: Processing ended: Wed Sep 03 16:04:16 2014

Наверняка в этом случае шиться EPCS16 не будет.
Подскажите пожалуйста в чем тут хитрость? Как заставить flash_programmer работать с EPCS16?
Установки для прошивки тут Нажмите для просмотра прикрепленного файла
Stewart Little
Ну, тут либо конфигурация слетела (проверяется в Target Conection), либо ява забастовала.
Для проверки перегоните sof и elf в формат flash, потом, с помощью objcopy оба этих файла в hex, затем в квартусе из обоих hex-ов сделайте jic, и попробуйте им прогрузить EPCS'ку.
Если получится, то железо не причем.

Вдогонку - а перед использованием FlashProgrammer'а Вы, часом, не забываете прошивку с ниосом в ПЛИС загрузить?
doom13
Цитата(Stewart Little @ Sep 3 2014, 17:01) *
Для проверки перегоните sof и elf в формат flash, потом, с помощью objcopy оба этих файла в hex, затем в квартусе из обоих hex-ов сделайте jic, и попробуйте им прогрузить EPCS'ку.

Какой смысл в стольких манипуляциях, почему бы просто не сконвертить sof (вначале естественно скомпилить его с актуальным файлом инициализации памяти Nios 2) в jic? Или так быстрее если железо осталось старым, а менялся только софт для Ниос?
Acvarif
Цитата(Stewart Little @ Sep 3 2014, 17:11) *
Вдогонку - а перед использованием FlashProgrammer'а Вы, часом, не забываете прошивку с ниосом в ПЛИС загрузить?

Да, через программатор Q9 все грузится. Конечно перед этим выполняю все необходимые преобразования типа: test.sof и test.elf преобразовываю в testsof.flash и testelf.flash. Команды sof2flash.jar --input=test.sof --output=testsof.flash --epcs --verbose и elf2flash.jar --input=test.elf --output=testelf.flash --epcs --after=testsof.flash --verbose
Затем преобразовываю в .hex Команда: nios2-elf-objcopy.exe -I srec -O ihex testelf.flash testelf.hex
Далее формирую .jic Нажмите для просмотра прикрепленного файла
Адресация при этом формируется такая: Нажмите для просмотра прикрепленного файла
Не уверен правильно-ли я выбираю адресацию .hex (относительную или абсолютную).
Поскольку .hex сформирован из .elf то вроде как адресация должна быть относительной. Но опять-же с какого адреса?
Вобщем если делаю как на картинке то приборчик запускается только наполовину. Тоесть загружается только HARD (.sof) Программа то-ли не загружается во flash то-ли не переходит по вектору запуска.
Все начинает работать только после принудительной загрузки .elf из NIOS. Такое я наблюдал и раньше но так пока и не выяснил причину такой ошибки.

А с flash_programmer так и не понятно. Один раз все загрузил как надо. Кстати он какраз все грузит как надо - все запускается и .sof и .elf.
Второй раз и т. д. перестал шить.
А по поводу прошивки с NIOS я не знал. Можно в двух словал правильную процедуру работы с flash_programer.
doom13
Цитата(Acvarif @ Sep 3 2014, 18:29) *
А по поводу прошивки с NIOS я не знал. Можно в двух словал правильную процедуру работы с flash_programer.

Сначала с помощью SOPC Builder (для новых версий Qsys) строите необходимую систему (для работы Nios II Flash Programmer она должна включать ядро EPCS Flash Controller), генерируете её, добавляете в проект в Квартусе, компилируете проект, заливаете прошивку в FPGA. Далее, если в системе присутствует EPCS Flash Controller, можете при помощи Nios II Flash Programmer обновлять содержимое EPCS.
Acvarif
Цитата(doom13 @ Sep 3 2014, 20:19) *
Сначала с помощью SOPC Builder (для новых версий Qsys) строите необходимую систему (для работы Nios II Flash Programmer она должна включать ядро EPCS Flash Controller), генерируете её, добавляете в проект в Квартусе, компилируете проект, заливаете прошивку в FPGA. Далее, если в системе присутствует EPCS Flash Controller, можете при помощи Nios II Flash Programmer обновлять содержимое EPCS.

Да, это так и делается. Я про нюансы.
1. Нужно-ли стирать EPCS16 перед прошивкой?
2. Нужно-ли перед прошивкой загружать .sof (NIOS + ...) в ПЛИС (питание включено)?
doom13
Цитата(Acvarif @ Sep 3 2014, 18:29) *

Можете попробовать другой способ:
1) В меню Target добавляете для для Q9.0 target - memory_init_install.
2) В настройках проекта в Eclipse надо прописать переменную quartus_project_dir с путём, где лежит проект.
3) Скомпилить проект Nios в Eclipse.
4) Далее в меню Target выбираете ранее созданный memory_init_install и жмёте build, в консоли увидите что-то типа результата копирования файла инициализации памяти Ниоса в директорию с проектом Квартуса.
5) Компилируете проект (heх файл инициализации памяти процессора автоматом подхватится и будет уже содержаться в выходном sof).
6) Перегоняете sof в jic с указанием соответствующей конфигурации.
7) jic заливаете в EPCS при помощи SFL.

Цитата(Acvarif @ Sep 3 2014, 20:27) *
Да, это так и делается. Я про нюансы.
1. Нужно-ли стирать EPCS16 перед прошивкой?
2. Нужно-ли перед прошивкой загружать .sof (NIOS + ...) в ПЛИС (питание включено)?

Стирать не нужно (могу ошибаться), оно само должно всё стереть, а потом залить новую прошивку.
При использовании Nios II Flash Programmer необходимо чтобы в FPGA был залит проект с ядром из SOPC (Qsys) EPCS Flash Controller, т.е. если ваша FPGA стартанула с загрузочной флэшки и в системе уже есть EPCS Flash Controller, то можно сразу обновлять прошиву в EPCS. Если плис пустая, то надо сначала залить прошивку железа sof (наличие EPCS Flash Controller-а обязательно), а потом уже обновлять содержимое EPCS.
Acvarif
Цитата
Стирать не нужно (могу ошибаться), оно само должно всё стереть, а потом залить новую прошивку.
При использовании Nios II Flash Programmer необходимо чтобы в FPGA был залит проект с ядром из SOPC (Qsys) EPCS Flash Controller, т.е. если ваша FPGA стартанула с загрузочной флэшки и в системе уже есть EPCS Flash Controller, то можно сразу обновлять прошиву в EPCS. Если плис пустая, то надо сначала залить прошивку железа sof (наличие EPCS Flash Controller-а обязательно), а потом уже обновлять содержимое EPCS

Понятно. Хотя вроде после включения питания в ПЛИС уже должен был быть загружен .sof но попробую его загрузить еще и Квартус программером.
Спасибо. Вариант с инициализацией опробую.
doom13
Цитата(Acvarif @ Sep 3 2014, 20:58) *
Вариант с инициализацией опробую.

Можете погуглить по поводу memory_init_install, а то где-то мог ошибиться (давно пользовался, счас Q13, а там совсем всё автоматом делается).
Stewart Little
Цитата(Acvarif @ Sep 3 2014, 21:27) *
Да, это так и делается. Я про нюансы.
1. Нужно-ли стирать EPCS16 перед прошивкой?
2. Нужно-ли перед прошивкой загружать .sof (NIOS + ...) в ПЛИС (питание включено)?

1. Не нужно - стирание будет инициировано программером автоматически.
2. При использовании FlashProgrammer'а - ОБЯЗАТЕЛЬНО!!! Иначе как же FlashProgrammer до EPCS'ки достучится??? Только через ниосовскую систему!


Цитата(doom13 @ Sep 3 2014, 21:42) *
Можете попробовать другой способ:

Этот способ годится только в том случае, если сегмент кода расположен а On-Chip RAM.
А если во внешней памяти (SRAM, SDRAM - без разницы)? Туда надо как-то исполняемый код поместить. Вот копировщик, живущий в epcs_flash_controller'е этим и занимается.

Цитата(Acvarif @ Sep 3 2014, 19:29) *
Можно в двух словал правильную процедуру работы с flash_programer.

Здесь все подробнейшим образом изложено: Nios II Flash Programmer User Guide
doom13
Цитата(Stewart Little @ Sep 3 2014, 23:01) *
Этот способ годится только в том случае, если сегмент кода расположен а On-Chip RAM.
А если во внешней памяти (SRAM, SDRAM - без разницы)? Туда надо как-то исполняемый код поместить. Вот копировщик, живущий в epcs_flash_controller'е этим и занимается.

Не думал об этом, как-то всё из On-Chipa всегда работало, выполнение из внешней памяти использовал только при загрузке прошивки для Ниос-а через JTAG.
Acvarif
Мытарства продолжаются.

Попытался загрузить похожий (старый) проект - все грузится без проблем.
Код
# Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00002000 --cable='U
SB-Blaster [USB-1]' --instance=0 "NiosEthOcmNeptun.flash"
Using cable "USB-Blaster [USB-1]", device 1, instance 0x00
Resetting and pausing target processor: OK

Попытка загрузить новый:
Код
Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00002000 --cable='U
SB-Blaster [USB-1]' --instance=0 "NiosEthOcmEnisey.flash"
Using cable "USB-Blaster [USB-1]", device 1, instance 0x00
Resetting and pausing target processor: FAILED

Чудеса какие-то. Получается что проц не сбрасывается.
Хотя .sopc в обеих проектах очень похожи - даже процы полностью одинаковые.
В какую сторону еще можно копать?
doom13
Сама прошивка (sof) залитая в FPGA до использования Nios II Flash Programmer в обоих случаях одинакова?
Acvarif
Цитата(doom13 @ Sep 4 2014, 13:46) *
Сама прошивка (sof) залитая в FPGA до использования Nios II Flash Programmer в обоих случаях одинакова?

Нет. .sof разные. Но очень похожие. Там и там проц одинаковый. Даже адреса прерываний одинаковые. Вся набивка одинаковая. Разные только присоединенные внешние модули которые работают через SGDMA. Вобщем к сбросу и не имеют никакого отношения. Естественно .elf тоже разные.
Stewart Little
Цитата(Acvarif @ Sep 4 2014, 13:40) *
В какую сторону еще можно копать?

Скорее всего "задача на внимание" sm.gif
Bsp аппаратной части соответствует?
Сравните настройки Target Connection в том и в другом случае.

Вы пробовали загрузить jic, полученный из sof'а и elf'а?
С адресацией hex'ов при создании результирующего jic'а разобрались?
Acvarif
Цитата(Stewart Little @ Sep 4 2014, 15:27) *
Вы пробовали загрузить jic, полученный из sof'а и elf'а?
С адресацией hex'ов при создании результирующего jic'а разобрались?

Да. Такое пробовал. Прошивается нормально. Но не работает. По включению питания работает только то, что соответствует .sof То что .elf не работает. Проверяю путем принудительной загрузки .elf - все начинает работать.
По поводу адресации - выше картинка. В адресации .hex который делается из .elf не уверен...
Stewart Little
Цитата(Acvarif @ Sep 4 2014, 16:47) *
По поводу адресации - выше картинка. В адресации .hex который делается из .elf не уверен...

jic нужно делать не из sof'a и hex'a, а из двух hex'ов (первый hex надо сделать из sof'а а второй - из elf'а).

Цитата(Acvarif @ Sep 4 2014, 16:47) *
Да. Такое пробовал. Прошивается нормально. Но не работает. По включению питания работает только то, что соответствует .sof То что .elf не работает. Проверяю путем принудительной загрузки .elf - все начинает работать.

Это значит, что что-то не правильно.
Куда указывает вектор сброса?
Что в настройках bsp?
Acvarif
Цитата(Stewart Little @ Sep 4 2014, 23:09) *
jic нужно делать не из sof'a и hex'a, а из двух hex'ов (первый hex надо сделать из sof'а а второй - из elf'а).


Это значит, что что-то не правильно.
Куда указывает вектор сброса?
Что в настройках bsp?

Пробовал делать по разному.
1. из sof'a и hex'a
2. из двух hex'ов - тпа так:
Цитата
The method used to create a .jic file with a Nios® II hardware and software image is as follows.

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

Note: When creating the software flash image, there is no need to add a boot srec (this is located in the EPCS Controller), the --after option ensures the software image starts immediately after the hardware image.

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.When creating your jic file using Quartus® II Convert Programming File tool, add the Flash Loader and both hex files with absolute addressing option selected.

Note: You do not need to add the .sof file to the jic image. This is because you created a hardware hex image. Using the hardware hex image ensures the software hex image is at the proper offset in the EPCS.

Причем второй способ проходит только в Quartus 11.0, в Quartus90 в преобразователе деактивируется кнопка добавления .hex после того как добавлен один .hex (второй .hex добавить невозможно)
1. По первому способу работает только ПЛИС (.sof) программа Nios не запускается.
2. По второму способу вообще ничего не работает.

Вектор сброса в процессоре поставлен на epcs_flash_controller_0 Нажмите для просмотра прикрепленного файла Установки библиотеки на картинке Нажмите для просмотра прикрепленного файла
Acvarif
Сделал 2 hex из .sof и .elf
Получается интересная картина - смещение на один байт .sof заканчивается по адресу 8A6E , а .elf начинается с адреса 8A6E, хотя, как продолжение должен начинаться с адреса 8A6F
Нажмите для просмотра прикрепленного файла
Что не так?
Преобразовывал из .flash в hex файлом nios2-elf-objcopy.exe от Q11 От Q9 такой файл почему-то вообще не работает.
Хотя flash_programmer Q9 работает нормально. Проблема только в отсутствии сброса проца в начале программирования:
Код
#!/bin/sh
#
# This file was automatically generated by the Nios II IDE Flash Programmer.
#
# It will be overwritten when the flash programmer options change.
#

cd D:/MyDesignsXp/AsicPrj/AlteraPrj/QuartusPrj/NiosEthOcmEnisey_Quartus90/NiosEt
hOcmEnisey/Release

# Creating .flash file for the FPGA configuration
"$SOPC_KIT_NIOS2/bin/sof2flash" --epcs --input="D:/MyDesignsXp/AsicPrj/AlteraPrj
/QuartusPrj/NiosEthOcmEnisey_Quartus90/NiosEthOcmEniseyTop.sof" --output="NiosEt
hOcmEniseyTop.flash"
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert --device=EPCS128 --option=NiosE
thOcmEniseyTop.opt D:/MyDesignsXp/AsicPrj/AlteraPrj/QuartusPrj/NiosEthOcmEnisey_
Quartus90/NiosEthOcmEniseyTop.sof NiosEthOcmEniseyTop.pof
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
    Info: Peak virtual memory: 71 megabytes
    Info: Processing ended: Tue Sep 09 08:42:01 2014
    Info: Elapsed time: 00:00:02
    Info: Total CPU time (on all processors): 00:00:01
Info: *******************************************************************
Info: Running Quartus II Convert_programming_file
Info: Command: quartus_cpf --no_banner --convert NiosEthOcmEniseyTop.pof NiosEth
OcmEniseyTop.rpd
Info: Quartus II Convert_programming_file was successful. 0 errors, 0 warnings
    Info: Peak virtual memory: 67 megabytes
    Info: Processing ended: Tue Sep 09 08:42:03 2014
    Info: Elapsed time: 00:00:02
    Info: Total CPU time (on all processors): 00:00:01

# Programming flash with the FPGA configuration
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00002000 --device=1
--instance=0 "NiosEthOcmEniseyTop.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: FAILED
Leaving target processor paused

# Creating .flash file for the project
"$SOPC_KIT_NIOS2/bin/elf2flash" --epcs --after="NiosEthOcmEniseyTop.flash" --inp
ut="NiosEthOcmEnisey.elf" --output="epcs_flash_controller_0.flash"

# Programming flash with the project
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00002000 --device=1
--instance=0 "epcs_flash_controller_0.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: FAILED
Leaving target processor paused

# Creating .flash file for the datafile
"$SOPC_KIT_NIOS2/bin/bin2flash" --base=0x00002000 --location=0x000AF6E7 --input=
"NiosEthOcmEnisey.elf" --output="NiosEthOcmEnisey.flash"

# Programming flash with the datafile
"$SOPC_KIT_NIOS2/bin/nios2-flash-programmer" --epcs --base=0x00002000 --device=1
--instance=0 "NiosEthOcmEnisey.flash"
Using cable "USB-Blaster [USB-0]", device 1, instance 0x00
Resetting and pausing target processor: FAILED
Leaving target processor paused
Acvarif
Проблема flash_programmer не решилась, вернее решилась наполовину.
1. При замене в системе Nios Altpll на Pll все стало нормально грузиться. В чем хитрость пока не понятно.
2. Все нормально программируется посредством программатора Q11 и запускается. Q9 неверно формирует составной образ .jic кроме того в Q9 нет возможности добавления более одного .hex файла (после добавления первого кнопка добавления hex деактивируется.)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.