Здравствуйте.
Работаю на ките Стратикса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 - стало даже хуже
Что не так с моей системой? Или все должно быть так?
И можно ли в обработчик прерываний совать плавающую математику?
Есть мысль вообще использовать внешний компонент "умножитель", тогда пересылки по Авалону туда/сюда
займут тактов 30-40, вычисление на "умножителе" - тактов 5-6, ИТОГО выигрыш в 6-7 раз.