一. 关于赋值语句
赋值的目标可以是:变量、信号、端口、位选择[]、范围Rang(),位选择运算[]和范围函数Rang()仅能作用于变量(向量类型,如sc_bv、sc_lv、sc_int、sc_uint、sc_bigint、sc_biguint)
二. to_string()
向量类型变量可以使用to_string函数,第一个参数指定格式:SC_BIN、SC_OCT、SC_DEC、SC_HEX,第二个参数指定是否显示基数信息true、false
三. sc_bit/sc_bv
常量:'0'以及'1'/0,1串
局部变量可初始化为全1,如sc_bv<8> temp ('1');
四. sc_logic/sc_lv
常量:'0','1','X','Z'或SC_LOGIC_0,SC_LOGIC_1,SC_LOGIC_X,SC_LOGIC_Z或sc_logic('0'),sc_logic('1'),sc_logic('X'),sc_logic('Z')/0,1,X,Z串
局部变量可以初始化为全'X'或全'Z',如sc_lv<8> temp('X');
五. sc_bv/sc_lv
1. sc_bv/sc_lv不支持算术操作,若要完成算术运算,先赋值给signed/unsigned变量,运算后再回赋。
2. sc_bv/sc_lv可以和signed/unsigned之间相互赋值,sc_bv/sc_lv之间也可相互赋值,但在赋值给非sc_lv时若包含'X'或'Z'时,则导致运行时警告并且结果不确定。
3. signed赋值给sc_bv/sc_lv时进行符号扩展,unsigned赋值给sc_bv/sc_lv时进行0扩展。
六. sc_int/sc_uint
1. 固定精度,最大宽度64位,底层实现以及底层运算均按64位进行,不足64位时按照类型进行扩展,运算结果根据精度进行截断。
2. sc_int/sc_uint之间可相互赋值,底层按64位进行,最后根据精度截断。
3. 进行位运算操作时,用等效的位向量表示形式参与运算。
4. 与其他C++整数类型兼容
七. sc_bigint/sc_biguint
任意精度类型,同六的3和4。
八. 端口/信号多驱动
普通类型的端口以及信号不能在多个进程中赋值,但可以通过使用Resolved类型来解决此问题,sc_out_resoleved、sc_inout_resolved、sc_signal_resolved、sc_out_rv<WIDTH>、sc_inout_rv<WIDTH>、sc_signal_rv<WIDTH>