以下是用于查找数字阶乘的代码。如果我将“ 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
答案 0 :(得分:3)
因为您的整数是32位宽,而reg仅是一位宽。对于大多数n值,您的仿真不应完成,更不用说产生结果了。
HDL与其他任何编程语言都不一样。请注意,即使您的代码模拟了它,也并不意味着它将在硬件中运行。在您的情况下,它不会合成。您在编译时未定义n
的值。
至少不要将x或z用作变量,它们很容易与'x
或'z
混淆。