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

 
 
> Помогите с 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
Ответов
vadimuzzz
сообщение May 13 2013, 01:06
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



выложил пример проекта для c3-starter. вот кусок objdump:
CODE

#include <stdio.h>

int main()
{
20001fc: defff404 addi sp,sp,-48
2000200: dfc00b15 stw ra,44(sp)
2000204: df000a15 stw fp,40(sp)
2000208: dcc00915 stw r19,36(sp)
200020c: dc800815 stw r18,32(sp)
2000210: dc400715 stw r17,28(sp)
2000214: dc000615 stw r16,24(sp)
2000218: df000604 addi fp,sp,24
float a, b, c;
printf("Hello from Nios II from Starter Kit!\n");
200021c: 01008074 movhi r4,513
2000220: 213af004 addi r4,r4,-5184
2000224: 20008240 call 2000824 <puts>
a = 1.6;
2000228: 008ff374 movhi r2,16333
200022c: 10b33344 addi r2,r2,-13107
2000230: e0bfff15 stw r2,-4(fp)
b = 2.5;
2000234: 00900834 movhi r2,16416
2000238: e0bffe15 stw r2,-8(fp)
c = a*b;
200023c: e0ffff17 ldw r3,-4(fp)
2000240: e0bffe17 ldw r2,-8(fp)
2000244: 1885ff32 custom 252,r2,r3,r2
2000248: e0bffd15 stw r2,-12(fp)
printf("%1.3e * %1.3e = %1.3e\n", a, b, c);

custom 252 - это обращение к fpu.
Прикрепленные файлы
Прикрепленный файл  nios_starter_11_0.1.7z ( 1.93 мегабайт ) Кол-во скачиваний: 5
 
Go to the top of the page
 
+Quote Post



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

 


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


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