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