Matlab 定點化 (fixed point designer)-入門1

Matlab 定點化 (fixed point designer)-入門1

歡迎關注微信公衆號:小魚FPGA

“ 當把算法用FPGA實現時,我們必須要考慮定點化問題。matlab的fixed point designer就是幫助我們定點化的工具”


                                  **01
                            定點化基本概念**
  • 1
  • 2

在做算法電路時,一般是先搭建軟件模型,搭建軟件模型可以用C,python,matlab等方式。

但是一般寫出來的軟件模型的運算數據類型都是浮點型運算,當要用FPGA實現,轉成Verilog一般都是利用定點化運算。

什麼是定點化運算呢。比如:

a*b=c

當 a=0.21 b=2時。

如果是浮點運算,毫無疑問答案爲 c=0.42。

但是當用定點化數據去算。如a,b,c當用9位二進制去表示小數位,2位表示整數位,1表示符號位。那麼這個精度就是 1/(2^9)=0.001953125

因此:

定點化之後的十進制 a = 0.208984375,相應的二進制表示爲 000_001101011

定點化之後的十進制 b = 2,相應的二進制表示爲 010_000000000

定點化之後的十進制 c = a*b = 0.41796875 ,相應的二進制爲 000_011010110

可以看到,跟浮點數運算的結果之間存在一定的誤差。

定點化之後可以看到,精度跟小數位位寬有關;小數位位寬越大,精度越高,那麼誤差越小。

當然同時整數位的位寬要保證在運算中數據不溢出。

比如 2.3+4 = 6.3 。 當整數位只有2位表示時,其最大隻能表示4,因此這就產生了溢出。

                               **02
               Matlab Fixed point designer**
  • 1
  • 2

Matlab定點化工具(Fixed point designer)的基本思想就是根據你提供的輸入激勵以及你將希望利用的數據位寬去幫你建議小數位位寬。因此輸入激勵一定要儘可能齊全,以保證設計的正確性。

當小數位寬確定後,你根據定點化之後的數據類型再去做一遍運算,看最後運算結果的誤差是否在可接受的範圍內,如過誤差不能接受,你可以繼續優化數據位寬。

當然fixed point desinger 也會幫助我們檢查溢出問題,如果發生溢出,你可以選擇增加整數位寬。

大家可以先去官網搜索相關資料

一個可以幫助快速入門的例子:https://ww2.mathworks.cn/help/fixedpoint/ug/convert-fir-filter-to-fixed-point-with-types-separate-from-code.html

完整的參考技術文檔:https://ww2.mathworks.cn/help/pdf_doc/fixedpoint/index.html

當然matlab還有HDL CODER這個工具(支持從Matlab轉Verilog或者VHDL),HDL CODER就用到了Fixed point。

其相關參考資料:

https://ww2.mathworks.cn/help/hdlcoder/index.html

歡迎關注微信公衆號:小魚FPGA

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章