在用SystemVerilog码代码的时候,经常会遇到逻辑和算术运算表达式,除了之前提到的运算符优先级问题,还有一个头疼的问题就是符号位扩展。
什么时候会自动进行符号位扩展?
什么时候需要人工扩展?
不知道大家是否了然于胸呢?
先来想想下面这几个问题,热热身:
对有符号数进行截位,会得到有符号数吗?
有符号数和无符号数相加,结果是有符号数吗?
操作数都是有符号数,结果一定是有符号数吗?
别担心,今天Q哥跟大家一起梳理一遍。
先说两个概念,context-determined操作数和self-determined操作数。
context-determined操作数是指进行运算的时候,需要根据当前的上下文对操作数先进行扩展,然后再运算。
举个例子 :
代码片段1
求a+b然后赋值给c的时候,会先判断a b c的位宽,找出他们中的最大位宽,对其余的进行扩展。
这里c是16位最大,那么会先把a和b扩展到16位,然后求加法, 再赋值给c。
self-determined操作数是指不需要根据当前的上下文对操作数进行扩展,直接运算。