wighted平均电路的Verilog代码

wighted平均电路的Verilog代码,verilog,system-verilog,weighted-average,Verilog,System Verilog,Weighted Average,我试图合成一个加权和电路,它将基本上实现以下等式 out=out+a[i]*w[i],其中i=0,1..n 我已经编写了以下代码,但在design vision环境中合成会产生如下错误 ELAB-368(错误)%s网络“%s”或直接连接的网络被驱动 由一个以上的来源,并且至少有一个来源是一个常数网络 模块加权求和(参数n=10)(输入[7:0]a[3:0],输入[7:0]w[3:0],输出[7:0]out); 赋值=0; genvar i; 生成 对于(i=0;i您不能为此使用生成循环。生成用于

我试图合成一个加权和电路,它将基本上实现以下等式

out=out+a[i]*w[i],其中i=0,1..n

我已经编写了以下代码,但在design vision环境中合成会产生如下错误

ELAB-368(错误)%s网络“%s”或直接连接的网络被驱动 由一个以上的来源,并且至少有一个来源是一个常数网络

模块加权求和(参数n=10)(输入[7:0]a[3:0],输入[7:0]w[3:0],输出[7:0]out);
赋值=0;
genvar i;
生成

对于(i=0;i您不能为此使用生成循环。生成用于复制硬件。您要复制逻辑,它应始终使用
块:

always_comb begin // SystemVerilog use "always_comb", Verilog use "always @*"
  out = 0;
  for (int i=0;i<n;i=i+1) begin
    out += a[i]*b[i];
  end
end

您不能为此使用生成循环。生成用于复制硬件。您要复制逻辑,它应始终使用
块:

always_comb begin // SystemVerilog use "always_comb", Verilog use "always @*"
  out = 0;
  for (int i=0;i<n;i=i+1) begin
    out += a[i]*b[i];
  end
end

除了格雷格的回答外,该工具还对信号
输出
的两种不同分配进行了分析。
弗斯特
assign out=0;
第二
out=out+a[i]*b[i];

除了格雷格的答案外,该工具还对信号
out
的两个不同赋值进行了分析。 弗斯特
assign out=0;
第二
out=out+a[i]*b[i];

什么是
b
out
被分配
0
,您也在generate块中驾驶
out
。我假设
assign
assign out=out+a[i]*b[i]中有一个打字错误
很抱歉,这是一个输入错误。它不在主代码中。什么是
b
out
被分配
0
,您也在generate块中驾驶
out
。我假设
assign
assign out=out+a[I]*b[I]中有一个输入错误
很抱歉,这是一个输入错误。它不在主代码中。非常感谢。建议有效。我正在SystemVerilog环境中工作,我的编译器可以处理多维输入数组。这是一种解脱,否则需要一些额外的编码。非常感谢。建议有效。我正在SystemVerilog环境和我的com上工作plier可以处理多维输入数组。这是一种解脱,否则需要一些额外的编码。
module weighted_sum #(parameter N=10)(
  input [7:0] a[N], input [7:0] w[N], // scaling input depth
  output logic [14+N:0] out); // scaling for overflow protection