verilog中进行四则运算时,需要注意区分原码补码的使用。
以加法运算为例,如果不对右值进行显式说明($signed),则默认为无符号数,显式说明需完整,即对每一个右值都进行$signed描述,否则verilog将对混合运算的右值都当做无符号数进行运算,显式说明将失效。
不使用显式说明$signed来进行有符号数运算时需要根据左值位宽补充符号位,使所有右值的计算位宽与左值一致,否则编译工具会对位宽不够并未进行显式说明的右值进行高位补0处理,导致计算结果错误。
总结:在verilog眼中,所有的右值都是一串具体的数字,具体的运算结果是design自己定义的,同一个二进制数在作为有符号数和无符号数也可能有不同的表示,designer在设计时需要清楚参与运算的变量是有符号数还是无符号数,并显式声明或自己补齐符号位保持与左值位宽一致来确保运算结果的正确性。
标签:四则运算,运算,符号,右值,signed,Verilog,显式,verilog From: https://www.cnblogs.com/lightmonster/p/17975166