Error handling verilog非净值分配

Error handling verilog非净值分配,error-handling,verilog,Error Handling,Verilog,我正在制作一个模块,使用4个32位加法器根据cmd生成结果。 如果cmd为0,则dout0=a0+b0,其他dout为零 如果cmd为1,则dout1=a1+b1,其他dout为零。 如果cmd也是2或3。 如果cmd为4,则得出前面的结果 错误消息是这样说的 错误-不允许将VRFC 10-529并发分配给非网络dout0~/sim_1/new/adder_数组。v:63 为什么会发生此错误以及如何解决此问题 这是代码v.23~69 module adder_array( cmd, ain0

我正在制作一个模块,使用4个32位加法器根据cmd生成结果。 如果cmd为0,则dout0=a0+b0,其他dout为零 如果cmd为1,则dout1=a1+b1,其他dout为零。 如果cmd也是2或3。 如果cmd为4,则得出前面的结果

错误消息是这样说的

错误-不允许将VRFC 10-529并发分配给非网络dout0~/sim_1/new/adder_数组。v:63

为什么会发生此错误以及如何解决此问题

这是代码v.23~69

module adder_array(
 cmd,
 ain0, ain1, ain2, ain3,
 bin0, bin1, bin2, bin3,
 dout0, dout1, dout2, dout3,
 overflow);

input [2:0] cmd;
input [31:0] ain0, ain1, ain2, ain3;
input [31:0] bin0, bin1, bin2, bin3;
output reg [31:0] dout0, dout1, dout2, dout3;
output [3:0] overflow;

wire [31:0] a[3:0];
wire [31:0] b[3:0];
wire [31:0] d[3:0];
wire ovf[3:0];


assign {a[0],a[1],a[2],a[3]} = {ain0,ain1,ain2,ain3};
assign {b[0],b[1],b[2],b[3]} = {bin0,bin1,bin2,bin3};
assign overflow = {ovf[3], ovf[2], ovf[1], ovf[0]};

parameter size = 4;

genvar i;
generate for(i = 0 ; i < size - 1 ; i = i + 1)
begin:adder
    if (i == 0) begin
     my_add adder(.ain(a[0]), .bin(b[0]), .dout(d[0]), .overflow(ovf[0]));
      end
    else if (i == size - 1 ) begin
      my_add adder(.ain(a[i]), .bin(b[i]), .dout(d[i]), .overflow(ovf[i]));
      end
    else begin
      my_add adder(.ain(a[i]), .bin(b[i]), .dout(d[i]), .overflow(ovf[i]));
      end
end
endgenerate

assign dout0 = (cmd == 0 || cmd == 4) ? d[0] : 0;
assign dout1 = (cmd == 1 || cmd == 4) ? d[1] : 0;
assign dout2 = (cmd == 2 || cmd == 4) ? d[2] : 0;
assign dout3 = (cmd == 3 || cmd == 4) ? d[3] : 0;


endmodule
模块加法器阵列(
cmd,
ain0,ain1,ain2,ain3,
bin0,bin1,bin2,bin3,
dout0,dout1,dout2,dout3,
溢出);
输入[2:0]cmd;
输入[31:0]ain0、ain1、ain2、ain3;
输入[31:0]bin0,bin1,bin2,bin3;
输出寄存器[31:0]dout0、dout1、dout2、dout3;
输出[3:0]溢出;
导线[31:0]a[3:0];
导线[31:0]b[3:0];
导线[31:0]d[3:0];
导线ovf[3:0];
分配{a[0],a[1],a[2],a[3]}={ain0,ain1,ain2,ain3};
赋值{b[0],b[1],b[2],b[3]}={bin0,bin1,bin2,bin3};
赋值溢出={ovf[3],ovf[2],ovf[1],ovf[0]};
参数大小=4;
genvar i;
为(i=0;i
如果要使用
assign
语句,请使用
dout0
a
wire
类型而不是
reg

我可以写下你为什么会遇到这样的错误,但克里夫·卡明斯已经给出了一个很好的答案: