Полная версия этой страницы:
Квадратный корень на ПЛИС
1Sergey1
Feb 29 2008, 15:03
Здравствуйте.
Кто-нибудь знает, как выполнить операцию квадратного корня на ПЛИС(алгоритмы и т.д.)? Существуют ли бесплатные работающие мегафункции этой процедуры?
yuri_d
Feb 29 2008, 15:09
У Xilinx есть Cordic. Одна из функций - извлечение квадратного корня.
Поищите в сети по этому имени. Алгоритм не сложный.
DmitryR
Feb 29 2008, 15:14
Называется CORDIC в общем случае, у Xilinx и Altera есть корки бесплатные, на OpenCores есть пара платформенно-независимых.
А у меня программист поступил ваабще просто. Возвести в квадрат же намного проще, чем корень сделать, если на борту куча умножителей. Вот он и сделал простенький итерационный алгоритм типа такого
max=x;
min=0;
precision=x*0.000001;
while ((max-min)>precision)
{
mid=(max+min)/2;
mid_2=mid*mid;
if (mid_2 > x) max=mid;
else min=mid;
}
return min;
Рабоает медленно, но надежно. В ПЛИСине его тоже реализовать я думаю не сложно.
BSACPLD
Feb 29 2008, 18:41
// s = sqrt( a ), результат N бит за N тактов:
for( s = 0, b = 2 << (2*N - 2), i = 0; i < N; i ++ ){
c = a - ( s | b );
s >>= 1;
if ( c >= 0 ) { a = c; s = s | b };
b >>= 2;
}
Цитата(1Sergey1 @ Feb 29 2008, 17:03)

Кто-нибудь знает, как выполнить операцию квадратного корня на ПЛИС(алгоритмы и т.д.)? Существуют ли бесплатные работающие мегафункции этой процедуры?
Могу порекоммендовать мануал по технологии 3Dnow! (ищите на www.amd.com)
Там сначала по таблице берется первое приближение, а потом всего двумя итерациями ньютона-рафсона догоняется до одинарной точности. эта процедура дает 1/sqrt(x) (что на самом деле обычно и требуется), а потом если надо умножай на x (чтобы получить sqrt(x)) или возводи в квадрат (чтобы получить 1/x). В общем штука универсальная.
Цитата(1Sergey1 @ Feb 29 2008, 17:03)

Здравствуйте.
Кто-нибудь знает, как выполнить операцию квадратного корня на ПЛИС(алгоритмы и т.д.)? Существуют ли бесплатные работающие мегафункции этой процедуры?
Относительно кордика - хорошая мурзилка лежит тут:
http://andraka.com/files/crdcsrvy.pdfдве реализации были на опенкорах
Волощенко
Mar 2 2008, 14:04
Можно также построить матричное устройство на основе алгоритма извлечения квадратного корня без восстановления остатка. В приложении мое авторское свидетельство 1260951. Помимо прочего, оно имеет очень большое быстродействие.
eugen_pcad_ru
Mar 3 2008, 06:08
Цитата(syoma @ Feb 29 2008, 20:21)

В ПЛИСине его тоже реализовать я думаю не сложно.
Думаю что всё-таки сложнее чем взять готовый

.
2SAR
Есть Cordic на Altera, могу выслать. Куда?
А в MegaWizard-e функция ALTSQRT что делает?
2 eugen_pcad_ru - если не жалко, то вышлите есчё на
kuzma_@ua.fm
Спасибо.
Цитата(slog @ Mar 3 2008, 10:01)

А в MegaWizard-e функция ALTSQRT что делает?
Не поверите, именно sqrt и делает. Использовал в одном проекте, все работало.
Цитата(eugen_pcad_ru @ Mar 3 2008, 08:08)

Думаю что всё-таки сложнее чем взять готовый

.
Да, я понимаю, но когда попробывал Cordic для 1/х, он у меня сожрал столько ресурсов, что пришлось друго решение искать.
Цитата(RHnd @ Mar 3 2008, 19:13)

Не поверите, именно sqrt и делает. Использовал в одном проекте, все работало.
Да я то верю.
Интересно просто, зачем тут всю страницу исписали?
1Sergey1
Mar 5 2008, 06:45
Цитата(eugen_pcad_ru @ Mar 3 2008, 09:08)

Думаю что всё-таки сложнее чем взять готовый

.
2SAR
Есть Cordic на Altera, могу выслать. Куда?
Если не сложно вышлите, пожалуйста, на umeza@rambler.ru
Maverick
Mar 5 2008, 08:16
Цитата(1Sergey1 @ Mar 5 2008, 10:45)

Если не сложно вышлите, пожалуйста, на umeza@rambler.ru
и пожалуйста на maildenisov@gmail.com Заранее благодарен!
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.