daemonDX 0 20 апреля, 2006 Опубликовано 20 апреля, 2006 · Жалоба Это пример реализации последовательного деления с 24-битным делимым, 12-битным делителем, и 12-битным частным. Результат получается через 12 тактов после подачи делимого/делителя, что индицируется подачей сигнала we == 1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RUNVoVaN 0 20 апреля, 2006 Опубликовано 20 апреля, 2006 · Жалоба Случаем никто не пробовал запустить реализацию? У меня ругается на строчку main: process (Rst,Clk)\ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oval 0 20 апреля, 2006 Опубликовано 20 апреля, 2006 · Жалоба Случаем никто не пробовал запустить реализацию? У меня ругается на строчку main: process (Rst,Clk)\ Запускать не пробовал, но могу сказать, что ругаться точно будет :) В указанной строчке последний символ "\" надо удалить ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
std-logic 0 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба Подскажите пожалуйста, может кто-нибудь сталкивался с реализацией делителя на константу. Конкретно - необходимо делить 8-ми (в перспективе до 16) разрядные значения на 3, на 5, на 7 (и желательно общий случай - на Х). Деление не конвеерное - в одном такте!! Критично быстродействие (минимальное кол-во уровней логики при синтезе), но и ресурсы тоже важны. Был бы рад коду на VHDL , ну или хотя бы детальному алгоритму (к сожалению сейчас нет времени самому велосипед изобретать :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_mirgorodsky 0 23 апреля, 2007 Опубликовано 23 апреля, 2007 · Жалоба Ежли делить будете на ограниченное количество фиксировааных чисел, то деление лучше заменить умножением на обратное. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
std-logic 0 24 апреля, 2007 Опубликовано 24 апреля, 2007 · Жалоба Ежли делить будете на ограниченное количество фиксировааных чисел, то деление лучше заменить умножением на обратное. Есть маленькая проблемка: Например делим на 3 или, что тоже самое, умножаем на 1/3 или 0.01010101010101.... в двоичном коде. Если например делим 63 ("111111") - получим 10100.1111111..... т.е 20.9999999.... вместо 21. Как разрулить такую ситуацию. Просто округлять нельзя - целочисленное деление подразумевает отбрасывание остатка, а если отбросить в данном случае - будет неправильно... И еще - на каком разряде при умножении (бесконечная дробь!) можно остановиться - интересует общий случай для произвольных разрядности и делителя? Подскажите, где почитать по деталям реализации таких делителей? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
v_mirgorodsky 0 24 апреля, 2007 Опубликовано 24 апреля, 2007 · Жалоба Почитать можно у Уорена младшего - Алгоритмические трюки для программистов. Там более-менее все расписано для 32 битной арифметики. А из собственного опыта - необходимо просто проверить весь диапазон входных чисел на соответствие результатов умножения на обратное результатам деления и все. Если результат не соответствует - просто увеличить разрядную сетку для обратного. BTW, вычисление обратного для случая нормирования в 16-ти разрядной сетке: reciprocal = 65536 / divisor + 1. Без "+1" результат получается неправильным для большинства частных. В результате имеем: A / divisor = A * reciprocal / 65536 = (A * reciprocal) >> 16. При такой замене результат получается точным если A в диапазоне 0..2048 и divisor в диапазоне 1..64. Возможно, я заузил поле точных результатов, просто шире проверять необходимости не было. Хочу еще обратить внимание на такой пустячок - числа должны быть положительными. Для работы с отрицательными числами надо использовать особые премудрости. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 4 3 мая, 2007 Опубликовано 3 мая, 2007 · Жалоба письмо получил, все 4 файла в архиве лежат здесь http://rapidshare.de/files/18390856/divider.rar.html фтп еще не поднялся, как поднимется выложу 2 Волощенко Бальшой пасиб :cheers: не пашет ссылка (( выложили бы куда-нить снова или где эти доки могут на фтп лежать? // ==================================== такая вот задачка: деление служит для некоей нормализации выходных значений (нечто вроде АРУ, но АРУ - инерционная система). не задумывался ли кто для таких задач (где важна не точность, а чтобы конечный результат вычислений в алгоритме не выскочил за разрядную сетку (ну, условно)) использовать вычисление 1/x через кусочно-линейную аппроксимацию, как например сделано в стандарте G.711 для вычисления логарифма ? по ресурсам весьма компактно вроде бы получается.. (если сверхъточностью пренебречь) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alvol 0 7 мая, 2007 Опубликовано 7 мая, 2007 · Жалоба ...выложили бы куда-нить снова... Все фото на описание матричного делителя в прикрепленных файлах многотомного архива... Пишу через ник сына, потому как мой ник Волощенко почему-то заблокирован... 2.part1.rar 2.part2.rar 2.part3.rar 2.part4.rar 2.part5.rar 2.part6.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
std-logic 0 8 мая, 2007 Опубликовано 8 мая, 2007 · Жалоба Ваш пример никак не связан с точностью способа деления. например, можно напрямую целочисленно делить 29 на 10 , и получиться 2, в предельном случае единица младшего разряда все равно теряется. Вообще из простых способов деления умнажение на обратное наиболее эффективно. Собственно, если 29 делить на 10 и получить 2 - то это правильно (деление ведь целочисленное). А в целом с проблемой я разобрался, всем спасибо за советы, особенно за книжку Уорена младшего - Алгоритмические трюки для программистов. Если имеешь дело с целочисленной математикой - эта книга, на мой взгляд, должна быть настольной. :a14: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться