我正在学习verilog语言并面临问题。
integer intA;
...
intA = - 4'd12 / 3; // expression result is 1431655761.
// -4’d12 is effectively a 32-bit reg data type
这个标准片段引起了我们的注意。该标准表示 4d12 - 是4位数 1100 。 然后 -4d12 = 0100 。现在没关系。
要执行除法,我们需要将数字设置为相同的大小。 4到32位。位数 -4'd12 - 是无符号的,那么它应该等于 32'b0000 ... 0100 ,但它等于 32'b1111 ... 10100 即可。不行,但下一步。
我的分区版本: -4d12 / 3 = 32'b0000 ... 0100 / 32'b0000 ... 0011 = 1
标准版: - 4'd12 / 3 = 1431655761
任何人都能说出原因吗?为什么4位数会保留额外的位?
答案 0 :(得分:4)
您需要阅读 11.8.2评估1800-2012 LRM的表达式的步骤。它们缺少的关键部分是操作数为4'd12
,并且在应用一元-
运算符之前,它的大小为32位作为无符号值。
如果您希望将4位值视为有符号-3,则需要编写
intA = - 4'sd12 / 3 // result is 1