djhall 0 6 сентября, 2018 Опубликовано 6 сентября, 2018 · Жалоба Задача такая - необходимо создать файл с прошивкой для 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 42 6 сентября, 2018 Опубликовано 6 сентября, 2018 · Жалоба Кстати интересно как 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?Точно так же, как и раньше. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 7 сентября, 2018 Опубликовано 7 сентября, 2018 · Жалоба На какое именно устройство указывает Ваш вектор сброса? Я использую 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 42 7 сентября, 2018 Опубликовано 7 сентября, 2018 · Жалоба Так же не работает, хотя бы потому, что 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 Вуаля! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
djhall 0 19 сентября, 2018 Опубликовано 19 сентября, 2018 · Жалоба Вуаля! 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? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
StewartLittle 42 19 сентября, 2018 Опубликовано 19 сентября, 2018 · Жалоба А есть ли способ получить выходные файлы без генерации fw_image_auto.rpd? rpd нужен при работе с десятыми семействами, т.к. текущая версия sof2flash эти семейства на распознает. По идее, если Вы работаете с пятым циклоном, то rpd не особо и нужен. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться