vv_ 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Добрый день! У меня в проекте есть xilinx ml605, microblaze, к нему elf ф-л и ddr, в котором хранится программа, куча и стек. Сейчас появилась задача уйти от DDR, вырезать его из MBZ и перенести elf, кучу и стек в BRAM. Программа в elf занимает 255 Кб. BRAM в MBZ доступно 128 кб. Оптимизируя и урезая программу сильно много места я не выиграю. Получается нужно увеличивать BRAM. Подскажите пожалуйста, возможно ли сделать BRAM = 512 Кб или около того? Если нет, то возможно есть какие то типовые решения данной проблемы? Если я чего то не правильно понимаю, пните в нужную сторону:) Спасибо всем! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Добрый день! У меня в проекте есть xilinx ml605, microblaze, к нему elf ф-л и ddr, в котором хранится программа, куча и стек. Сейчас появилась задача уйти от DDR, вырезать его из MBZ и перенести elf, кучу и стек в BRAM. Программа в elf занимает 255 Кб. BRAM в MBZ доступно 128 кб. Оптимизируя и урезая программу сильно много места я не выиграю. Получается нужно увеличивать BRAM. Подскажите пожалуйста, возможно ли сделать BRAM = 512 Кб или около того? Если нет, то возможно есть какие то типовые решения данной проблемы? Если я чего то не правильно понимаю, пните в нужную сторону:) Спасибо всем! ml605 -> XC6VLX240T -> 14976 Kb BRAM -> 1872KB. Возможно. Надо в xps сконфигурировать компонент BRAM внешний, на шине (вот только не помню нет ли в нем ограничений). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба ml605 -> XC6VLX240T -> 14976 Kb BRAM -> 1872KB. Возможно. Надо в xps сконфигурировать компонент BRAM внешний, на шине (вот только не помню нет ли в нем ограничений). К сожалению, ограничения есть. Не всю BRAM можно отвести под исполняемый код, а именно: 1. На шине памяти local memory bus (ILMB и DLMB) в XC6VLX240T можно адресовать не более 128 кБайт. 2. На шине AXI можно создавать BRAM-контроллеры в любом количестве. Сегмент .text, .init, .fini можно располагать только в памяти на шине LMB. Остальные сегменты можно располагать и в LMB, и в AXI. Для Spartan-6 есть один замороченный метод, позволяющий увеличить размер LMB в два раза. Подозреваю, что и в Virtex можно сделать то же самое. Если кому потребуется - изложу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Сегмент .text, .init, .fini можно располагать только в памяти на шине LMB. Думаю тут имеется ввиду код исполняемый непосредственно после старта, т.к. .text в DDR на AXI разместить можно. Как вариант - в BRAM на LMB bootloader который грузит из внешнего флеша в BRAM на AXI и передает туда управление. Bootloader у автора судя по всему есть, т.к. что-то в DDR программу ему грузит, только поменять DDR на BRAM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_ 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба К сожалению, ограничения есть. Не всю BRAM можно отвести под исполняемый код, а именно: 1. На шине памяти local memory bus (ILMB и DLMB) в XC6VLX240T можно адресовать не более 128 кБайт. 2. На шине AXI можно создавать BRAM-контроллеры в любом количестве. Сегмент .text, .init, .fini можно располагать только в памяти на шине LMB. Остальные сегменты можно располагать и в LMB, и в AXI. Для Spartan-6 есть один замороченный метод, позволяющий увеличить размер LMB в два раза. Подозреваю, что и в Virtex можно сделать то же самое. Если кому потребуется - изложу. Спасибо за ответы всем! Я немного уточню задачу. Необходимо, чтобы при включении платы, автоматически загружался MBZ и с CompactFlash грузилась прошивка. Сейчас MBZ и *.elf устанавливаю через XSDK. Так же, на данный момент, проект *.elf загружается в DDR, а нужно чтобы он грузился в BRAM. Можете одробнее описать алгоритм расширения BRAM? И у блока BRAM есть 2 выхода. Как этот блок прицепить на AXI правильно? Как раскидать сегменты типа .text, .init итп, по шинам? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Думаю тут имеется ввиду код исполняемый непосредственно после старта, т.к. .text в DDR на AXI разместить можно. Как вариант - в BRAM на LMB bootloader который грузит из внешнего флеша в BRAM на AXI и передает туда управление. Bootloader у автора судя по всему есть, т.к. что-то в DDR программу ему грузит, только поменять DDR на BRAM. Автору необходимо уйти от использования DDR, следовательно, и bootloader как таковой не нужен. Т.е. имеющийся основной исполняемый файл грузится при включении платы. Его как-то нужно как-то разместить по BRAMs. нужно чтобы он грузился в BRAM. Можете одробнее описать алгоритм расширения BRAM? И у блока BRAM есть 2 выхода. Как этот блок прицепить на AXI правильно? Предлагаю начать с добавления BRAM на AXI. BRAM-контроллер - это модуль, который позволяет присоединить BRAM-блоки к AXI. Для этого необходимо в EDK на вкладке IP-catalog дважды щелкнуть по AXI BRAM Controller. Далее устанавливаете его размер = 128 кБ на вкладке adresses. BRAM-блоки при этом присоединяться автоматически. Ок? Как раскидать сегменты типа .text, .init итп, по шинам? Для начала хорошо посмотреть размеры секций Вашего ELF. Для это в SDK нужно дважды щелкнуть по .ELF-файлу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Это уже 2 подход на моей памяти за этот год, где-то весной кто-то уже делал... В спартане 6 для микроблайза под память программ и данных на брамах выделяют 64 кБайта, и все найденные способы это победить привели к тому что в итоге ничего не вышло (хотели без бутлоадера обойтись) Единственное решение - это сделать проц с 64 кБайтами памяти, в которых будет загрузчик и что-то еще. А все остальные брамы собрать в один огромный массив и сделать из них память. Повесить ее на АКСИ шину, выделить адресное пространство и написать бутлоадер, точно также как в случае с ДДР. Прочие варианты с бубнами и без в итоге не заработали, а народ пару месяцев бился, даже какие-то файлы переписывали руками и пытались среду обмануть... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Автору необходимо уйти от использования DDR, следовательно, и bootloader как таковой не нужен. Т.е. имеющийся основной исполняемый файл грузится при включении платы. Его как-то нужно как-то разместить по BRAMs. Необходимо, чтобы при включении платы, автоматически загружался MBZ и с CompactFlash Таки нужен бутлоадер, и то не маленький - с CF грузить. А куда грузить - в DDR или BRAM на AXI на фоне обслуживания CF не имеет значения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Это уже 2 подход на моей памяти за этот год, где-то весной кто-то уже делал... В спартане 6 для микроблайза под память программ и данных на брамах выделяют 64 кБайта, и все найденные способы это победить привели к тому что в итоге ничего не вышло (хотели без бутлоадера обойтись) Можно в Spartan-6 расширить 64к в два раза. Можно в Spartan-6 разместить все сегменты кроме .text, .init, .fini в дополнительных axi_bram_controllers. Проверено. Работает. Таки нужен бутлоадер, и то не маленький - с CF грузить. А куда грузить - в DDR или BRAM на AXI на фоне обслуживания CF не имеет значения. У Автора есть CF?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
akorud 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Ну, так пишет :-) Я немного уточню задачу. Необходимо, чтобы при включении платы, автоматически загружался MBZ и с CompactFlash грузилась прошивка... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Ну, так пишет :-) Да. Проглядел. )) Так тоже, наверное, можно сделать. Но все-таки в случае 255 кБ можно и без CF обойтись. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба Можно в Spartan-6 расширить 64к в два раза. Можно в Spartan-6 разместить все сегменты кроме .text, .init, .fini в дополнительных axi_bram_controllers. И обойтись при этом без бутлоадера? Научите! Можно для начала с того как 64К в 2 раза расширить. В среде 14.4 и младших вроде как ничего не вышло. А размещение дополнительных сегментов во внешней памяти конечно можно, но только после этого требуется бутлоадер, встроенными средствами вроде как само не выходит... Кстати учитывая наличие CF так может даже проще, в основной памяти, той что легко и непринужденно грузиться сама разместить прожку которая подымает CF, проверяет и копирует образ с нее во "внешнюю память" (массив брамов) и передает туда управление. Это даже проще чем когда исходную прошивку вычитывают из загрузочной флэши ПЛИС... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба И обойтись при этом без бутлоадера? Научите! Можно для начала с того как 64К в 2 раза расширить. В среде 14.4 и младших вроде как ничего не вышло. 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. Хотя вообще говоря, редактирование BMM-файла - при использовании totalcmd в буквальном смысле 5 секунд. Кстати учитывая наличие CF так может даже проще, в основной памяти, той что легко и непринужденно грузиться сама разместить прожку которая подымает CF, проверяет и копирует образ с нее во "внешнюю память" (массив брамов) и передает туда управление. Это даже проще чем когда исходную прошивку вычитывают из загрузочной флэши ПЛИС... Это, конечно, интересная мысль использовать BRAMs в качестве "внешней памяти". Особенно, когда много BRAMs, и они не нужны . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба и можно кеш выключить и его брамы тоже туда отправить, доступ то наибыстрейший надо будет попробовать по рецепту собрать контроллер с 2 брамами. А также с 4 можно собрать? Ведь с 2 можно, че с 4 нельзя:)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aabmail 0 31 июля, 2014 Опубликовано 31 июля, 2014 · Жалоба и можно кеш выключить и его брамы тоже туда отправить, доступ то наибыстрейший В смысле "кеш выключить"? Он и не мог бы быть включен при отсутствии DDR. надо будет попробовать по рецепту собрать контроллер с 2 брамами. А также с 4 можно собрать? Ведь с 2 можно, че с 4 нельзя:)? Больше чем с 2-мя в Спартане не работает. Проверял. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться