对于算术运算“ +”和“-”,该变量是否具有数据类型“整数”的要求?

时间:2019-02-14 06:21:56

标签: verilog

以下是用于查找数字阶乘的代码。如果我将“ i”声明为“寄存器”,则不管输入如何,输出(z)均保持为1。如果将其声明为“整数”,我将得到正确的结果。为什么会这样呢?请解释。

module Factorial_calc(n, z);
input [5:0] n;
output reg [64:0] z;
reg i;
// integer i;

always @(n)
begin
i=0;
z=1;
 while(i<n)
 begin
 i=i+1;
 z=i*z;
 end
end
endmodule

1 个答案:

答案 0 :(得分:3)

因为您的整数是32位宽,而reg仅是一位宽。对于大多数n值,您的仿真不应完成,更不用说产生结果了。

HDL与其他任何编程语言都不一样。请注意,即使您的代码模拟了它,也并不意味着它将在硬件中运行。在您的情况下,它不会合成。您在编译时未定义n的值。

至少不要将x或z用作变量,它们很容易与'x'z混淆。