1. 程式人生 > >System Generator從入門到放棄(七)-不同溢位與量化方式的對比

System Generator從入門到放棄(七)-不同溢位與量化方式的對比

System Generator從入門到放棄(七)-不同溢位與量化方式的對比


文章目錄


  System Generator是Xilinx公司進行數字訊號處理開發的一種設計工具,它通過將Xilinx開發的一些模組嵌入到Simulink的庫中,可以在Simulink中進行定點模擬,可以設定定點訊號的型別,這樣就可以比較定點模擬與浮點模擬的區別。並且可以生成HDL檔案,或者網表,可以在ISE中進行呼叫。或者直接生成位元流下載檔案。能夠加快DSP系統的開發進度。


參考:學會System Generator(14)不同溢位與量化方式的對比



一、不同溢位與量化方式的對比


1、簡介

  在介紹Gateway In block時談到了System Generator中的資料型別,及不同的量化和溢位方式。本文將以兩個簡單的設計例項,更直觀地說明不同的量化和溢位方式有什麼區別。


2、溢位(Overflow)方式對比

  從Simulink向System Generator的資料轉換過程中可能會出現溢位(Simulink中的值超出了所設定資料格式能夠表示的範圍),Overflow可以設定為不同的處理方式:

  • Wrap:捨棄掉需要表示的值的高位。
  • Saturate:溢位的數轉換為(所設定的資料格式能表達的)最大值或最小值。 Flag as
  • error:溢位時Simulink會報錯(這個選項只在Simulink模擬時有效,在匯出到FPGA時仍當作wrap處理)。

  在Simulink中新增block按下圖連線:
在這裡插入圖片描述
  Gateway In設定為Fix_4_0資料格式。
在這裡插入圖片描述

PS:資料格式的顯示,勾選下圖位置設定:
在這裡插入圖片描述

  該設計使用AddSub這個block計算6+6
在這裡插入圖片描述
  不溢位時的運算結果應該用5Bits表示(含符號位),這裡將AddSub的輸出結果故意設定為Fix_4_0,觀察溢位結果。設定如下圖,修改AddSub的不同overflow方式:
在這裡插入圖片描述

設定為Wrap

  結果顯示為-4。
在這裡插入圖片描述

  這是因為6+6=0110+0110=01100,最高位為符號位,正確結果為12,而溢位後,Wrap方式會直接捨棄掉溢位的最高位(即符號位0),結果變為了1100,這個補碼值轉換為原碼後就是-4(1100–>1011(除符號位取反)–>1100(加1))。

設定為Saturate

  結果顯示為7。

在這裡插入圖片描述

  這是因為帶符號數4Bits能表達的最大範圍便是7,當發生溢位時,輸出結果會飽和在能表示的最大值。

設定為Flag as error

  執行時Simulink會直接提示錯誤“Overflow detected”:
在這裡插入圖片描述


3、量化(Quantization)方式對比

  用有限位寬表示Simulink中的資料型別,必然會產生量化誤差。在Quantization中可以選擇資料的量化方式:

  • Truncate:直接捨棄不需要的低位。
  • Round(unbiased:+/-Inf):以四捨五入的方式量化。

  在Simulink中新增block按下圖連線:
在這裡插入圖片描述

  Constant輸出常數1.75;Gateway In資料格式設定為Fix_4_1,更改其量化方式:

設定為Round(unbiased: +/-Inf)
在這裡插入圖片描述
  結果顯示為2。
在這裡插入圖片描述

  Round採用的是類似於四捨五入的方式,當處於中間值時會量化到更大的那一個值。這裡1.75表示為二進位制小數位為“11”,當量化為Fix_4_1格式時需要捨棄掉一位小數位。Fix_4_1與1.75最接近的兩個值是“0011”(1.5)和“0100”(2.0)。1.75處於中間值,會量化為更大的2。

設定為Truncate
在這裡插入圖片描述
  結果顯示為1.5。
在這裡插入圖片描述
  這是因為Truncate會直接捨棄低位,1.75的第二個小數位無法表示,直接捨棄,量化到Fix_4_1後變成“0011”表示1.5。