Перейти к содержанию
    

Это пример реализации последовательного деления с 24-битным делимым, 12-битным делителем, и 12-битным частным. Результат получается через 12 тактов после подачи делимого/делителя, что индицируется подачей сигнала we == 1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Случаем никто не пробовал запустить реализацию?

У меня ругается на строчку main: process (Rst,Clk)\

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Случаем никто не пробовал запустить реализацию?

У меня ругается на строчку main: process (Rst,Clk)\

Запускать не пробовал, но могу сказать, что ругаться точно будет :) В указанной строчке последний символ "\" надо удалить ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите пожалуйста, может кто-нибудь сталкивался с реализацией делителя на константу. Конкретно - необходимо делить 8-ми (в перспективе до 16) разрядные значения на 3, на 5, на 7 (и желательно общий случай - на Х). Деление не конвеерное - в одном такте!! Критично быстродействие (минимальное кол-во уровней логики при синтезе), но и ресурсы тоже важны.

 

Был бы рад коду на VHDL , ну или хотя бы детальному алгоритму (к сожалению сейчас нет времени самому велосипед изобретать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ежли делить будете на ограниченное количество фиксировааных чисел, то деление лучше заменить умножением на обратное.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ежли делить будете на ограниченное количество фиксировааных чисел, то деление лучше заменить умножением на обратное.

 

Есть маленькая проблемка:

Например делим на 3 или, что тоже самое, умножаем на 1/3 или 0.01010101010101.... в двоичном коде. Если например делим 63 ("111111") - получим 10100.1111111..... т.е 20.9999999.... вместо 21. Как разрулить такую ситуацию. Просто округлять нельзя - целочисленное деление подразумевает отбрасывание остатка, а если отбросить в данном случае - будет неправильно...

И еще - на каком разряде при умножении (бесконечная дробь!) можно остановиться - интересует общий случай для произвольных разрядности и делителя?

Подскажите, где почитать по деталям реализации таких делителей?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитать можно у Уорена младшего - Алгоритмические трюки для программистов. Там более-менее все расписано для 32 битной арифметики. А из собственного опыта - необходимо просто проверить весь диапазон входных чисел на соответствие результатов умножения на обратное результатам деления и все. Если результат не соответствует - просто увеличить разрядную сетку для обратного.

 

BTW, вычисление обратного для случая нормирования в 16-ти разрядной сетке: reciprocal = 65536 / divisor + 1. Без "+1" результат получается неправильным для большинства частных. В результате имеем: A / divisor = A * reciprocal / 65536 = (A * reciprocal) >> 16. При такой замене результат получается точным если A в диапазоне 0..2048 и divisor в диапазоне 1..64. Возможно, я заузил поле точных результатов, просто шире проверять необходимости не было. Хочу еще обратить внимание на такой пустячок - числа должны быть положительными. Для работы с отрицательными числами надо использовать особые премудрости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

письмо получил, все 4 файла в архиве лежат здесь

http://rapidshare.de/files/18390856/divider.rar.html

фтп еще не поднялся, как поднимется выложу

2 Волощенко Бальшой пасиб :cheers:

не пашет ссылка ((

выложили бы куда-нить снова

или где эти доки могут на фтп лежать?

 

 

 

 

// ====================================

 

такая вот задачка: деление служит для некоей нормализации выходных значений (нечто вроде АРУ, но АРУ - инерционная система).

 

не задумывался ли кто для таких задач (где важна не точность, а чтобы конечный результат вычислений в алгоритме не выскочил за разрядную сетку (ну, условно)) использовать вычисление 1/x через кусочно-линейную аппроксимацию, как например сделано в стандарте G.711 для вычисления логарифма ?

по ресурсам весьма компактно вроде бы получается..

(если сверхъточностью пренебречь)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...выложили бы куда-нить снова...

Все фото на описание матричного делителя в прикрепленных файлах многотомного архива...

 

 

Пишу через ник сына, потому как мой ник Волощенко почему-то заблокирован...

2.part1.rar

2.part2.rar

2.part3.rar

2.part4.rar

2.part5.rar

2.part6.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваш пример никак не связан с точностью способа деления. например, можно напрямую целочисленно делить 29 на 10 , и получиться 2, в предельном случае единица младшего разряда все равно теряется. Вообще из простых способов деления умнажение на обратное наиболее эффективно.

 

Собственно, если 29 делить на 10 и получить 2 - то это правильно (деление ведь целочисленное).

 

А в целом с проблемой я разобрался, всем спасибо за советы, особенно за книжку Уорена младшего - Алгоритмические трюки для программистов.

Если имеешь дело с целочисленной математикой - эта книга, на мой взгляд, должна быть настольной.

:a14:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...