在Bits的基础上,SpinalHDL提供了UInt、SInt数据类型,从而能够进行有符号/无符号数操作。
变量定义/初始化
UInt/SInt的初始化与Bits类型相似:
逻辑操作符
UInt/SInt逻辑操作符与Bits差别不大:
对于SInt左移操作,其提供的算数左移操作将会进行位宽扩展,若想位宽保持不变,可以进行位宽截取(SpinalHDL里提供了非常方便的位宽截取处理方式)。而逻辑左移操作的处理方式与UInt无二差别。
算术操作符
有意思的一点,SpinalHDL的算术操作符相较于Verilog提供了更丰富的运算符:
针对加法和减法,SpinalHDL均提供了三种方式实现:
x+y、x-y: 与Verilog中的加减操作符相同,对于溢出不做处理。
x+^y、x-^y: 为了防止加减法溢出,该方法提供了带位宽扩展的操作处理。
x+|y、x-|y:该操作符对于溢出场景,做截断饱和处理。
比较操作符
比较操作符与Verilog中的比较操作符基本无差别:
类型转换
对于intoSInt,其会扩展一位(最高位):
Bit extraction
位操作与Bits所提供的方法基本相同:
其他方法
原作者:玉骐
|