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

 
 
> Помогите с 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



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

 


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


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