Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ускорение lwip (и не только) на microblaze
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
akorud
Так как начиная с некоторого времени microblaze little-endian (в связи с AXI), то в сетевых приложениях много времени занимает преобразование 2- и 4-байтовых слов в заголовках пакетов (сеть big-endian) - функции htohl, htonl, ntohs, htons.
А вот начиная с версии 8.30а в microblaze добавили инструкции swapb & co (много их).
И теперь чтобы переставить местами все байты в слове можно написать (в С коде)
Код
uint32_t ts = 0x01020304;
asm("swapb %0,%1": "=r" (ts): "r" (ts));
xil_printf("%08x", ts); // 0x04030201

И вместо около 40 инструкций - одна.
Вот. Мне очень пригодилось, может кому-то еще будет полезно.
Golikov A.
А там в настройках контроллера есть галочка типа использовать swap или нет. Я надеялся что если поставить да, то компилятор сам разберется... не разберется?
Дмитрий Мазунин
Вроде бы индиану для микроблейза можно настроить при синтезе ? Параметр C_ENDIANNESS
Мы правда ни разу не пробовали его настраивать, т.к. работаем только с PLB.

В MicroBlaze Processor Reference Guide читаю: "The C_ENDIANNESS parameter is automatically set to little endian when using AXI4, and to big endian when using PLB, but can be overridden by the user."

akorud, может быть, попробуете настроить в BIG ?
akorud
Цитата
А там в настройках контроллера есть галочка типа использовать swap или нет. Я надеялся что если поставить да, то компилятор сам разберется... не разберется?

Какого контроллера?
В настройках процессора есть, но компилятор не разберется что
Код

#define PP_HTONL(x) ((((x) & 0xff) << 24) | \          
                     (((x) & 0xff00) << 8) | \          
                     (((x) & 0xff0000UL) >> 8) | \      
                     (((x) & 0xff000000UL) >> 24))

Можно заменить на одну инструкцию. И я не нашел другого способа ее использовать кроме прямо в ассемблере написать.
Цитата(Дмитрий Мазунин @ Jul 8 2013, 09:30) *
Вроде бы индиану для микроблейза можно настроить при синтезе ? Параметр C_ENDIANNESS
Мы правда ни разу не пробовали его настраивать, т.к. работаем только с PLB.

В MicroBlaze Processor Reference Guide читаю: "The C_ENDIANNESS parameter is automatically set to little endian when using AXI4, and to big endian when using PLB, but can be overridden by the user."

akorud, может быть, попробуете настроить в BIG ?

Спасибо, я знаю. Просто у нас вся система на AXI4 и без вариантов - только little endian.
Дмитрий Мазунин
Цитата(akorud @ Jul 8 2013, 19:46) *
Спасибо, я знаю. Просто у нас вся система на AXI4 и без вариантов - только little endian.


Так что же является первопричиной использования little endian ?
AXI4 - вроде бы не причина, если я правильно понял строчку из Guide...

Мы тоже готовимся к переходу на 7 серию и AXI.
Интересно, с чем мы столкнемся sm.gif
Заранее спасибо.
akorud
Цитата(Дмитрий Мазунин @ Jul 9 2013, 08:16) *
Так что же является первопричиной использования little endian ?
AXI4 - вроде бы не причина, если я правильно понял строчку из Guide...

Мы тоже готовимся к переходу на 7 серию и AXI.
Интересно, с чем мы столкнемся sm.gif
Заранее спасибо.

Насколько я понял - именно причина, и без вариантов
http://www.xilinx.com/support/answers/41934.htm
However, it should be not edited in most circumstances by the user. The C_ENDIANNESS parameter is always automatically set to little endian when using AXI4, and to big endian when using PLB.

If it is assigned in MHS manually, platgen gives the following warning:

"WARNING:EDK - IPNAME: microblaze, INSTANCE: microblaze_0 - PARAMETER:
C_ENDIANNESS has value 0 specified in MHS, but tcl is overriding the value to 1"
Дмитрий Мазунин
Как то мутно.
Ну предупреждение... А работать-то будет ?? Или TCL поставит обратно в то, что должно быть automatically set ?
Пробовать надо...
Кит на Artix получили, попробуем, наверно.
akorud
Я так понял, что
Цитата(Дмитрий Мазунин @ Jul 9 2013, 13:08) *
TCL поставит обратно в то, что должно быть automatically set ?

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.