Verilog error: value is not a constant?

Verilog error: value is not a constant?

我有一个程序,其输入和输出指定如下:

module RegBlock(
    input [31:0] WriteRegData,
    input [4:0] rs, rt, WriteRegIn,
    output [31:0] op1, rtData
    );

    reg [31:0] op1, rtData, data [0:31];

'data [0:31]' 是之后声明的数组,在声明之后我尝试按如下方式分配输出:

    assign op1 = data[rs];
    assign rtData = data[rt];
    assign data[WriteRegIn] = WriteRegData;

我不断收到 "WriteRegData" 不是常量的错误。由于它只是在程序开头声明为输入,所以我不确定问题出在哪里。我正在使用 Xilinx ISE。

当您使用连续赋值时:

assign data[WriteRegIn] = WriteRegData;

您不能更改左侧的索引。你可能想在 always 过程中使用过程赋值来实现你想要的:

always @(*)
    data[WriteRegIn] = WriteRegData;