微信公众号:FPGA动力联盟
博主微信号:fpga_start
微信公众号原文链接:verilog中整数运算的位宽和符号规则
在verilog中,整数(integer number)可以用作表达式中的操作数。一个整数可以表示为:
1, 一个无位宽(size)、无基数(base)的整数(例如:12,默认32bit)
2, 一个无位宽、有基数的整数(例如:'d12、'sd12,默认32bit)
3, 一个有位宽、有基数的整数(例如:16’d12、16’sd12,16bit)
下面的例子大家都能理解吗?不了解的话,请继续下滑!
integer IntA;
IntA = -12 / 3; // The result is -4. -12为32bit有符号负数,3为32bit有符号正数
IntA = -’d 12 / 3; // The result is1431655761. -’d 12为32bit无符号数,3为32bit有符号正数
IntA = -’sd 12 / 3; // The result is -4. -’sd12为32bit有符号负数,3为32bit有符号正数
IntA = -4'sd 12 / 3; // The result is 1. -4’sd12为4bit有符号正数4,3为32bit有符号正数
此示例展示了verilog的四种书写表达式“负12 除以 3”的方式。我们要特别注意:-12 和 -'d12 虽然都是以相同的二进制补码的形式表示,但是在verilog表达式中,-'d12 被认为是无符号数,而-12被认为是有符号数。
总结:没有基数base说明符的整数的负值应与具有基数说明符的整数的含义不同,没有基数说明符的整数应看作是有符号数,而带有无符号基数说明符的整数应看作为无符号数。
参考文献:
1,IEEE verilog-2001标准