#define MAX_LENGTH 1504
struct packet
{
sc_uint<16> length;
char[MAX_LENGTH] info;
sc_int<32> fcs;
inline bool operator == (const packet& rhs) const
{
return rhs.info == info
&& rhs.length == length
&& rhs.fcs == fcs;
}
};
定點資料型別
四種基本定點資料類型:
- sc_fixed
- sc_ufixed
- sc_fix
- sc_ufix
sc_fixed 和 sc_ufixed 的參數是靜態的,在程式中設定後不能再修改,而 sc_fix 和 sc_ufix 的參數是非靜態的,其字長和整數部分長度可以是變數。
定點資料型別的定義方法如下:
- sc_fixed<wl, iwl, q_mode, o_mode, n_bits> x;
- sc_ufixed<wl, iwl, q_mode, o_mode, n_bits> y;
- sc_fix x(list of option);
- sc_ufix y(list of option);
wl:字長,總位元數,必須大於 0
iwl:整數部分字長,可以是正數、負數,也可以大於總字長
q_mode:量化模式。 超出精度時根據量化模式對尾數進行取捨
o_mode:溢位模式。 超出範圍時根據溢出模式對資料進行處理
n_bits:飽和位元的尾數。 僅用於具有飽和行為的溢出模式下飽和位元的位數
量化模式:
定點資料類型的量化範例:
- sc_fixed<4, 2> x;
- sc_fixed<3, 2, SC_RND_ZERO, SC_SAT> y;
- x = 1.25;
- y = x; // 這裡發生了量化
x 的值:二進位為 01.01,十進位為 1.25
y 的值:二進位為 01.0,十進位為 1.0,q=0.5,x=2.5q
飽和模式:
定點資料型別飽和範例:
- sc_fixed<4, 4> x;
- sc_fixed<3, 3, SC_TRN, SC_SAT> y;
- x = 5;
- y = x; // 這裡發生飽和,因為 y 的範圍是 -4~3,而 x 為 5
x 的值:二進位為 0101,十進位為 5
y 的值:二進位為 011,十進位為 3,q=1
沒有留言:
張貼留言