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

Nios boot и преобразование файлов

Задача такая - необходимо создать файл с прошивкой для 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?

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


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

Кстати интересно как Nios находит это место, где начинается программа ведь Reset vector offset = 0?
Здесь Reset vector указывает на epcs_flash_controller. После сброса начинает исполняться код копировщика, который живет в epcs_flash_controller'е. Этот копировщик вычитывает и из EPCS'ки код приложения и записывает его в сегмент .text в соответствии с установками BSP.

 

Теперь используется EPCQ32, Cyclone V и Qsys.

В настройках Nios выставленно Reset vector offset = 0x00380000.

На какое именно устройство указывает Ваш вектор сброса?

 

Подскажите как мне создать бинарный файл для EPCQ32 с прошивкой и программой для Nios?
Точно так же, как и раньше.

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


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

На какое именно устройство указывает Ваш вектор сброса?

Я использую Altera Serial Flash Controller с параметрами EPCQ32 и QUAD

В Nios выставленны следующие параметры:

Reset vector memory - epcq_controller_0.avl_mem (Он имеет базовый адрес 0x05400000)

Reset vector offset - 0x00380000

Reset vector - 0x05780000

 

Точно так же, как и раньше.

Так же не работает, хотя бы потому, что 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?

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


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

Так же не работает, хотя бы потому, что 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

Вуаля!

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


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

Вуаля!

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

 

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

А есть ли способ получить выходные файлы без генерации fw_image_auto.rpd?

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


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

А есть ли способ получить выходные файлы без генерации fw_image_auto.rpd?

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

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

 

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


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

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

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

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

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

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

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

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

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

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