Verilog:Procedural 不支持寄存器连续赋值

Verilog:Procedural Continuous Assignment to register is not supported

    input [31:0] write_data;
    input [4:0]  write_reg;
    reg [31:0] registers [31:0];

always @(*) 
     assign registers[write_reg] = write_data;

我有一个 32 位输入 write_data ,我想分配相应的索引,我从写入中得到 reg.Error 说你不能做连续赋值,我认为这是由 always@( *) 但如果我删除那个

它说 赋值左侧的对象 "registers" 必须具有网络类型 这是另一个错误。

您需要同步分配给寄存器。因为合成器解析它并路由到物理寄存器(即触发器)

always @(posedge clk) 
    my_reg = my_data;

assign 中,一个始终块是 procedural assignment。它不可 可综合,不应使用。它适用于非常特殊的建模案例。

continuous assignmentassign 之外,always 块用于连接 nets 并在所有地方使用。这种分配的 lhs 必须是 net 类型,即 wire。它不能是 reg.

另一方面,always 块中的所有 lhs 必须是 'reg' 类型。

在您的案例中,您必须做的是删除关键字 assign:

input [31:0] write_data;
input [4:0]  write_reg;
reg [31:0] registers [31:0];

always @(*) 
     registers[write_reg] = write_data;