|
|
  |
Microblaze Vivado, Как прошить в постоянную память |
|
|
|
Nov 25 2014, 09:11
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
Приветствую. Имеется Kintex-7 FPGA Embedded kit. Помогите разобраться с прошивкой microblaze в постоянную память (BPI). Делал по инструкции от сюда http://www.wiki.xilinx.com/K7+Embedded+TRD+2013.2 . Все получилось, все хорошо. Но встал вопрос о том, как это все залить в постоянную память. Поискав информацию, натыкались только на ISE. Хотелось бы узнать, что необходимо для Vivado кроме SDK и какая последовательность действий.
|
|
|
|
|
Nov 26 2014, 07:46
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
За вчера выяснили некоторые детали. В SDK, когда выбираем "Program FPGA", создается download.bit (как и писали в одной из тем на форуме), на основе system.bit, system_bd.bmm, которые как я понял экспортируются из Vivado, и mb_bootloop_le.elf, который берется из установочной папки Vivado. Данный elf файл, как я понял, является загрузчиком для других elf-файлов, а именно тех, которые сформированы на основе С-программ (из примера это hellow_world_0.elf), и загружаются в ОЗУ, когда мы нажимаем "Run As" в SDK. Таким образом нам нужно как то либо объединить mb_bootloop_le.elf и hellow_world_0.elf, при этом bootloop должен быть изменен так, что бы загрузка происходила уже не из ОЗУ, а из ПЗУ, либо создать такой hellow_world_0.elf, который будет загружаться сам. Из того, что успели попробовать: на основе download.bit был создан файл для прошивки в ПЗУ, прошили его и попробовали без всяких прошивок в SDK запустить "Run As" для примеров из ссылки выше (hellow_world, board_test_app_Console, board_test_app_Webserver) - все запустилось. Попробовал, при создании download.bit указать hellow_world_0.elf вместо mb_bootloop_le.elf - вылетает с ошибкой. Если выбрать "Program Flash" в SDK, то при прошивке hellow_world_0.elf что то записываается в память, но что то неработоспособное (все светодиоды, 8 штук, которые на плате - горят, хотя при рабочем варианте они все потушены). Если в окошке настроек "Program Flash" поставить галку "Convert ELF to bootloadable SREC format and program" - тоже самое. Возможно нужно колдавать с "Program at offset" - но от куда берется это значение, на каких данных основывается? Прикрепляю скриншот окошка "program Flash" и "Generate linker script" - может что подскажет
|
|
|
|
|
Nov 26 2014, 15:34
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
(тихо сам собой веду беседу) Возник вопрос - а туда ли я копаю? Поясню задачу: нужно самое простое - собрать microblaze с какой либо прошивкой, и что бы это все работало после выключения. Может мне и не нужна прошивка во flash? Появилась такая мысль: 1) собираем проект microblaze в vivado. 2) экспортируем в SDK. 3) пишем прошивку, тестируем её в SDK. 4) добавляем получившийся hellow_world.elf в проект в vivado (тут два варианта: 1) "Add source" в "Design Source"; 2) "Associate ELF Files"). 5) пересобираем проект.
|
|
|
|
|
Nov 26 2014, 16:20
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
"Program FPGA" заливает только во ОЗУ. При чем, когда я там пробовал подсунуть вместо mb_bootloop_le.elf hellow_world_0.elf из примера, он у меня ругался на кривой elf файл.
|
|
|
|
|
Nov 27 2014, 05:49
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
Да, есть такой бит файл - download.bit. Но как я писал, он у меня получался только с mb_bootloop_le.elf. И да - в примере, который использовали, есть DDR. Не подскажите, где можно посмотреть про создание отдельного загрузчика? В Vivado 2014 выпилили совсем impact, осталось только само Vivado и SDK. В этом и загвоздка - все туториалы, что я находил, ссылаются на ISE или Vivado 2013, где есть impact или полноценное EDK.
|
|
|
|
|
Nov 27 2014, 07:25
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
А ну тогда все понятно. download.bit - это то что вам нужно, должны быть какие-то средства записи его во флешку ПЛИС. Самый простой способ проверить это взять вашу боевую программу, а дальше поправить линкер скрипт, чтобы никакие секции не попадали во внешний DDR. После этого можно будет сделать download и для основной прошивки. Если с этим все будет ок, то надо двигаться дальше. Задача загрузчика не тривиальна, есть такие документы и ссылки http://www.xilinx.com/support/answers/43615.htmlа также XAPP1140 и XAPP1146, Возможно их надо адаптировать к вивадо, но принцип общий...
|
|
|
|
|
Nov 27 2014, 10:04
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
Большое спасибо! Получилось наконец создать работающий download.bit из hellow_world_0.elf. В примере был сгенерирован линкер скрипт таким образом, что только первой секции, та что "Code Section Assignments", была назначена BRAM, остальные в DDR. Заменил на BRAM и все запустилось. А можно поподробнее про линкер скрипт и секции? А точнее наверно только про секции, так скрипт сам собой генерируется, - что храниться в каждой из них (тут вроде более или менее понятно: первая секция - первая команда программы; вторая - переменные, константы и т.д.; третья - стек) и какая память, в каких случаях для них нужна? Информации много и поэтому сложно в ней сориентироваться, тыкните носом если можно. А то боюсь опять уйти в какие-нибудь дебри.
Что бы сузить критерии, могу сказать, что цель проекта - запустить на плате линукс, который будет взаимодействовать остальной логикой.
|
|
|
|
|
Nov 27 2014, 14:50
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
секции как везде, http://www.cs.indiana.edu/hmg/le/project-h...e/doc/swref.pdf.text - Text Section код програмки .rodata - Read-Only Data Section - константы .sdata2 - Small Read-Only Data Section константы простых типов .data - Read-Write Data Section - переменные .sdata - Small Read-Write Data Section - переменные простых типов (типа не массивы) .sbss - Small Un-initialized Data Section - не инициализированные переменные (инициализируются нулем) .bss - Un-initialized Data Section - не инициализированные переменные (инициализируются нулем) если пишите int a; - это попадет в sbss а если int a=10; - это попадет в sdata const int a=10; в sdata2 деление между большими и маленькими данными условно. Типа массивы и структуры попадают в секцию больших данных, а простые переменные типа int в секцию маленьких. можно добавлять свои секции, если надо их как-то в памяти раскладывать в линкер скрипте указываете где какая секция лежит, а при объявлении переменной можно сказать в какую секцию эту переменную запихать. как то так... А вот с запуском линукса - это круто  .... Вы уверены что он вам нужен? У ксалинкса есть своя операционка, В любом случае микроблайз без танцев с бубном больше 64к на программу не даст, а в таком раскладе ни линукс ни даже просто LwIP запустить не удастся, так что надо подключать DDR, и писать загрузчик, и все секции туда перепихивать. Суть загрузчика - это собственно прожка которая запускается в BRAM, а потом копирует данные из феши в DDR и передает управление туда... Но в любом случае линукс - это прям челенж! Да еще проц выбран не тривиальный для таких приколов... Найдите готовую сборку под ваш кристалл если есть и разбирайтесь, так самому с нуля собрать даже не знаю, надо собрать миллиард линуксов до этого, а судя по вопросам про названия секций вы это скорее всего не делали
|
|
|
|
|
Nov 27 2014, 15:06
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
Спасибо за ответ =) Абсолютно правы - я в этом ноль. Но надо же с чего то начинать =) Сейчас как раз вот и занимаемся поиском каких то готовых сборок и пошаговых инструкций. Про то что нужен или нет - нам сказали, мы арбайтен =) Про операционку от ксайлинкса - вы про петалинукс?
|
|
|
|
|
Nov 28 2014, 08:27
|
Группа: Участник
Сообщений: 13
Регистрация: 25-11-14
Пользователь №: 83 819

|
Спасибо за совет - будем обсуждать. Наверно действительно мы поторопились, выбрав линукс, при этом плохо изучив что есть помимо. Выбор на него пал, так как это первое что пришло в голову с наличием как раз таки полного езернета. По-сути мы сейчас не столько нацелены на результат, сколько на то, что бы пощупать и оценить сложность. Но в любом случае без микроблейза никуда =) И вроде уже есть подвижки в этом деле.
|
|
|
|
|
Nov 28 2014, 08:52
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
микроблайз зачастую оправдан, правда цинк лучше, там большущая ПЛИС и нормальный проц. И порты линукс на него вроде как есть, если уж очень хочется. Для более дешевого пути мы взяли ПЛИС и внешний АРМ, так удобнее и надежнее, все же оттестированное и запеченное ядро лучше чем собираемое каждый раз.
Когда ковырялся с микроблайзом для езернета использовал LwIP, он идет в виде библиотеки (можно и из исходников собрать если нужны правки, но по дефолту уже все собрано, удобно пользоваться). В целом нормально работал, выдавал неплохую скорость. Стэк популярный и достаточно оттестированный.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|