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

Как правильно в плис делить

Как правильно в плис делить, очень медленная операция, на высокой частоте появляются слаки. Если сдвигом то можно поделить на 2 4 8 16.... а если нужно поделить на 9 или 5?

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


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

Мне вот если делители известны заранее нравится умножать делимое на (2^n/делитель), а затем полученное число делить на 2^n. Можно даже составить таблицу соответствия делитель--множитель.

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


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

Делить правильно делителем.

Видов делителей великое множество, надо реализовать один из них и все.

 

Самый простой реализует метод деления столбиком.

Делитель двигаете максимально вправо, сравниваете со старшей частью делимого, если оно больше 1 и вычитаете делитель, остаток сносите, если нет 0, и просто сносите остаток, сдвигаете делитель и так далее...

 

а можно так

 

reg [15:0] A;
reg [15:0] B;
reg [15:0] C;

always...
C <= A/B;

 

и посмотреть вдруг то что придумает синтезатор вас устроит:)

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


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

Вариантов много, но нужно еще и быстрый.

То что синтезатор сделал по времени не проходит слаки появляются.

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


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

А что если задействовать аппаратный делитель? У Альтеры его можно конвейеризировать, устанавливая параметр pipeline. С Ксайлинксами не работал, но подозреваю, что там тоже есть что-то подобное. По идее, при увеличении ступеней максимальная частота тоже должна рости. Но это если Ваш алгоритм допускает конвейеризацию данных.

 

Вернее, не аппаратный, а библиотечный. Прошу прощения за неточность

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


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

Как правильно в плис делить, очень медленная операция, на высокой частоте появляются слаки. Если сдвигом то можно поделить на 2 4 8 16.... а если нужно поделить на 9 или 5?

можете посмотреть это

 

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


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

Вариантов много, но нужно еще и быстрый.

То что синтезатор сделал по времени не проходит слаки появляются.

берете деление столбиком и конвейризируете пока не надоест. я делал для сыклона 32 на 16 на 200МГц работает.

 

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


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

Сейчас попробую, у циклона 3 есть dsp, если их задействовать будет быстрее? квартус сам может их задействовать?

post-27923-1436937475_thumb.jpg

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


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

Сейчас попробую, у циклона 3 есть dsp, если их задействовать будет быстрее? квартус сам может их задействовать?

post-27923-1436937475_thumb.jpg

зачем для реализации деления нужны умножители (DSP блоки)?

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


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

Если на нем сделать сдвиг, что бы сдвиг выполнился за один так. но это так мысли еще не подумал ).

 

 

 

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


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

Если на нем сделать сдвиг, что бы сдвиг выполнился за один так. но это так мысли еще не подумал ).

а Вы не хотите для начала взять для начала за основу предложенный мной в сообщеннии 6 (через ссылку) реализацию/алгоритм?

 

 

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


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

Благодарю за информацию, ссылок много сейчас смотрю.

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


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

2 Maverick

я так понял, что человеку надо min latency и одновременно max FREQ, вы сделали всё что смогли ;)

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


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

Да очень благодарен Maverick по ссылкам есть то что искал раньше.

Как оптимизировать что бы получить min latency max FREQ ?

Битовый сдвиг выполняется за одну операцию, или на каждый бит по такту?

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


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

И снова CORDIC

cordic____.pdf

стр 6 документа - умножение с накоплением и деление с накоплением, используются только сложения и сдвиги.

 

Преимущества

Можно получить fmax > 200 MHz при обработке потока порядка 32 бит и даже больше (конечный результат будет зависеть от ПЛИС)

Можно реализовать большим ресурсами так, что fs = fmax

При fs << fmax очень экономная корка, хотя обычный pipeline дулитель столбиком, про который упоминал des00 может занять меньше ресурсов

 

Недостатки

Latency = количество итераций * 1/fmax.

При fs = fmax получится довольно толстая корка

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


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

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

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

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

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

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

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

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

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

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