lexus.mephi 0 November 24, 2006 Posted November 24, 2006 · Report post Вот формула: 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!!! Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 23 November 24, 2006 Posted November 24, 2006 · Report post Оператора / в VHDL нет Ойданупрям. Я бы не был столь категоричен. уже проверил Как проверяли? По поводу реализации деления используйте поиск по форуму, уже обсуждалось. Quote Share this post Link to post Share on other sites More sharing options...
Doka 5 November 24, 2006 Posted November 24, 2006 · Report post напр.,у меня еще ни разу не возникала необходимость реализации аппаратного деления при работе с алгоритмами ЦОС. Не знаю вашего случая, но сгодится ли домножение на (X1 - X0) части, которая у вас впоследствии используется потом в выражениях совместно с Y ? (своеобразная нормировка) Quote Share this post Link to post Share on other sites More sharing options...
v_mirgorodsky 0 November 24, 2006 Posted November 24, 2006 · Report post Деление - это самая большая головная боль в проектах на FPGA. Остальные простейшие арифметические операции (суммирование, вычитание и умножение) реализуемы, хотя все зависит от входных разрядностей и рабочих частот. Реально, существует несколько библиотек деления в FPGA - названий не помню, потому пользуйтесь поиском, однако любая из них либо слишком медленная, либо создает абсолютно неприемлемый делитель размером под тысячу логических функций, либо требует большого и нефиксированного числа тактов на выполнение операции. Так обстоят дела с делением на нефиксированную константу. Деление на фиксированную, или загружаемую константу аппроксимируется умножением. R = Y / X трансформируется в R = (Y * K) >> 16, где K = 65536 / X + 1 Подробнее об аппроксимации лучше почитать у классиков жанра, на пример, "Алгоритмические трюки для программистов", Генри Уоррен, младший. Входным параметром для SHR есть bitvector. Не самый распространеный тип представления данных в VHDL. Гораздо проще снять информацию с тех битов, которые вас непосредственно интересуют без формального использования SHR или SHL. За все мое время использования VHDL мне только один раз пришлось использовать SHR и SHL - это было синтезируемое описание баррел-шифтера. Quote Share this post Link to post Share on other sites More sharing options...
Yura Gritsay 0 November 24, 2006 Posted November 24, 2006 · Report post есть корка в ISE Math Functions >> Dividers Quote Share this post Link to post Share on other sites More sharing options...
Voloshchenko 0 November 27, 2006 Posted November 27, 2006 · Report post Уже был, если не ошибаюсь, аналогичный топик: http://electronix.ru/forum/index.php?showt...=15135&st=0 Там в 6 сообщении я сослался на аппаратный делитель, одного из моих авторских свидетельств СССР. В рисунке приведена принципиальная схема, которую можно описать в HDL, возможно, однотактный матричный делитель Вам подойдет. Quote Share this post Link to post Share on other sites More sharing options...
PorychikKize 4 November 27, 2006 Posted November 27, 2006 · Report post есть корка в ISE Math Functions >> Dividers В ActiveHDL тоже есть своя корка делителя... Quote Share this post Link to post Share on other sites More sharing options...
SM 13 November 28, 2006 Posted November 28, 2006 · Report post В ActiveHDL тоже есть своя корка делителя... Она есть и в квартусе: LPM_DIVIDE И в synopsys DC: DW_div Да и вообще во всех нормальных синтезаторах. Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель. Quote Share this post Link to post Share on other sites More sharing options...
dxp 115 November 28, 2006 Posted November 28, 2006 · Report post Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель. И что, Кавртус на reg [...] a; reg [...] b; reg [...] c; ... c <= a/b; родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания? Quote Share this post Link to post Share on other sites More sharing options...
Postoroniy_V 0 November 28, 2006 Posted November 28, 2006 · Report post Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель. И что, Кавртус на reg [...] a; reg [...] b; reg [...] c; ... c <= a/b; родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания? настоящий или не настоящий, но родит :) Quote Share this post Link to post Share on other sites More sharing options...
dxp 115 November 28, 2006 Posted November 28, 2006 · Report post Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель. И что, Кавртус на reg [...] a; reg [...] b; reg [...] c; ... c <= a/b; родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания? настоящий или не настоящий, но родит :) Не понял. LPM_DIVIDE инстанцирует? Наш опыт показывает, что при делителе, не кратном степени 2, выдается ошибка. Точно так же ведет себя и Синплифай. Т.е. полноценный аппаратный делитель надо самому руками ставить. По крайней мере так было года полтора назад, с тех пор не проверял, может что-то и изменилось. Почему и спрашиваю. Quote Share this post Link to post Share on other sites More sharing options...
Postoroniy_V 0 November 28, 2006 Posted November 28, 2006 · Report post Потому как (не знаю про vhdl), но верилоговское деление, "/", и нахождение остатка, "%" обязано синтезироваться в делитель. И что, Кавртус на reg [...] a; reg [...] b; reg [...] c; ... c <= a/b; родит настоящий делитель? Или скажет, что, дескать, b не кратно степени 2, поэтому до свидания? настоящий или не настоящий, но родит :) Не понял. LPM_DIVIDE инстанцирует? Наш опыт показывает, что при делителе, не кратном степени 2, выдается ошибка. Точно так же ведет себя и Синплифай. Т.е. полноценный аппаратный делитель надо самому руками ставить. По крайней мере так было года полтора назад, с тех пор не проверял, может что-то и изменилось. Почему и спрашиваю. LPM_DIVIDE инстанцирует :) при делителе, не кратном степени 2, выдается ошибка :cranky: гложут странные сомнения Quote Share this post Link to post Share on other sites More sharing options...
andrew_b 23 November 28, 2006 Posted November 28, 2006 · Report post LPM_DIVIDE инстанцирует :) при делителе, не кратном степени 2, выдается ошибка :cranky: гложут странные сомнения Таки да, Quartus и для VHDL, и для Verilog инстанцирует LPM_DIVIDE и для частного, и для остатка. Вот только если мне надо quotient <= numer / denom; remain <= numer % denom; то инстанцируются две мегафункции. Quote Share this post Link to post Share on other sites More sharing options...