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

Сколько памяти нужно для Microblaze

В таких случаях неплохо создать и посмотреть MAP-файл.

 

http://electronix.ru/forum/index.php?s=&am...t&p=1244345

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


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

В таких случаях неплохо создать и посмотреть MAP-файл.

 

http://electronix.ru/forum/index.php?s=&am...t&p=1244345

 

Да, спасибо! Действительно помогло. Обнаружил где затесался malloc, который съел кучу памяти и еще по мелочам. Еще добавил ключи которые советовали, убрал все xil_printf. В итоге вместо 160 кбайт получилось 48 кбайт. Интересно, можно еще как то сократить?

 

test.map.txt

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


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

чет 48 КБайт много, точно столько? на hello world?

много....

 

можно выкинуть текст исходников от дебага, если это ваши ключики еще не сделали... и так далее... меньше должно быть у меня первые проекты в 16 кБайтовый брам влазили

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


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

думаю тут где то нолик лишний, или в линкере чего-то начудили и какие то спец секции сделали....

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


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

В итоге вместо 160 кбайт получилось 48 кбайт. Интересно, можно еще как то сократить?

 

Интересно, какой сегмент больше всех занимает. Можно через XMD посмотреть, или через плагин для totalcmd. Хотя в .MAP видно, что по крайней мере в elf включено fifo. Значит делаются вызовы из соответствующих библиотек.

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


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

чет 48 КБайт много, точно столько? на hello world?

много....

 

Сорри, что не предупредил. То что я выложил уже не Hello World, т.к. подумал, что даже если его и уменьшу, реально мало мне о чем скажет, поэтому взял свой реальный проект.

В проекте используется AXI Memory Mapped FIFO на примем и передачу. Работаю с ней по прерыванию. Данные получаю с Aurora, отправляю тоже через нее.

Суть программы в получении пакета, его разбора и отправке пакета ответа. Больше кода там пока как раз в работе с FIFO, т.к. обмен происходит через AXI Lite по описанному в примере от Xilinx алгоритму.

 

можно выкинуть текст исходников от дебага, если это ваши ключики еще не сделали... и так далее... меньше должно быть у меня первые проекты в 16 кБайтовый брам влазили

 

Если имеется в виду версия Debug и Release, то сейчас у меня 48 кбайт в Release варианте. Если что то еще можно дебажное сократить, было бы здорово.

 

Вообще как думаете, реально подобный софт вместить в 4 кбайта или самый край 8 кбайт? С учетом что сейчас у меня не все реализовано в программе. Необходимо будет добавить алгоритмы работы по SPI, для конфигурирования периферии данными полученными "сверху".

 

Интересно, какой сегмент больше всех занимает. Можно через XMD посмотреть, или через плагин для totalcmd. Хотя в .MAP видно, что по крайней мере в elf включено fifo. Значит делаются вызовы из соответствующих библиотек.

 

Вот что при сборке выводится:

Invoking: MicroBlaze Print Size
mb-size dummy_hi_unit.elf  |tee "dummy_hi_unit.elf.size"
   text       data        bss        dec        hex    filename
   8532        336       3404      12272       2ff0    dummy_hi_unit.elf
Finished building: dummy_hi_unit.elf.size

 

Тут как раз возникает еще вопрос. Получается, что в сумме секции дают 12272. Это вообще откуда? Почему реально там файл 48869 ?

 

P.S. Да вызовы из библиотек делаются. Как раз по работе с FIFO больше всего.

 

Еще вот смог получить инфу:

 

readelf --sections ./dummy_hi_unit.elf

Имеется 27 заголовков раздела, начиная со смещения 0xa9bc:

Заголовки разделов:
  [Нм] Имя               Тип             Адрес    Смещ   Разм   ES Флг Сс Инф Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .vectors.reset    PROGBITS        00000000 000094 000008 00  AX  0   0  4
  [ 2] .vectors.sw_excep PROGBITS        00000008 00009c 000008 00  AX  0   0  4
  [ 3] .vectors.interrup PROGBITS        00000010 0000a4 000008 00  AX  0   0  4
  [ 4] .vectors.hw_excep PROGBITS        00000020 0000b4 000008 00  AX  0   0  4
  [ 5] .text             PROGBITS        a8000000 0000bc 001cac 00 WAX  0   0  4
  [ 6] .init             PROGBITS        a8001cac 001d68 000034 00  AX  0   0  4
  [ 7] .fini             PROGBITS        a8001ce0 001d9c 00001c 00  AX  0   0  4
  [ 8] .ctors            PROGBITS        a8001cfc 001db8 000008 00  WA  0   0  4
  [ 9] .dtors            PROGBITS        a8001d04 001dc0 000008 00  WA  0   0  4
  [10] .rodata           PROGBITS        a8001d0c 001dc8 000438 00   A  0   0  4
  [11] .sdata2           NOBITS          a8002144 002200 000004 00  WA  0   0  1
  [12] .data             PROGBITS        a8002148 002200 000140 00  WA  0   0  4
  [13] .bss              NOBITS          a8002288 002340 000544 00  WA  0   0  4
  [14] .heap             NOBITS          a80027cc 002340 000404 00  WA  0   0  1
  [15] .stack            NOBITS          a8002bd0 002340 000400 00  WA  0   0  1
  [16] .debug_line       PROGBITS        00000000 002340 001e9f 00      0   0  1
  [17] .debug_info       PROGBITS        00000000 0041df 0028b0 00      0   0  1
  [18] .debug_abbrev     PROGBITS        00000000 006a8f 000fba 00      0   0  1
  [19] .debug_aranges    PROGBITS        00000000 007a50 0002f8 00      0   0  8
  [20] .debug_frame      PROGBITS        00000000 007d48 000520 00      0   0  4
  [21] .debug_loc        PROGBITS        00000000 008268 001728 00      0   0  1
  [22] .debug_ranges     PROGBITS        00000000 009990 000348 00      0   0  1
  [23] .debug_str        PROGBITS        00000000 009cd8 000bcb 01  MS  0   0  1
  [24] .shstrtab         STRTAB          00000000 00a8a3 000117 00      0   0  1
  [25] .symtab           SYMTAB          00000000 00adf4 000990 10     26  42  4
  [26] .strtab           STRTAB          00000000 00b784 000761 00      0   0  1
Обозначения флагов:
  W (запись), A (назнач), X (исполняемый), M (слияние), S (строки), 
  I (инфо), L (порядок ссылок), G (группа), T (TLS), E (исключён), x (неизв.)
  O (треб. доп. обработка ОС) o (специфич. для ОС), p (специф. для процессора)

интересно что за секции .debug_* и можно ли их как то порезать.

Изменено пользователем pepelats

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


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

погодите погодите!

у вас размер программки 12 КБ, а откуда вы берете цифру 48? Если в измеряете выходной файл что в ПЛИС заливается, то 1 он в АСКИ формате а не бинарь, то есть все данные побиты на пакеты, снабжены контрольной суммой, заголовком и адресами. Каждый байт представлен двумя и кроме прошивки содержит еще сам проц, конфигурацию железа.

 

 

Секции дебуг наверное относятся к обслуге дебуг модуля проца, который не рекомендуют выкидывать даже в финальных проектах...

 

Секция текст - обычно в нее кладут исходники программы, чтобы во время отладки лазить по тексту и видеть откуда что. Я не помню точно, но вроде у эклипса тоже есть галочка включать текст программы или нет в бинарь.

 

-----

нашел 2 флажка в настройках проекта

omit all symbol information

debug level: min, normal, max, none

вот их еще можно покрутить

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


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

погодите погодите!

у вас размер программки 12 КБ, а откуда вы берете цифру 48? Если в измеряете выходной файл что в ПЛИС заливается, то 1 он в АСКИ формате а не бинарь, то есть все данные побиты на пакеты, снабжены контрольной суммой, заголовком и адресами. Каждый байт представлен двумя и кроме прошивки содержит еще сам проц, конфигурацию железа.

вот вывод в консоль списка файлов. Файл dummy_hi_unit.elf это сам бинарник как я понимаю. По крайней мере в Linux так. Размер как видно показывает 48869.

/Release> ls -l
итого 224
-rwxr-xr-x 1 enovikov users 48869 апр  2 08:55 dummy_hi_unit.elf
-rw-r--r-- 1 enovikov users   247 апр  2 08:55 dummy_hi_unit.elf.elfcheck
-rw-r--r-- 1 enovikov users   107 апр  2 08:55 dummy_hi_unit.elf.size

 

нашел 2 флажка в настройках проекта

Че то не нашел, это в какой вкладке?

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


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

на проект правой кнопкой

C/C++ Build settings

MicroBlaze gcc compiler -> debuger ->...

Microblaze gss linker -> general ->...

 

ну так elf то это не только программа... там же куча служебки, да еще сам проц вроде там...

 

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


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

ну так elf то это не только программа... там же куча служебки, да еще сам проц вроде там...

Но в любом случае все это пришлось бы размещать в BRAM если бы понадобилось отказаться от DDR ? У меня как раз загвоздка в этом.

 

Microblaze gss linker -> general ->...

Вот тут кстати помогло. Поставил галочку omit all symbol information и размер файла уменьшился до ~9 кбайт. Надо будет проверить заведется с ним или нет.

Спасибо! :a14:

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


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

Но в любом случае все это пришлось бы размещать в BRAM если бы понадобилось отказаться от DDR ? У меня как раз загвоздка в этом.

не надо путать теплое с мягким%).

в брам ложится только (код + данные + текст), куча служебки отрежется при программировании, а сам проц ляжет во внутря плис. Вы если по размеру кода за брамы вылетите, вам про это линкер скажет при сборке, это как раз тот размер что 12 КБ был, когда он больше станет, начнутся проблемы, за ним надо следить, а не на общий размер смотреть.

 

Проект в БРАМ приятен еще тем что не надо писать загрузчик, который нужен при запуске из DDR.

 

Поставил галочку omit all symbol information и размер файла уменьшился до ~9 кбайт

только отлаживать такой проект невозможно, все имена переменных, функций и прочее выкинуты....

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


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

в брам ложится только (код + данные + текст), куча служебки отрежется при программировании, а сам проц ляжет во внутря плис.

Это точно? Насколько я себе представлял, что проц находится в bitstream, а в ELF файле находится полностью моя софт программа пускай даже с мусором. Но что значит там находится и проц? Помимо FPGAшной реализации есть еще и софтовая часть?

 

Вы если по размеру кода за брамы вылетите, вам про это линкер скажет при сборке, это как раз тот размер что 12 КБ был, когда он больше станет, начнутся проблемы, за ним надо следить, а не на общий размер смотреть.

OK, если это так, то очень хорошо. :)

 

Проект в БРАМ приятен еще тем что не надо писать загрузчик, который нужен при запуске из DDR.

Кстати как раз вопрос. Подскажите, где можно почитать как надо зашить ELF файл во FLASH (желательно Platform Flash), чтобы он по старту питания загрузился в BRAM и начал исполнение? Я находил и делал только с BPI flash, которой нужен SREC загрузчик и много танцев с бубном.

 

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


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

Это точно? Насколько я себе представлял, что проц находится в bitstream, а в ELF

нет это не точно, но я смотрю на размер ELF файла и размер кода у себя, и понимаю что там далеко не только программа... может самого проца там и нет, но куча говна точно имеется, может исходники в текстовом виде для дебага... не знаю, не копал.

Но что смотреть надо на ту цифру что у вас была 12 КБайт, это точно, как она переваливает за размер БРАМ, так вам сразу радостно бежит линкер это рассказать.

 

 

 

Кстати как раз вопрос. Подскажите, где можно почитать как надо зашить ELF файл во FLASH (желательно Platform Flash), чтобы он по старту питания загрузился в BRAM и начал исполнение? Я находил и делал только с BPI flash, которой нужен SREC загрузчик и много танцев с бубном.

 

Эта плис умеет конфигурить свои внутренние BRAM во время конфигурации, так что если ваша программа влезла в БРАМ, то вы просто прошиваете плис как обычно, а во время загрузки она скачает прошивку, законфигурица как проц, и модули памяти подключенные к процу будут уже иметь прошивку. Чтобы так залить программу ничего делать не надо, прямо в SDK жмете xilinx tool -> config FPGA -> выбирает не bootloop а ваш проект, и прошиваете.

 

Там как то не сложно можно разобраться как сделать это навсегда, а не временно. У меня нет под рукой проекта что влезает в БРАМ чтобы это сделать и написать точнее. А вот если проект в БРАН не влазит, то вот тогда бубен.... Если коротко то надо написать загрузчик, который будет из конфигурационной флеши ПЛИС из места после прошивки брать данные, и пихать их в себя и ДДР. По этому поводу есть апликейшен ноты надо читать на ксалинксе. Вроде как даже есть какой-то стандартный пример. Мой проект с микроблайзом закрылся до этой стадии, мы поставили внешний проц по ряду причин, так что разобраться во всех нюансах я не успел. Так что дальше сами:)

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


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

Кстати как раз вопрос. Подскажите, где можно почитать как надо зашить ELF файл во FLASH (желательно Platform Flash), чтобы он по старту питания загрузился в BRAM и начал исполнение? Я находил и делал только с BPI flash, которой нужен SREC загрузчик и много танцев с бубном.

 

ELF во flash можно зашить через iMPACT. А SREC-bootloader можно автосгенерировать в SDK. Он работает (я проверял), только не забудьте оттуда убрать вывод в консоль, иначе программа будет загружаться несколько часов.

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


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

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

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

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

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

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

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

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

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

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