Jump to content
    

Есть ли в VHDL оператор деления?

Вот формула: Y = X*(Y1 - Y0)/(X1 - X0) + (Y0*X1 - Y1*X0)/(X1-X0), где

X0, X1, X - это 8-разрядные std_logic_vector, а

Y0, Y1 - 14-разрядные std_logic_vector.

Оператора / в VHDL нет - уже проверил, а вот может есть какой-нибудь другой?

Хотя впринципе меня здесь спас бы обычный логический сдвиг влево! Но я так и не разобрался как пользоваться SHL, потомучто там нужно преобразовывать тип! Help =) PLZ!!!

Share this post


Link to post
Share on other sites

Оператора / в VHDL нет

Ойданупрям. Я бы не был столь категоричен.

уже проверил

Как проверяли?

 

По поводу реализации деления используйте поиск по форуму, уже обсуждалось.

Share this post


Link to post
Share on other sites

напр.,у меня еще ни разу не возникала необходимость реализации аппаратного деления при работе с алгоритмами ЦОС.

Не знаю вашего случая, но сгодится ли домножение на (X1 - X0) части, которая у вас впоследствии используется потом в выражениях совместно с Y ? (своеобразная нормировка)

Share this post


Link to post
Share on other sites

Деление - это самая большая головная боль в проектах на FPGA. Остальные простейшие арифметические операции (суммирование, вычитание и умножение) реализуемы, хотя все зависит от входных разрядностей и рабочих частот.

 

Реально, существует несколько библиотек деления в FPGA - названий не помню, потому пользуйтесь поиском, однако любая из них либо слишком медленная, либо создает абсолютно неприемлемый делитель размером под тысячу логических функций, либо требует большого и нефиксированного числа тактов на выполнение операции.

 

Так обстоят дела с делением на нефиксированную константу. Деление на фиксированную, или загружаемую константу аппроксимируется умножением.

R = Y / X трансформируется в R = (Y * K) >> 16, где K = 65536 / X + 1

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

 

Входным параметром для SHR есть bitvector. Не самый распространеный тип представления данных в VHDL. Гораздо проще снять информацию с тех битов, которые вас непосредственно интересуют без формального использования SHR или SHL. За все мое время использования VHDL мне только один раз пришлось использовать SHR и SHL - это было синтезируемое описание баррел-шифтера.

Share this post


Link to post
Share on other sites

Уже был, если не ошибаюсь, аналогичный топик: http://electronix.ru/forum/index.php?showt...=15135&st=0

Там в 6 сообщении я сослался на аппаратный делитель, одного из моих авторских свидетельств СССР. В рисунке приведена принципиальная схема, которую можно описать в HDL, возможно, однотактный матричный делитель Вам подойдет.

Share this post


Link to post
Share on other sites

В ActiveHDL тоже есть своя корка делителя...

 

Она есть и в квартусе: LPM_DIVIDE

 

И в synopsys DC: DW_div

 

Да и вообще во всех нормальных синтезаторах. Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель.

Share this post


Link to post
Share on other sites

Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель.

И что, Кавртус на

 

reg [...] a;

reg [...] b;

reg [...] c;

 

...

 

c <= a/b;

 

родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания?

Share this post


Link to post
Share on other sites

Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель.

И что, Кавртус на

 

reg [...] a;

reg [...] b;

reg [...] c;

 

...

 

c <= a/b;

 

родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания?

настоящий или не настоящий, но родит :)

Share this post


Link to post
Share on other sites

Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель.

И что, Кавртус на

 

reg [...] a;

reg [...] b;

reg [...] c;

 

...

 

c <= a/b;

 

родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания?

настоящий или не настоящий, но родит :)

Не понял. LPM_DIVIDE инстанцирует? Наш опыт показывает, что при делителе, не кратном степени 2, выдается ошибка. Точно так же ведет себя и Синплифай. Т.е. полноценный аппаратный делитель надо самому руками ставить. По крайней мере так было года полтора назад, с тех пор не проверял, может что-то и изменилось. Почему и спрашиваю.

Share this post


Link to post
Share on other sites

Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель.

И что, Кавртус на

 

reg [...] a;

reg [...] b;

reg [...] c;

 

...

 

c <= a/b;

 

родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания?

настоящий или не настоящий, но родит :)

Не понял. LPM_DIVIDE инстанцирует? Наш опыт показывает, что при делителе, не кратном степени 2, выдается ошибка. Точно так же ведет себя и Синплифай. Т.е. полноценный аппаратный делитель надо самому руками ставить. По крайней мере так было года полтора назад, с тех пор не проверял, может что-то и изменилось. Почему и спрашиваю.

 

LPM_DIVIDE инстанцирует :)

 

при делителе, не кратном степени 2, выдается ошибка :cranky: гложут странные сомнения

Share this post


Link to post
Share on other sites

LPM_DIVIDE инстанцирует :)

 

при делителе, не кратном степени 2, выдается ошибка :cranky: гложут странные сомнения

Таки да, Quartus и для VHDL, и для Verilog инстанцирует LPM_DIVIDE и для частного, и для остатка. Вот только если мне надо

quotient <= numer / denom;
remain   <= numer % denom;

то инстанцируются две мегафункции.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...