表达式位宽的评估步骤
- 根据前述博客表达式位宽大小的标准规则确定表达式的位宽大小。
- 使用前述博客表达式符号规则确定表达式的符号。
- 将表达式(或自定子表达式)的类型和大小向下传递到表达式的上下文操作数。一般来说,运算符的任何上下文确定的操作数都应与运算符的结果具有相同的类型和大小。但有两种例外情况:1,如果运算符的结果类型是实数,而其上下文确定的操作数不是实数,则应将该操作数视为自定操作数,然后在应用运算符之前将其转换为实数。2,关系运算符和相等运算符的操作数既不是完全自定的,也不是完全由上下文决定的。操作数之间应相互影响,就好像它们是上下文确定的操作数,并根据它们确定结果类型和大小(两个操作数位宽大小的最大值)。不过,实际结果类型应始终为 1 位无符号。
赋值操作(assignment)位宽的评估步骤
- 根据verilog标准的赋值大小确定规则来确定右边的位宽大小。
- 如果需要,扩展右边的位宽大小。如果右边的类型是有符号的,则执行符号扩展。
处理有符号表达式中的 X 和 Z
如果有符号操作数要调整为更大的有符号位宽,且符号位的值为 X,则结果值应按位填充 X;如果值的符号位为Z,则结果值应按位填充 Z。
赋值和截断(Assignments and truncation)
如果赋值中右侧表达式的位宽大于左侧表达式的位宽,则右侧表达式的 MSB 始终会被丢弃,以匹配左侧表达式的大小。且不要求发出警告或报告任何与赋值大小不匹配或截断相关的错误。另外,截断有符号表达式的符号位可能会改变结果的符号。
例子1:
例子2:
例子3:
点赞加关注博主(ID:FPGA小飞)的博文,咱们一起系统学习verilog最终标准IEEE Std 1364-2005吧!