尽管正确声明了寄存器,但 Verilog 中的索引超出范围错误

Index out of range error in Verilog, although the register is declared correctly

我正在尝试学习 Verilog,并且我有这个简单的代码

module division (
    output reg [14:0] A,
    input [14:0] D);
    
    reg[4:0] i;

    always @(*) begin
    
        for (i = 14; i >= 0; i = i-1) begin
            
            A[0] = D[i];
            
        end
    end         
endmodule 

此 returns 错误:Index out of range for D.。我不知道为什么,因为 D 是在那个时间间隔内声明的。你能帮我么? 我知道代码可能没有任何意义,但我只包含了问题的相关部分。

您已将 i 声明为无符号,因此表达式 i >= 0 将始终为真。 当i到0时,下一次迭代是5'b11111,超出范围。您应该将 i 声明为 integer 或添加 signed 关键字。