реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Nios boot и преобразование файлов
djhall
сообщение Sep 6 2018, 10:20
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Задача такая - необходимо создать файл с прошивкой для Cyclone V, который процессор Nios сможет записать в память EPCQ32, тем самым обновив прошивку.


Как я это делал для EPCS16 и Cyclone 3 в SOPC Builder:
Код
sof2flash --epcs --input="firmware_data.sof" --output="firmware_data.flash"
elf2flash --epcs --after="firmware_data.flash" --input="software_data.elf" --output="software_data.flash"
cat firmware_data.flash software_data.flash > hw_sw_image.flash
nios2-elf-objcopy -I srec -O binary hw_sw_image.flash hw_sw_image.bin

Т.е. hw_sw_image.bin это бинарный файл где программа для Nios записана непосредственно после прошивки для ПЛИС.
Далее файл hw_sw_image.bin мог использовать NIOS для записи в EPCS16 начиная с offset = 0.
Кстати интересно как Nios находит это место, где начинается программа ведь Reset vector offset = 0?


Теперь используется EPCQ32, Cyclone V и Qsys.
В настройках Nios выставленно Reset vector offset = 0x00380000.
Подскажите как мне создать бинарный файл для EPCQ32 с прошивкой и программой для Nios?
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Sep 6 2018, 12:59
Сообщение #2


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(djhall @ Sep 6 2018, 13:20) *
Кстати интересно как Nios находит это место, где начинается программа ведь Reset vector offset = 0?
Здесь Reset vector указывает на epcs_flash_controller. После сброса начинает исполняться код копировщика, который живет в epcs_flash_controller'е. Этот копировщик вычитывает и из EPCS'ки код приложения и записывает его в сегмент .text в соответствии с установками BSP.

Цитата(djhall @ Sep 6 2018, 13:20) *
Теперь используется EPCQ32, Cyclone V и Qsys.
В настройках Nios выставленно Reset vector offset = 0x00380000.
На какое именно устройство указывает Ваш вектор сброса?

Цитата(djhall @ Sep 6 2018, 13:20) *
Подскажите как мне создать бинарный файл для EPCQ32 с прошивкой и программой для Nios?
Точно так же, как и раньше.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
djhall
сообщение Sep 7 2018, 09:36
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Цитата(Stewart Little @ Sep 6 2018, 16:59) *
На какое именно устройство указывает Ваш вектор сброса?

Я использую Altera Serial Flash Controller с параметрами EPCQ32 и QUAD
В Nios выставленны следующие параметры:
Reset vector memory - epcq_controller_0.avl_mem (Он имеет базовый адрес 0x05400000)
Reset vector offset - 0x00380000
Reset vector - 0x05780000

Цитата(Stewart Little @ Sep 6 2018, 16:59) *
Точно так же, как и раньше.

Так же не работает, хотя бы потому, что Reset vector offset не равен 0

Ещё раз как я делал раньше:
Код
sof2flash --epcs --input="firmware_data.sof" --output="firmware_data.flash"
elf2flash --epcs --after="firmware_data.flash" --input="software_data.elf" --output="software_data.flash"
cat firmware_data.flash software_data.flash > hw_sw_image.flash
nios2-elf-objcopy -I srec -O ihex hw_sw_image.flash hw_sw_image.hex
nios2-elf-objcopy -I srec -O binary hw_sw_image.flash hw_sw_image.bin

Далее из hw_sw_image.hex получал .jic файл, а hw_sw_image.bin можно было передавать в ПЛИС и Nios перепрошивал прошивку.
Так что я решил пока упростить задачу до получения файла hw_sw_image.hex, чтобы его преобразовать в .jic
Проделал следующее:
1. Если следовать Embedded Design Handbook -> Nios II Processor Application Copied from EPCQ Flash to RAM Using Boot Copier и делать .jic файл из .sof и .hex(который сгенерирован mem_init_generate), то всё работает.
2. Если сделать два файла .jic один из .sof другой из .hex(который сгенерирован mem_init_generate), то тоже всё работает.

Как сгенерировать единый файл hw_sw_image.flash из которого можно было бы сделать hw_sw_image.hex и далее .jic?
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Sep 7 2018, 12:28
Сообщение #4


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(djhall @ Sep 7 2018, 12:36) *
Так же не работает, хотя бы потому, что Reset vector offset не равен 0
Ну и что???
Давайте разбираться.

1. Какой именно контроллер EPCQ у вас в проекте используется?
Я использую "Serial Flash Controller II Intel FPGA IP".

2. Кто подставляет значение смещения Reset Vector Offset в настройках процессорного ядра - Вы сами или Platform Designer?
Здесь должно быть указано смещение, по которому в EPCQ'шке будет находится исполняемый код. Этот момент очень важен!!!
Рассчитать смещение можно, зная размер конфигурационного битстрима для используемого ПЛИС'а. У меня, например, использовался 10CL25YU256I7G, для него объем битстрима составляет 5,748,552 бит, т.е. конфигурация в EPCQ'шке будет занимать адреса от нуля до до 0x0AF6E9. Я укзываю смещение с запасом: 0x0B0000

3. Компилируем проект в NiosII SBT (Build Project) и затем создаем hex-файлы исполняемого кода: Make Targets - Build - mem_init_generate - Build.
При этом в папке проекта NiosII SBT (по умолчанию она называется ..\software\<имя_проекта_NiosII_SBT>, в поддиректории ..\mem_init создаются hex-файлы с исполняемым кодом.
Нас интересует тот, который называется epcq_controller2_0.hex !!!
Проверяем - стартовый адрес в этом hex-файле должен соответствовать смещению, указанному в векторе сброса процессора в Platform Designer'е.
Этот hex с помощью nios2-elf-objcopy перегоняем во flash.

Получить из sof и этого epcq_controller2_0.flash объединенные файлы flash, jic и bin - это уже дело техники.

Правда, тут есть один подводный камень - если Вы работаете с 10-ми семействами (Stratix 10, Arria 10, Cyclone 10), то при попытке конвертировать sof во flash будет выдаваться ошибка о том что в sof'е прописано неизвестное семейство ПЛИС. Это глюк текущей версии sof2flash, он имеется и в v17.1, и в v18.0.
Поэтому приходится применять трансректальный метод - сперва из sof'а получаем rpd, а затем из этого rpd - flash

Цитата
quartus_cpf -c --device=EPCQ32 -o auto_create_rpd=on -o rpd_little_endian=off firmware_data.sof firmware_data.pof
nios2-elf-objcopy -I binary -O srec --srec-forceS3 --srec-len 32 firmware_data_auto.rpd firmware_data.flash

Ну далее, как и раньше:

Цитата
cat firmware_data.flash epcq_controller2_0.flash > hw_sw_image.flash
nios2-elf-objcopy -I srec -O ihex hw_sw_image.flash hw_sw_image.hex
nios2-elf-objcopy -I srec -O binary hw_sw_image.flash hw_sw_image.bin

Вуаля!


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post
djhall
сообщение Sep 19 2018, 12:15
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 168
Регистрация: 29-04-06
Пользователь №: 16 608



Цитата(Stewart Little @ Sep 7 2018, 16:28) *
Вуаля!

1. Я использую Altera Serial Flash Controller

2. Reset Vector Offset устанавливаю сам и оно равно 0x00380000
Я использую 5CEFA5U19C7 и прошивка не помещается в EPCQ32 без компрессии. Значение Reset Vector Offset = 0x00380000 выбрано примерно зная размер сжатого битстрима.

Путём долгих манипуляций получил рабочий скрипт:
Код
quartus_cpf -c --device=EPCQ32 -m ASx4 -o auto_create_rpd=on -o rpd_little_endian=off -o bitstream_compression=on fw_image.sof fw_image.pof
nios2-elf-objcopy -I binary -O srec --srec-forceS3 --srec-len 32 fw_image_auto.rpd fw_image.flash
nios2-elf-objcopy -I ihex -O srec epcq_controller_0.hex epcq_controller_0.flash
cat fw_image.flash epcq_controller_0.flash > hw_sw_image.flash
nios2-elf-objcopy -I srec -O ihex hw_sw_image.flash hw_sw_image.hex
quartus_cpf -c hw_sw_image.cof
nios2-elf-objcopy -I srec -O binary hw_sw_image.flash hw_sw_image.bin

epcq_controller_0.hex - получен путём Make Targets - Build - mem_init_generate - Build в NiosII SBT
hw_sw_image.cof - это файл для преобразования hw_sw_image.hex в hw_sw_image.jic
hw_sw_image.bin - это файл можно записывать непосредственно в EPCQ32

Цитата(Stewart Little @ Sep 7 2018, 16:28) *
Получить из sof и этого epcq_controller2_0.flash объединенные файлы flash, jic и bin - это уже дело техники.

А есть ли способ получить выходные файлы без генерации fw_image_auto.rpd?
Go to the top of the page
 
+Quote Post
Stewart Little
сообщение Sep 19 2018, 12:22
Сообщение #6


Лентяй
******

Группа: Свой
Сообщений: 2 203
Регистрация: 11-10-04
Из: Санкт-Петербург
Пользователь №: 843



Цитата(djhall @ Sep 19 2018, 15:15) *
А есть ли способ получить выходные файлы без генерации fw_image_auto.rpd?

rpd нужен при работе с десятыми семействами, т.к. текущая версия sof2flash эти семейства на распознает.
По идее, если Вы работаете с пятым циклоном, то rpd не особо и нужен.


--------------------
Чтобы слова не расходились с делом, нужно молчать и ничего не делать...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 16th April 2024 - 15:14
Рейтинг@Mail.ru


Страница сгенерированна за 0.01448 секунд с 7
ELECTRONIX ©2004-2016