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>