Jump to content

    

Математика в VHDL

Я как-то работал с floating-point в матлабе system generator. В железе данная модель работала хорошо. По ресурсам уже не помню. Там переход делался с помощью блока convert. 

 

DSC_0077.JPG

Share this post


Link to post
Share on other sites
12 минут назад, quato_a сказал:

если нужна точность до 0.0000001234, то нужно умножать на степень 2 так, чтобы результат был больше 1

0.0000001234 * 2^23 = 1.035...

значит нужно выделять минимум 23 бит после запятой для фиксированной точки.

Я бы сказал, что точность до 0.0000001234 подразумевает ошибку как минимум на +-0.5 в младшей цифре, т.е. разрядов 10...11 надо бы еще накинуть:)

Share this post


Link to post
Share on other sites
4 minutes ago, Skryppy said:

Я как-то работал с floating-point в матлабе system generator. В железе данная модель работала хорошо. По ресурсам уже не помню. Там переход делался с помощью блока convert. 

 

DSC_0077.JPG

чтоб данная модель работала в железе вы генерировали ее в VHDL?

Share this post


Link to post
Share on other sites

Да, я же говорю в железе нормально работала. В чипскопе данные смотрели. Но после извлечения корня стоит второй конвертор, который переводит в fixed-point 32 бита.

 

Share this post


Link to post
Share on other sites
11 minutes ago, Самурай said:

Я бы сказал, что точность до 0.0000001234 подразумевает ошибку как минимум на +-0.5 в младшей цифре, т.е. разрядов 10...11 надо бы еще накинуть:)

тогда уточню

для работы со значением с размахом +/-700 и точностью 0.0000001234 потребуется 23 бита дробной части после запятой, 10 бит целой части (для обеспечения +/-700) и 1 бит знак

fix34_23

Share this post


Link to post
Share on other sites

В принципе, для ваших чисел и fixed point 32 бита хватает. Вот набросал по-быстрому модель. Поиграйтесь с разрядностью, выберите нужную вам по точности.

DSC_0078.JPG

floating_point.rar

Share this post


Link to post
Share on other sites

Приветствую!

Модель в Matlab  тоже один из вариантов  ручного пути вкупе с неким сервисом что позволяет легче оптимизировать вычисления по ресурсам. 

 HLS  же удобен тем что через 5 мин можно получить работающую железку - но естественно за счет "жирности" в реализации.

Ради прикола - загнал ваш код в Vivado HLS. Без всякой оптимизации получил время вычисления  ~350 тактов на ~140 MHz.  при 110 штуках DSP :unknw:  Можно в продакшен пихать. :biggrin:

Удачи! Rob.

Share this post


Link to post
Share on other sites
21 минуту назад, quato_a сказал:

тогда уточню

для работы со значением с размахом +/-700 и точностью 0.0000001234 потребуется 23 бита дробной части после запятой, 10 бит целой части (для обеспечения +/-700) и 1 бит знак

fix34_23

Подозреваю терминологическую нестыковку:) Как я понял вопрос ТС, его интересовало, сколько нужно двоичных разрядов на точное представление константы 0.0000001234. Не хватит для этого 23-х бит, минимум 31 нужно в данном конкретном случае, а в общем случае для погрешности +-0.5e-10 и все 34 бита нужно. А вот если нужна именно погрешность +-1е-7 то да, 23 бит хватит, но погрешность с точностью 3-х знаков после запятой обычно не задают:)

Share this post


Link to post
Share on other sites
4 minutes ago, Самурай said:

Подозреваю терминологическую нестыковку:) Как я понял вопрос ТС, его интересовало, сколько нужно двоичных разрядов на точное представление константы 0.0000001234. Не хватит для этого 23-х бит, минимум 31 нужно в данном конкретном случае, а в общем случае для погрешности +-0.5e-10 и все 34 бита нужно. А вот если нужна именно погрешность +-1е-7 то да, 23 бит хватит, но погрешность с точностью 3-х знаков после запятой обычно не задают:)

а ну да)

Share this post


Link to post
Share on other sites
48 minutes ago, Skryppy said:

В принципе, для ваших чисел и fixed point 32 бита хватает. Вот набросал по-быстрому модель. Поиграйтесь с разрядностью, выберите нужную вам по точности.

 

floating_point.rar

спасибо. это мне надо привлечь человека который матлабом занимается. не уверен что он меня не пошлет куда подальше :)

Edited by jenya7

Share this post


Link to post
Share on other sites
44 minutes ago, RobFPGA said:

Ради прикола - загнал ваш код в Vivado HLS. Без всякой оптимизации получил время вычисления  ~350 тактов на ~140 MHz.  при 110 штуках DSP :unknw:  Можно в продакшен пихать. 

Чуть более 35 микросекунд. В ограниченные рамки ТС вписывается :biggrin: Но как я и говорил, Виртекс бы для 110ти DSP, да пожирнее).

UPD А это для double или для float'ов?

Share this post


Link to post
Share on other sites

Приветствую!

Just now, Nick_K said:

... Но как я и говорил, Виртекс бы для 110ти DSP, да пожирнее)

Так это  без оптимизации - если покрутить прагмами  чтобы  например использовать по минимум float|double корки операций то и меньше по объему получится.

Удачи! Rob.  

Share this post


Link to post
Share on other sites
58 minutes ago, RobFPGA said:

Приветствую!

Модель в Matlab  тоже один из вариантов  ручного пути вкупе с неким сервисом что позволяет легче оптимизировать вычисления по ресурсам. 

 HLS  же удобен тем что через 5 мин можно получить работающую железку - но естественно за счет "жирности" в реализации.

Ради прикола - загнал ваш код в Vivado HLS. Без всякой оптимизации получил время вычисления  ~350 тактов на ~140 MHz.  при 110 штуках DSP :unknw:  Можно в продакшен пихать. :biggrin:

Удачи! Rob.

а в квартусе куда его загонять?

Share this post


Link to post
Share on other sites

Приветствую!

Just now, jenya7 said:

а в квартусе куда его загонять?

Гусары молчать!  :biggrin: 

У Intel  вроде есть  свое HLS   но я с ним толком еще не работал. 

Удачи! Rob.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now