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

 
 
> Помогите с NIOS+float, длительное выполнение инструкций
billidean
сообщение Apr 30 2013, 03:22
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Здравствуйте.
Работаю на ките Стратикса4, Квартус11.1.
Недавно столкнулся с такой проблемой:
1. создал в квартусе qSys-систему:
Прикрепленное изображение

2. в настройках НИОСа выставил галочку "Hardware divide":
Прикрепленное изображение

3. в настройках BSP проекта выставил три галочки:
Прикрепленное изображение

4. флаги в файле public.mk у меня генерятся следующие:
Прикрепленное изображение

5. в коде обработчика прерывания имеется следующие строки:
Код
            а.) temp_U = IORD(F1_BASE_ADDRESS, F1_ADDR_U);
            б.) f1_array_u[f1_index_u] = temp_U;
            в.) temp_F = (float)(temp_U) * f1_3_3A_8_calc_coeff_1;
            г.) f1_array_u_float[f1_index_u_float] = temp_F;
            д.) IOWR(DATA_MODULE_BASE, 3003, 1);

6. по СигналТапку отслеживаю сигналы на шине Авалон.

Проблема в следующем:
от Авалоновской пересылки в строке а.) до пересылки в строке д.) насчитывается до 300 тактов.
НИОС и СигналТап тактируются частотой 50МГц.

Пробовал менять флаги вместо 60-1 ставил 60-2 - стало даже хуже 05.gif

Что не так с моей системой? Или все должно быть так?
И можно ли в обработчик прерываний совать плавающую математику?

Есть мысль вообще использовать внешний компонент "умножитель", тогда пересылки по Авалону туда/сюда
займут тактов 30-40, вычисление на "умножителе" - тактов 5-6, ИТОГО выигрыш в 6-7 раз.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
billidean
сообщение May 7 2013, 04:10
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 247
Регистрация: 4-10-10
Из: г. Екатеринбург
Пользователь №: 59 925



Цитата(vadimuzzz @ Apr 30 2013, 14:12) *
objdump в студию.

Извиняюсь за такую длительную паузу.
Вот часть из файла .objdump:
Код
    //-------------------------------------------------------------
    temp_U = IORD(F1_3_3A_8_BASE_ADDRESS, F1_3_3A_8_ADDRMAP_U_LPF_0);
   413ac:    00800234     movhi    r2,8
   413b0:    10945404     addi    r2,r2,20816
   413b4:    10800037     ldwio    r2,0(r2)
   413b8:    e0bffd15     stw    r2,-12(fp)
    f1_3_3A_8_array_u_lp_0[f1_3_3A_8_index_u_lpf] = temp_U;
   413bc:    d0a6c517     ldw    r2,-25836(gp)
   413c0:    00c00174     movhi    r3,5
   413c4:    18df4804     addi    r3,r3,32032
   413c8:    1085883a     add    r2,r2,r2
   413cc:    1085883a     add    r2,r2,r2
   413d0:    10c7883a     add    r3,r2,r3
   413d4:    e0bffd17     ldw    r2,-12(fp)
   413d8:    18800015     stw    r2,0(r3)
    temp_F = (float)(temp_U) * f1_3_3A_8_calc_coeff_0;
   413dc:    e13ffd17     ldw    r4,-12(fp)
   413e0:    00421540     call    42154 <__floatsisf>
   413e4:    1007883a     mov    r3,r2
   413e8:    d0a6c717     ldw    r2,-25828(gp)
   413ec:    1885ff32     custom    252,r2,r3,r2
   413f0:    e0bffc15     stw    r2,-16(fp)
    f1_3_3A_8_array_u_lpf_0[f1_3_3A_8_index_u_lpf] = temp_F;
   413f4:    d0a6c517     ldw    r2,-25836(gp)
   413f8:    00c00174     movhi    r3,5
   413fc:    18ddb804     addi    r3,r3,30432
   41400:    1085883a     add    r2,r2,r2
   41404:    1085883a     add    r2,r2,r2
   41408:    10c7883a     add    r3,r2,r3
   4140c:    e0bffc17     ldw    r2,-16(fp)
   41410:    18800015     stw    r2,0(r3)

    IOWR(DATA_MODULE_F1_3_3A_8_0_BASE, 3003, 0);
   41414:    00800234     movhi    r2,8
   41418:    108bbb04     addi    r2,r2,12012
   4141c:    10000035     stwio    zero,0(r2)
    //-------------------------------------------------------------

для кода:


Сообщение отредактировал billidean - May 7 2013, 04:12
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 23:23
Рейтинг@Mail.ru


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