Verilog操作意外结果

Verilog操作意外结果,verilog,Verilog,我正在学习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位

我正在学习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位数字保留额外的位?

您需要阅读第11.8.2节评估1800-2012 LRM表达式的步骤。您缺少的关键部分是操作数是
4'd12
,并且在应用一元
-
运算符之前,它的大小被调整为32位的无符号值

如果希望将4位值视为带符号的-3,则需要写入

intA = - 4'sd12 / 3 // result is 1
您需要阅读第11.8.2节评估1800-2012 LRM表达式的步骤。您缺少的关键部分是操作数是
4'd12
,并且在应用一元
-
运算符之前,它的大小被调整为32位的无符号值

如果希望将4位值视为带符号的-3,则需要写入

intA = - 4'sd12 / 3 // result is 1