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

 
 
 
Reply to this topicStart new topic
> getfsl, не понимаю как собрать
xil-user
сообщение Jun 19 2014, 04:11
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 18-06-14
Пользователь №: 81 988



Добрый день. Достался мне унаследованный проект SoC на Xilinx. Весь софт построен на инструкциях getfsl и putfsl, и я никак не могу понять как его собрать.

В С-шном коде это выглядит так:
do {
getfslx(uart_busy, 9, 0);
} while(uart_busy & UART_BUSY);

функция getfslx - это макрос, определенный как
#define getfslx(val, id, unused) asm volatile ( "getfsl\t%0,"#id : "=d" (val) )

т.е. в итоге порождается ассемблерная инструкция:
getfsl $2,6

Проблема в том, что ни один ассемблер не знает инструкции getfsl. Предыдущие люди собирали с помощью gcc, но Makefile не оставили. Я уже попробовал и gcc и тот gcc, что в EDK у Xilinx, но ни один ассемблер такой инструкции не знает. Подскажите, как собрать?
Go to the top of the page
 
+Quote Post
Alex77
сообщение Jun 19 2014, 04:56
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(xil-user @ Jun 19 2014, 08:11) *
Добрый день. Достался мне унаследованный проект SoC на Xilinx. Весь софт построен на инструкциях getfsl и putfsl, и я никак не могу понять как его собрать.

В С-шном коде это выглядит так:
do {
getfslx(uart_busy, 9, 0);
} while(uart_busy & UART_BUSY);

функция getfslx - это макрос, определенный как
#define getfslx(val, id, unused) asm volatile ( "getfsl\t%0,"#id : "=d" (val) )

т.е. в итоге порождается ассемблерная инструкция:
getfsl $2,6

Проблема в том, что ни один ассемблер не знает инструкции getfsl. Предыдущие люди собирали с помощью gcc, но Makefile не оставили. Я уже попробовал и gcc и тот gcc, что в EDK у Xilinx, но ни один ассемблер такой инструкции не знает. Подскажите, как собрать?

"gcc, что в EDK у Xilinx " - обязан понимать. Это "родная" команда для MicroBlaze. и только родной компилятор/ассемблер понимает сеи команды. Возможно требуется указывать нужные опции при компиляции. Попробуйте собрать сей проект в родной среде EDK/XPS+ECLIPS (а не вручную).
Go to the top of the page
 
+Quote Post
xil-user
сообщение Jun 19 2014, 09:25
Сообщение #3





Группа: Новичок
Сообщений: 5
Регистрация: 18-06-14
Пользователь №: 81 988



Попробовал, сделал из проекта Makefile, там ничего необычного не было, просто вызов gcc:

/opt/Xilinx/14.7/ISE_DS/EDK/gnu/microblaze/lin/bin/mb-gcc -O2 -Wall -c -s -g -fno-pic main.c -o main.o
main.c: In function 'main':
main.c:15:51: warning: variable 'size' set but not used [-Wunused-but-set-variable]
main.c:15:37: warning: variable 'i' set but not used [-Wunused-but-set-variable]
/tmp/ccxdY0Ch.s: Assembler messages:
/tmp/ccxdY0Ch.s:34: Error: unknown opcode "getfsl"
make: *** [s_proc] Error 1

Никак не могу понять, чего же не так. Вроде и компилятор "родной".
Go to the top of the page
 
+Quote Post
Alex77
сообщение Jun 19 2014, 09:35
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(xil-user @ Jun 19 2014, 13:25) *
Попробовал, сделал из проекта Makefile, там ничего необычного не было, просто вызов gcc:

/opt/Xilinx/14.7/ISE_DS/EDK/gnu/microblaze/lin/bin/mb-gcc -O2 -Wall -c -s -g -fno-pic main.c -o main.o
Никак не могу понять, чего же не так. Вроде и компилятор "родной".

Кто "придумал" опции:
-O2 -Wall -c -s -g -fno-pic
???
Если это ВЫ сами придумали это одно, а если eclips - это другое.

Где опция -mcpu ???
Go to the top of the page
 
+Quote Post
xil-user
сообщение Jun 19 2014, 10:01
Сообщение #5





Группа: Новичок
Сообщений: 5
Регистрация: 18-06-14
Пользователь №: 81 988



Цитата(Alex77 @ Jun 19 2014, 13:35) *
Кто "придумал" опции:
-O2 -Wall -c -s -g -fno-pic
???
Если это ВЫ сами придумали это одно, а если eclips - это другое.


eclipse sm.gif Правда почему это так получилось, не знаю.

Убрал все лишние опции, результат тот же:
/share4s/cads/Xilinx/14.7/ISE_DS/EDK/gnu/microblaze/lin/bin/mb-gcc -c -mcpu=v8.50.b main.c -o main.o
/tmp/ccqynTjM.s: Assembler messages:
/tmp/ccqynTjM.s:33: Error: unknown opcode "getfsl"
make: *** [s_proc] Error 1

Сам компилятор про себя говорит:
[serg@microblaze]$ mb-gcc -v
Using built-in specs.
COLLECT_GCC=mb-gcc
COLLECT_LTO_WRAPPER=/share4s/cads/Xilinx/14.7/ISE_DS/EDK/gnu/microblaze/lin/bin/../libexec/gcc/microblaze-xilinx-elf/4.6.4/lto-wrapper
Target: microblaze-xilinx-elf
Configured with: /wrk/ptx/users/nagaraju/GCC_2013_03/gcc/configure --with-gmp=/proj/epdsw/gnu/mb_gnu/libs --with-mpfr=/proj/epdsw/gnu/mb_gnu/libs --with-mpc=/proj/epdsw/gnu/mb_gnu/libs --with-ppl=no --with-cloog=no --target=microblaze-xilinx-elf --prefix=/gnu/mb_gnu/gnu/microblaze/lin --program-prefix=mb- --disable-nls CFLAGS_FOR_TARGET=-O2 CFLAGS_FOR_BUILD=-O2 --with-newlib --disable-lto --enable-languages=c,c++ --enable-multilib --disable-libquadmath --with-sysroot=/gnu/mb_gnu/gnu/microblaze/lin/microblaze-xilinx-elf
Thread model: single
gcc version 4.6.4 20120924 (Xilinx 14.1 Build EDK_P.13 28 Sep 2013) (GCC)
Go to the top of the page
 
+Quote Post
Alex77
сообщение Jun 19 2014, 10:17
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(xil-user @ Jun 19 2014, 14:01) *
eclipse sm.gif Правда почему это так получилось, не знаю.

Убрал все лишние опции, результат тот же:
/share4s/cads/Xilinx/14.7/ISE_DS/EDK/gnu/microblaze/lin/bin/mb-gcc -c -mcpu=v8.50.b main.c -o main.o
/tmp/ccqynTjM.s: Assembler messages:
/tmp/ccqynTjM.s:33: Error: unknown opcode "getfsl"
make: *** [s_proc] Error 1

Сам компилятор про себя говорит:
[serg@microblaze]$ mb-gcc -v
Using built-in specs.
COLLECT_GCC=mb-gcc
COLLECT_LTO_WRAPPER=/share4s/cads/Xilinx/14.7/ISE_DS/EDK/gnu/microblaze/lin/bin/../libexec/gcc/microblaze-xilinx-elf/4.6.4/lto-wrapper
Target: microblaze-xilinx-elf
Configured with: /wrk/ptx/users/nagaraju/GCC_2013_03/gcc/configure --with-gmp=/proj/epdsw/gnu/mb_gnu/libs --with-mpfr=/proj/epdsw/gnu/mb_gnu/libs --with-mpc=/proj/epdsw/gnu/mb_gnu/libs --with-ppl=no --with-cloog=no --target=microblaze-xilinx-elf --prefix=/gnu/mb_gnu/gnu/microblaze/lin --program-prefix=mb- --disable-nls CFLAGS_FOR_TARGET=-O2 CFLAGS_FOR_BUILD=-O2 --with-newlib --disable-lto --enable-languages=c,c++ --enable-multilib --disable-libquadmath --with-sysroot=/gnu/mb_gnu/gnu/microblaze/lin/microblaze-xilinx-elf
Thread model: single
gcc version 4.6.4 20120924 (Xilinx 14.1 Build EDK_P.13 28 Sep 2013) (GCC)

Демо пример в студию. (main.c)
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jun 19 2014, 12:50
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 xil-user
На счёт getfsl - такого опкода нет, но есть get - а вот он как раз может получать данные или контрол с FSL линка ( rfsl0, rfsl1, ... rfsl15 ).
Возможно ваши товарищи специально переназвали команду где то - не силён в Makefile.
Go to the top of the page
 
+Quote Post
xil-user
сообщение Jun 19 2014, 13:57
Сообщение #8





Группа: Новичок
Сообщений: 5
Регистрация: 18-06-14
Пользователь №: 81 988



Еще одна попытка:

генерируем из всего набора исходников единый ассемблерный файл:
$ mb-gcc -c -mcpu=v8.50.b main.c -S -o main.S

запускаем штатный ассемблер:
$ mb-as main.S
main.S: Assembler messages:
main.S:33: Error: unknown opcode "getfsl"

$ mb-as -v
GNU assembler version 2.23.2 (microblaze-xilinx-elf) using BFD version (GNU Binutils) 2.23.2.20130707

Сообщение отредактировал xil-user - Jun 19 2014, 13:58
Go to the top of the page
 
+Quote Post
Alex77
сообщение Jun 20 2014, 05:34
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(xil-user @ Jun 19 2014, 17:57) *
Еще одна попытка:

генерируем из всего набора исходников единый ассемблерный файл:
$ mb-gcc -c -mcpu=v8.50.b main.c -S -o main.S

запускаем штатный ассемблер:
$ mb-as main.S
main.S: Assembler messages:
main.S:33: Error: unknown opcode "getfsl"

$ mb-as -v
GNU assembler version 2.23.2 (microblaze-xilinx-elf) using BFD version (GNU Binutils) 2.23.2.20130707


Дано:
ISE 12.4
gcc version 4.1.2 20070214 (Xilinx 12.3 Build EDK_MS3.66 15 Jul 2010)
GNU assembler version 2.16 (microblaze-xilinx-elf) using BFD version 2.16
Демо пример если прямо указать асм-команду:

asm volatile(" neaget r2, rfsl0" );

Компилится.



Проблема в использовании макросов из файла "fsl.h"
#define getfslx(val, id, flags) asm volatile (stringify(flags) "get\t%0,rfsl" stringify(id) : "=d" (val))

толи компилятор глючный -толи макрос кривой толи ещё что... разбираться лень.
Go to the top of the page
 
+Quote Post
xil-user
сообщение Jun 20 2014, 14:29
Сообщение #10





Группа: Новичок
Сообщений: 5
Регистрация: 18-06-14
Пользователь №: 81 988



Да, действительно, если заменить определение getfsl и putfsl на:
#define putfsl(val, id) asm volatile ("put\t%0,rfsl" stringify(id) :: "d" (val))
#define getfsl(val, id) asm volatile ("get\t%0,rfsl" stringify(id) : "=d" (val))

то компилируется. Как же оно собиралось раньше я так и не понял... Но это уже что-то.

Спасибо, парни.
Go to the top of the page
 
+Quote Post
Alex77
сообщение Jun 20 2014, 16:28
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 295
Регистрация: 2-12-05
Пользователь №: 11 695



Цитата(xil-user @ Jun 20 2014, 18:29) *
Да, действительно, если заменить определение getfsl и putfsl на:
#define putfsl(val, id) asm volatile ("put\t%0,rfsl" stringify(id) :: "d" (val))
#define getfsl(val, id) asm volatile ("get\t%0,rfsl" stringify(id) : "=d" (val))

то компилируется. Как же оно собиралось раньше я так и не понял... Но это уже что-то.

Спасибо, парни.

Есть пару моментов: Есть ещё понятие ФЛАГИ (типа "атомарность исполнения") задаются грубо говоря буквами перед put и get. Читайте описание этих команд в документации на процессор.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 07:55
Рейтинг@Mail.ru


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