天天看點

Chapter 3 -- SystemC From Gound 讀書心得

supported data type = Native C++ data type + STL data type + SystemC datatype( logic, integers and fixed-point)

systemc 還提供了systemc data type 和 C++ data type 之間的轉化函數。 所有的systemc data type都屬于sc_dt namespace。

1. logic : sc_bv<W>,  sc_lv<W>, bool, sc_logic<W>,

    注意sc_bit 被 C++裡面的 bool取代了。

2. integer: sc_int<W>, sc_uint<W>  (其中W<=64)  , sc_bigint<BITWIDTH>, sc_biguint<BITWIDTH> (其中BITWIDTH>64)

    systemC的integer比傳統的C++的integer類型提供了bit操作和concatination以及可配置位寬。

3. fixed point: sc_fixed<WL,IWL[,QUANT[,OVFLW[,NBITS]>

    以前DSP算法都是用C++的浮點直接表示,但是為了更精确以及綜合的友善,systemC引入了fixed-point類型。它定義了整個的bit寬度以及整數部分的bit寬度(WL,IWL)。加_fast字尾的指定精度限制再53bit之内。ed這個過去式表明在compile的時候就固定了,無法改變。

4. 由于systemc擴充了自己的datatype,這些datatype就是一個類。它們的指派以及初始化,有時會使用字元串。譬如

            sc_lv<6>    mask = "10ZX11"

    這些datatype變量值的列印,實際上是先把它們轉化成字元串,然後列印出來。譬如

            cout<<mask.to_string(SC_BIN, true)<<endl;

             string to_string(sc_numrep rep, bool wprefix);

    當然,也可以直接給mask指派(因為systemc重載了=以及stream operator << , >>):

            sc_lv<6>   mask = 15;

            cout<< mask

5.  SystemC data type重載并擴充了所有C++的操作符。類似于C++,不同類型的data type進行運算必須顯示的轉化其中之一。

            sc_int<64> g("0x7000000000000000");

sc_int<64> h("0x7000000000000000");

sc_int<64> i("0x7000000000000000");

sc_bigint<70> bigsum = g + h + i; // Doesn’t work

bigsum = sc_bigint<70>(g) + h + i;// Works

6.  常用的STL

     vector<T>, map<T>,set<T>, List<T>,deque<T>