Полная версия этой страницы:
математика с float
billidean
Aug 15 2014, 06:28
Добрый день всем.
Инструменты работы:
Циклон5Е, Квартус 13.0
Для реализации имеется некая формула, вернее набор последовательно вычисляемых формул, имеются операции умножения, деления, извлечение корня, и +,-,<>..
Аргументы при перемножении имеют довольно большие значения - до 200.000.000.
При делении делитель имеет довольно малое значение - порядка 1е-8.
Точности расчетов должны быть порядка 1е-8.
Исходя из таких аргументов я принял решение реализации на плав.точке, при этом приходится использовать ядра Альтеры для проведения всех необходимых операций вычислений.
Так вот, собственно, проблема в том, что эти ядра в кристалле занимают ОЧ.много ресурсов, и уже для расширения проекта приходится экономить на регистрах и памяти, и то места может и не хватить на будущее.
Имеются ли в природе модули, выполняющие мат.операции с плав.точкой, занимающие меньше места чем Альтеровские? Если да, то кто ими пользовался, что можете сказать о них?
Вариант перехода на фикс.точку я рассматривал, но при таком диапазоне аргументов и результатах вычислений у меня как-то не получилось это вытянуть.
"Аргументы при перемножении имеют довольно большие значения - до 200.000.000. "
А чему они равны до умножения ....?
Те если у меня после ацп данные 16 бит, потом операция скажем фильтрации 16 *16 бит - то они потом должны уже 2^32 - я в Вашей логике не ошибаюсь ?
Иначе Вам нужен при расчетах динамический диапазон 27 разрядов или 162 дБ. Космос ?
Сильно сомневаюсь что все выше написанное Вами правда, хотя .....
Операции с фикс. точкой 2^27 - все реально. Богатые на динамический дипазон заказчики должны ставить дорогие кристаллы.
billidean
Aug 15 2014, 06:56
Эти расчеты, точнее аргументы вычислений, никак не связаны с АЦП.
Диапазон входных аргументов для операций как раз и указан в первом посте (1е-8 ... 200.000.000).
Maverick
Aug 15 2014, 08:48
Цитата(billidean @ Aug 15 2014, 09:28)

Добрый день всем.
Для реализации имеется некая формула, вернее набор последовательно вычисляемых формул, имеются операции умножения, деления, извлечение корня, и +,-,<>..
Аргументы при перемножении имеют довольно большие значения - до 200.000.000.
При делении делитель имеет довольно малое значение - порядка 1е-8.
Точности расчетов должны быть порядка 1е-8.
Исходя из таких аргументов я принял решение реализации на плав.точке, при этом приходится использовать ядра Альтеры для проведения всех необходимых операций вычислений.
лучше попробуйте уточнить вопрос с точностью вычислений и алгоритмом вычислений с целью перехода целочисленное вычисления + переиспользование ресурсов
как вариант можно запустить NIOS - и там сделать все вычисления с флоатом...
какая скорость должна обеспечиваться?
Цитата(Maverick @ Aug 15 2014, 12:48)

как вариант можно запустить NIOS - и там сделать все вычисления с флоатом...
Ну тут это не вариант. Уж лучше ПЛИС поставить с Cortex-A (там NEON/VFP, а то и две штуки).
А плавучие инструкции NIOS + сам NIOS + софт для него будут однозначно больше, чем специализированный вычислитель, основанный на таком же float-блоке, что и в NIOS.
Maverick
Aug 15 2014, 09:09
Цитата(SM @ Aug 15 2014, 12:01)

Ну тут это не вариант. Уж лучше ПЛИС поставить с Cortex-A (там NEON/VFP, а то и две штуки).
А плавучие инструкции NIOS + сам NIOS + софт для него будут однозначно больше, чем специализированный вычислитель, основанный на таком же float-блоке, что и в NIOS.
что да, то да.
НО
billidean ничего не сказал про плис и я подумал, что плис без встроенного процессора и вариант о дополнительной/замене плис на более емкую не рассматривается, т.к. ТС спрашивает
Цитата
Исходя из таких аргументов я принял решение реализации на плав.точке, при этом приходится использовать ядра Альтеры для проведения всех необходимых операций вычислений.
Так вот, собственно, проблема в том, что эти ядра в кристалле занимают ОЧ.много ресурсов, и уже для расширения проекта приходится экономить на регистрах и памяти, и то места может и не хватить на будущее.
Имеются ли в природе модули, выполняющие мат.операции с плав.точкой, занимающие меньше места чем Альтеровские? Если да, то кто ими пользовался, что можете сказать о них?
Ну мало ли... Так, в порядке информации. Вдруг кому пригодится.
billidean
Aug 15 2014, 09:24
Про точности я писал:
Цитата
Точности расчетов должны быть порядка 1е-8.
ПЛИС - без АРМа.
Другая ПЛИС - этот вариант не рассматривается, нужно именно в этой.
Меня интересуют именно сторонние вычислительные модули с плав.точкой. Кто их использовал, где брали, как с ними обстоят дела....
Цитата(billidean @ Aug 15 2014, 13:24)

Меня интересуют именно сторонние вычислительные модули с плав.точкой. Кто их использовал, где брали, как с ними обстоят дела....
Я сам писал, с четко нужной мне разрядностью, и без излишеств IEEE. Экономия от альтеровских где то до 25-50% по площади, смотря в какую сторону оптимизировать и сколько тактов на операцию допускается. Там сложного то ничего нет - баррелевский сдвигатель, вычислитель экспоненты (тоже ускоренный, схема типа баррелевской, только как бы наоборот), сумматоры и умножители, все тривиальное. Деление и корень, если без них никак, тут уже чуток посложнее, через Ньютона-Рафсона. Но, в общем, тоже уровень "средней школы" HDL-проектирования, то есть + неделька к сроку.
Однако в виде отдельных IP их нету... Они просто в рамках проекта внутри него.
Maverick
Aug 15 2014, 09:56
Цитата(billidean @ Aug 15 2014, 12:24)

как Вы реализовали алгоритм?
с перераспределением ресурсов (последовательно или частично паралельно) или делали по возможности с максимальной степенью паралеллизации?
Сколько было использовано IP core?
Вопросы к чему, что максимальное распаралеливание вычислений требует чаще всего много ресурсов, может Вам стоит сделать реализацию последовательно-паралельную или вообще последовательную, при этом использовав минимально-необходимое количество IP core. Естественно, тогда упадет скорость обработки...
billidean
Aug 15 2014, 16:01
У меня используется по одному ядру на каждый тип операций (+,-,*,/,..).
Выполняется все последовательно-параллельно, т.е. однвременно выполняются только разнородные операции, например, одновременно провожу выполнение "*" и "+" и "-", и т.п.
Стараюсь ресурсов использовать по-минимуму.
Да, при таком подходе скорость обработки падает, но это все-таки не чисто последовательное вычисление, поэтому более-менее скорость устраивает.
Повторюсь, проблема в нехватке ресурсов для расширения проекта. Поэтому хочется уйти от этих "полновесных" Альтеровских ядер.
Кто-нибудь вообще использовал сторонние модули float-вычислений? Очень нужна инфа по ним.
goodsoul
Aug 19 2014, 06:13
немного не по теме, но вдруг на будущее пригодится: Altera Arria 10 содержит аппаратные floating point блоки. Т.е. в A10 теперь логика на плавучку расходоваться не будет.
billidean
Aug 19 2014, 06:19
Ура, конечно же, но мне это не поможет.
Enthusiast
Aug 27 2014, 14:53
Цитата(billidean @ Aug 15 2014, 10:28)

...
Вариант перехода на фикс.точку я рассматривал, но при таком диапазоне аргументов и результатах вычислений у меня как-то не получилось это вытянуть.
"Матлаб" пробовали? Разрядность целых чисел при переводе из дробных там осуществляется почти автоматически и точность вычислений можно будет оценить наглядно. К тому же умножители можно будет подобрать таким образом, чтобы повторно их использовать, если потребуется. На бумажке давно уже никто не считает.
Postoroniy_V
Aug 28 2014, 14:14
billidean
Aug 29 2014, 09:02
Цитата(Postoroniy_V @ Aug 28 2014, 18:14)

Пробовал симулировать, не получается, нужна библиотека
DWARE, которая вроде под какой-то платной лицензией. Да и делителя плав. я не увидел.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.