Verilog:不支持注册程序连续分配

时间:2017-11-17 07:29:01

标签: verilog intel-fpga quartus procedural

    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说你不能做连续分配,我认为原因总是@(*),但如果我删除< / p>

它说 对象&#34;寄存器&#34;在任务的左侧必须有一个网络类型 而它的另一个错误。

2 个答案:

答案 0 :(得分:0)

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

setTimeout

A d-flip flop

答案 1 :(得分:0)

assign 内部始终阻止的是procedural assignment可合成,不应使用。它适用于非常特殊的建模案例。

continuous assignmentassign 之外始终阻止用于连接nets并在所有地方使用。这种分配的lhs必须是 net 类型,即 wire 。它不能是一个注册表。

另一方面,总是块中的所有lhs必须是&#39; reg&#39;类型。

您需要做的就是删除关键字 assign

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

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