Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос про деление
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
prom
Возникла необходимость делить одно число на другое. ISE упорно ругается, что числа должны быть степенью 2. Подскажите, гуру, как реализовать (желательно меньшей кровью) деление с получением целой и дробной части (дробной до любого знака)... Пока сижу пыхчу сам smile3046.gif

Заранее спс
DmitryR
На www.opencores.org есть некоторое количество готовых делителей. Можно еще в интернет поискать по ключевому слову radix2.
acex2
Цитата(prom @ Mar 3 2005, 12:35)
Возникла необходимость делить одно число на другое. ISE упорно ругается, что числа должны быть степенью 2. Подскажите, гуру, как реализовать (желательно меньшей кровью) деление с получением целой и дробной части (дробной до любого знака)... Пока сижу пыхчу сам  smile3046.gif


Правильно ругается - все синтезаторы поддерживают только деление на степень 2, хотя в самом VHDL (Verilog) ограничений на делитель нет. Надо или самому писать (могу приаттачить соответствующую главу из книги "Computer Arithmetic: Algorithms and Hardware Design"), или, если у вас стандартное представление вещественных чисел, использовать готовую библиотеку, например fpuvhdl c opencores.
prom
Цитата(acex2 @ Mar 3 2005, 19:14)
...могу приаттачить соответствующую главу из книги "Computer Arithmetic: Algorithms and Hardware Design"), или, если у вас стандартное представление вещественных чисел, использовать готовую библиотеку, например fpuvhdl c opencores.
*


если не затруднит, приаттачте! спасибо
acex2
Цитата(prom @ Mar 3 2005, 13:44)
Цитата(acex2 @ Mar 3 2005, 19:14)
...могу приаттачить соответствующую главу из книги "Computer Arithmetic: Algorithms and Hardware Design"), или, если у вас стандартное представление вещественных чисел, использовать готовую библиотеку, например fpuvhdl c opencores.
*


если не затруднит, приаттачте! спасибо
*



Залил все главы про различные методы деления (главы 13-16) на местный FTP в /upload/DOC/Computer Arithmetic/. Полная книжка пробегала на электроде. Там 27 Мб, залью как-нибудь остальное на FTP.
Esquire
Цитата
Там 27 Мб, залью как-нибудь остальное на FTP.

Заливай, интересно wink.gif .
ministrel
Залил все главы про различные методы деления (главы 13-16) на местный FTP в /upload/DOC/Computer Arithmetic/. Полная книжка пробегала на электроде. Там 27 Мб, залью как-нибудь остальное на FTP.
*

[/quote]

А у меня нет доступа к FTP может ещё где есть инфа по делению на ПЛИС?
acex2
Цитата(ministrel @ Mar 4 2005, 08:52)
А у меня нет доступа к FTP может ещё где есть инфа по делению на ПЛИС?


А вы вот здесь диссертации посмотрите - там очень хорошие обзоры с алгоритмами идут: http://arith.stanford.edu/phds.html
Еще поищите их отчет 1997 года "Modern Research in Computer Arithmetic" - там целая глава было про деление.
ministrel
Цитата(acex2 @ Mar 4 2005, 16:02)
Цитата(ministrel @ Mar 4 2005, 08:52)
А у меня нет доступа к FTP может ещё где есть инфа по делению на ПЛИС?


А вы вот здесь диссертации посмотрите - там очень хорошие обзоры с алгоритмами идут: http://arith.stanford.edu/phds.html
Еще поищите их отчет 1997 года "Modern Research in Computer Arithmetic" - там целая глава было про деление.
*



Спасибо!
alex_elect
К acex2
А не могли бы Вы туда же залить Part VI: Function Evaluation (Гл.21-24) из той же книги ( "Computer Arithmetic: Algorithms and Hardware Design")
acex2
Цитата(alex_elect @ Mar 5 2005, 11:24)
К acex2
А не могли бы Вы туда же залить Part VI: Function Evaluation (Гл.21-24) из той же книги ( "Computer Arithmetic: Algorithms and Hardware Design")


Я сейчас как раз перегоняю всю книгу в .djvu - она должна поменьше раза в 3 получиться. Все-таки 9 мегабайт - не 27 wink.gif
Постарюсь на этих выходных все залить.
acex2
Надоело возиться с глюками DocumentExpress, поэтому залил в ту же папку всю книгу в формате pdf.
belena7
[quote=prom,Mar 3 2005, 18:35]
Возникла необходимость делить одно число на другое. ISE упорно ругается, что числа должны быть степенью 2. Подскажите, гуру, как реализовать (желательно меньшей кровью) деление с получением целой и дробной части (дробной до любого знака)... Пока сижу пыхчу сам smile3046.gif

ya ispol'zuyu serial'niy delitel'(t.e. takt na bit ratio) esli sakjesh' 4to nujno polu4it' mogu pomo4'
Wilde
Можно умножить на A и разделить на B. где B- степень двойки,
B/A ~=необходимому делителю. Если особо точность не требуется можно так сделать.
acex2
Цитата(Wilde @ Mar 18 2005, 15:34)
Можно умножить на A и разделить на B. где B- степень двойки,
B/A ~=необходимому делителю. Если особо точность не требуется можно так сделать.


Такой метод с ограничениями подходит только для деления на константу. А переменную на переменную не разделишь, так как вычисление В/А тоже требует деления.
prom
Цитата(belena7 @ Mar 17 2005, 12:04)
ya ispol'zuyu serial'niy delitel'(t.e. takt na bit ratio) esli sakjesh' 4to nujno polu4it' mogu pomo4'


очень интересно... у меня после 2-х дней мучений получилось делить на ядре ISE (pipelined divider). При этом максимальное к-во тактов на деление получилось 8 (там можно только 1-2-4-8). При этом дивайдер (integer remainder, unsigned ) использует порядка 600 слайсов, что многовато (при 1 такте почти весь спартан 3 скушал blink.gif ).

Вообще читал алгоритмы деления и удивлялся - все сводится к умножению и вычитанию - откуда такие дикие размеры.

В моей задаче скорость деления вообще не критична (хоть 1000 тактов) - так что Вашей идеей заинтересован. Поясню что надо:

Число (32 бита) делится на переменную (которая храниться в регистре и может меняться). Результат деления необходим до 1-го десятичного знака (кстати будет интересно алгоритм floating point).

Как реализовал пока сам:
1. берем число и делим
2. запоминаем quotient
3. remainder умножаем на 10
4. делим рез-т на начальный дивизор
5. quotient2 прибавляем к п.2
получаем таким образом результат деления с точностью до 1 десятой
если дальше, то надо повторять до позеленения...

При этом плохо, что я не предусмотрел возможность переполнения. Т.е. пусть dividend изначально равен 2^33-1. Тогда максимальный quotient будет = dividend-1. При этом использовать дивайдер 32 на 32 бита глупо. Если я не ошибаюсь на FP процах все реализуется через 8-ми битные делители. Поправьте, коли не так...

Короче продолжаем дебаты )))
Всем спс за внимание
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.