ARM技术论坛
直播中

张艳

7年用户 1614经验值
私信 关注
[经验]

SpinalHDL的UInt与SInt数据类型能够进行有符号/无符号数操作

在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所提供的方法基本相同:

其他方法



原作者:玉骐

更多回帖

发帖
×
20
完善资料,
赚取积分