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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Сколько памяти нужно для Microblaze
xor.kruger
сообщение Jan 23 2014, 11:48
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Код
а я чет бился бился, 64 и все... надо будет ручками потом покрутить,

Я в старых версиях EDK и SDK раньше долго боролся с проблемами которые связаны с генерацией файлов автоматически (тобиж индусскими скриптами). Сейчас использую 14.6 - но проблемы еще есть. Там где можно описать файлы самому ручками - пытаюсь описывать sm.gif У Вас какая версия?
Go to the top of the page
 
+Quote Post
aabmail
сообщение Jan 23 2014, 16:04
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



У меня сегодня получилось в EDK14.5:
1. Для Спартан-6 добавить 3 брам-контроллера, каждый максимум на 64 кБайт. Больше не дает.
2. Для Кинтекс-7 добавить много брам контроллеров, каждый максимум на 128 кБайт. Больше не дает.

При этом в линкер-скрипте можно объединять брам-контроллеры в общую память и размещать в ней сегменты elf-файла как угодно. Поэтому, как я понял, нет смысла пытаться увеличивать память в одном брам-контроллере.
Привожу пример с объединением двух контроллеров в линкер-скрипте.
Код
MEMORY
{
   microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl : ORIGIN = 0x00000050, LENGTH = 0x0001FFB0
   /*axi_bram_ctrl_0_S_AXI_BASEADDR : ORIGIN = 0x41420000, LENGTH = 0x00020000
   axi_bram_ctrl_1_S_AXI_BASEADDR : ORIGIN = 0x41440000, LENGTH = 0x00020000
   axi_bram_ctrl_2_S_AXI_BASEADDR : ORIGIN = 0x41460000, LENGTH = 0x00020000*/
   axi_bram_ctrl_a_S_AXI_BASEADDR : ORIGIN = 0x41420000, LENGTH = 0x00060000
}
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 23 2014, 17:29
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



у меня 14.4 ваще... я не модныйsm.gif... вот потому наверное и упираюсь в 64 К.

про объединение в линкере, у вас 3 области которая идет одна за другой.

А когда вы просите какую-то секцию положить в область, вы ей какое имя секции указываете?

получится что все секции надо руками раскладывать, а большая все равно не влезет?
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Jan 24 2014, 08:55
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(Golikov A. @ Jan 23 2014, 20:29) *
про объединение в линкере, у вас 3 области которая идет одна за другой.
А когда вы просите какую-то секцию положить в область, вы ей какое имя секции указываете?
получится что все секции надо руками раскладывать, а большая все равно не влезет?


Насколько я понимаю секции могут быть в axi_bram_ctrl_a_S_AXI_BASEADDR длиной 0x00060000.

А что за проблема с раскладыванием руками? Мне в проекте где есть DDR постоянно приходится все секции после визарда
перекидывать из DDR в BRAM.
Go to the top of the page
 
+Quote Post
aabmail
сообщение Jan 24 2014, 09:36
Сообщение #20


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Цитата(Golikov A. @ Jan 23 2014, 21:29) *
у меня 14.4 ваще... я не модныйsm.gif... вот потому наверное и упираюсь в 64 К.

про объединение в линкере, у вас 3 области которая идет одна за другой.

А когда вы просите какую-то секцию положить в область, вы ей какое имя секции указываете?

получится что все секции надо руками раскладывать, а большая все равно не влезет?


В качестве ответа прикладываю линкер-скрипт целиком.
В общем случае для всех сегментов elf-файла нужно указать один и тот же memory region.

Прикрепленные файлы
Прикрепленный файл  lscript________.txt ( 4.9 килобайт ) Кол-во скачиваний: 64
 
Go to the top of the page
 
+Quote Post
xor.kruger
сообщение Jan 24 2014, 11:29
Сообщение #21


Местный
***

Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647



Цитата
у меня 14.4 ваще... я не модный... вот потому наверное и упираюсь в 64 К.

Размер брамки зависит реально не от версии ISE/EDK и скриптов которые чекают размер перед этапом синтеза (EDK), а от самого кристалла (как в нем расположена памяти) потому что имеется проблема обеспечить одинаковое время доступа ко всем регионам.
На Virtex6 (xc6vlx240t) максимальный размер блочной памяти подключаемый к брам контроллеру составляет 256 K.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jan 24 2014, 13:21
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата(aabmail @ Jan 24 2014, 13:36) *
В качестве ответа прикладываю линкер-скрипт целиком.
В общем случае для всех сегментов elf-файла нужно указать один и тот же memory region.


понятно, когда один большой кусок то вопросы снимаются... и че я думал что так низя, это здорово все упрощает,
Go to the top of the page
 
+Quote Post
aabmail
сообщение Feb 13 2014, 10:19
Сообщение #23


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Уважаемые коллеги!
Всем, кого интересует этот вопрос, спешу сообщить, что вариант с объединением нескольких контроллеров памяти в linker-скрипте тупиковый.
ELF хоть и создается, elfcheck хоть и проходит, а вот data2mem ругается ((.

Так что тема использования дополнительных BRAM по-прежнему актуальна.

Цитата(aabmail @ Jan 23 2014, 20:04) *
Привожу пример с объединением двух контроллеров в линкер-скрипте.
Код
MEMORY
{
   microblaze_0_i_bram_ctrl_microblaze_0_d_bram_ctrl : ORIGIN = 0x00000050, LENGTH = 0x0001FFB0
   /*axi_bram_ctrl_0_S_AXI_BASEADDR : ORIGIN = 0x41420000, LENGTH = 0x00020000
   axi_bram_ctrl_1_S_AXI_BASEADDR : ORIGIN = 0x41440000, LENGTH = 0x00020000
   axi_bram_ctrl_2_S_AXI_BASEADDR : ORIGIN = 0x41460000, LENGTH = 0x00020000*/
   axi_bram_ctrl_a_S_AXI_BASEADDR : ORIGIN = 0x41420000, LENGTH = 0x00060000
}

Go to the top of the page
 
+Quote Post
misyachniy
сообщение Feb 16 2014, 17:27
Сообщение #24


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



У меня есть схожий вопрос, задам здесь.
Текст программы рос, рос и вырос.
Теперь не помещается в сегмент ".text".
Попробовал все сегменты перегнать в отдельный контроллер BRAM.
Все равно, не достаточно места.
Порезал "ненужные" функции, программа работает со сбоями.
Есть подозрение, что стек наползает на код или данные.

Каким образом перекинуть часть функций из секции ".text"?
Может еще какие либо секции программ разместить в основном контроллере BRAM?
С точки зрения быстродействия или еще по каим либо соображениям?
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
aabmail
сообщение Feb 16 2014, 22:19
Сообщение #25


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Я бы посоветовал следующее:

1. Создать еще хотя бы один брам-контроллер (Если, конечно, есть "лишние" BRAMы). Разместить в нем .stack и .heap.
2. Увеличить размер стека. Скорее всего из-за этого и сбоит прграмма.
3. Секции .init и .fini также разместить в _d_bram_ctrl.

Цитата(misyachniy @ Feb 16 2014, 21:27) *
У меня есть схожий вопрос, задам здесь.
Текст программы рос, рос и вырос.
Теперь не помещается в сегмент ".text".
Попробовал все сегменты перегнать в отдельный контроллер BRAM.
Все равно, не достаточно места.
Порезал "ненужные" функции, программа работает со сбоями.
Есть подозрение, что стек наползает на код или данные.

Каким образом перекинуть часть функций из секции ".text"?
Может еще какие либо секции программ разместить в основном контроллере BRAM?
С точки зрения быстродействия или еще по каим либо соображениям?

Go to the top of the page
 
+Quote Post
misyachniy
сообщение Feb 17 2014, 08:54
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 716
Регистрация: 27-05-05
Из: Kyiv
Пользователь №: 5 454



Цитата(aabmail @ Feb 17 2014, 00:19) *
Я бы посоветовал следующее:

1. Создать еще хотя бы один брам-контроллер (Если, конечно, есть "лишние" BRAMы). Разместить в нем .stack и .heap.
2. Увеличить размер стека. Скорее всего из-за этого и сбоит прграмма.
3. Секции .init и .fini также разместить в _d_bram_ctrl.



В том то и вопрос, что секция ".text" больше чем 64К.
Код нужно разделить на две части.
Я то догадываюсь, что нужно директива pragma, но не нашел конкретного ответа.
Пробовал d_bram_ctrl объявить побольше, но для Spartan6 размер для одного контроллера ограничен в 64К
Go to the top of the page
 
+Quote Post
aabmail
сообщение Mar 27 2014, 14:35
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 210
Регистрация: 4-06-08
Из: Москва
Пользователь №: 38 056



Выделить более 64 кБайт для программы microBlaze возможно. Чтобы это сделать, нужно

1. Добавить новые BRAM-controllers на шины LMB (а не на AXI).
2. Generate bitstream. Отредактировать system_bd.bmm: добавить ADDRESS_RANGEs, как написано в UG658 в гл. Combined address spaces.
3. Export to SKD. Заменить в linker script два bram-контроллера на один контроллер двойного размера. Расположить в нем все сегменты elf. ProgramFPGA. Enjoy.
4. Зафиксировать в UCF расположение BRAM, чтобы не приходилось всякий раз редактировать BMM.


Go to the top of the page
 
+Quote Post
pepelats
сообщение Apr 1 2014, 05:41
Сообщение #28


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-10
Из: Томск
Пользователь №: 54 958



Здравствуйте,

Скажете, сколько может весить самая простая программа для Microblaze в релизе и с оптимизацией. Например программа уровня Hello World. Схема при этом самая минимальная.
У меня получается ~14 кбайт. Это нормально? Можно как то уменьшить эти показатели?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 1 2014, 06:09
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



как только вы используете что-то типа printf сразу подключается библиотека, и программа пухнет.
Если вы напишите программу, которая положит данные в буфер UART сама, то будет значительно меньше.
А с библиотеками это нормально...

П.С. В большинстве драйверов от ксалинкс по умолчанию отладка идет через pritf и им подобные, так что проверяйти их исходники, благо они доступны. И еще есть функция xil_printf или как то так, она не подтягивает за собой полную библиотеку, с ней программа поменьше...
Go to the top of the page
 
+Quote Post
pepelats
сообщение Apr 1 2014, 06:36
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-10
Из: Томск
Пользователь №: 54 958



Цитата(Golikov A. @ Apr 1 2014, 13:09) *
как только вы используете что-то типа printf сразу подключается библиотека, и программа пухнет.
Если вы напишите программу, которая положит данные в буфер UART сама, то будет значительно меньше.
А с библиотеками это нормально...

П.С. В большинстве драйверов от ксалинкс по умолчанию отладка идет через pritf и им подобные, так что проверяйти их исходники, благо они доступны. И еще есть функция xil_printf или как то так, она не подтягивает за собой полную библиотеку, с ней программа поменьше...


да, забыл указать что не использую при этом printf и даже xil_printf. Использую print который вообще вроде как занимает копейки по сравнению с printf.

Код
Function Size Limitations
-------------- ------- ------------------
printf() 51788 None, full featured
iprintf() 18294 No floating point, reentrant
xil_printf() 2953 No floating point, not reentrant(single thread only), no longlong(64 bit)
putnum() 284 Integer to HEX only, no other formats
print() 185 No numbers output, just strings

All of these functions can be prototyped by including <stdio.h>.


Программа Hello World создается из визарда в SDK. И выглядит так:

Код
#include <stdio.h>
#include "platform.h"

void print(char *str);

int main()
{
    init_platform();

    print("Hello World\n\r");

    return 0;
}


и вот это у меня вытягивает на 14 кбайт
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:49
Рейтинг@Mail.ru


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