Verilog中的综合错误

Verilog中的综合错误,verilog,Verilog,我试图在verilog中实现FatICA算法。我已经写了整个代码,在模拟之前,它没有显示错误,但是当我尝试合成代码时,它给出了一个错误,声明为“”;应为而不是“” 我使用四个浮点模块进行算术计算,我已经生成了1000个sum、sqrt。。。etc使用for循环进行中间计算。下面是生成的代码 genvar s; generate for(s=1;s<=4000;s=(s+1)) begin:cov_mul_ins Float32Mul cov_m

我试图在verilog中实现FatICA算法。我已经写了整个代码,在模拟之前,它没有显示错误,但是当我尝试合成代码时,它给出了一个错误,声明为“”;应为而不是“”

我使用四个浮点模块进行算术计算,我已经生成了1000个sum、sqrt。。。etc使用for循环进行中间计算。下面是生成的代码

genvar s;

generate
    for(s=1;s<=4000;s=(s+1))

    begin:cov_mul_ins 
            Float32Mul cov_mul  (.CLK(clk),
                        .nRST(1'b1),
                        .leftArg(dummy_14),
                        .rightArg(dummy_15),
                        .loadArgs(1'b1)
                        );
    end
endgenerate
genvar;
生成

对于(s=1;s需要注意的几件事:

  • 模块外引用无法合成。这意味着,如果您希望代码可合成,就不能“窥视”实例化模块以查看网络或调用函数。不过,这对于测试台来说非常重要
  • 您尝试的函数调用有延迟,该延迟将被忽略,即
    \10 cov\u mul\u ins[c]。cov\u mul(…);

我可以用软件的lets-put-everything-in-a-class-and-call-methods来理解你的想法。这非常适合测试台,但正如你所看到的,合成会抱怨。说到硬件,你需要考虑硬件——问问你自己需要构建哪些块来运行你的算法。例如,如果你的算法需要30m在每个输入样本上使用乘法器,然后您需要30个乘法器实例,或者一个乘法器并通过它对30个操作进行排序。或者15个乘法器,每个采样周期执行2次乘法,或者10个乘法器执行3次等等。

尝试删除“#10”因为我认为它是不可合成的。

@osgx我认为generate语句中没有错误,但我不确定是否以正确的方式访问了实例化的模块。我尝试在web上搜索它,但没有找到任何东西。然后,samir palnitkar的书中有一个类似数组实例化的示例,因此我遵循了在。模拟时没有显示任何错误,但在合成时给出了错误。谢谢你的回答。我认为你所建议的方法比我的更好。你有你想要构建的电路的框图吗?如果没有,通常画一个是个好主意。如果是一个巨大的数据路径,你不必画每个实例。不是吗粗略的方块图还可以帮助您查看哪些块被重复,并为您提供一些代码。此外,您还需要在实例化乘法器时连接乘法器的输出。
 for(d=1;d<=2;d=(d+1))

begin
   for(e=1;e<=2;e=(e+1))
    begin
       for(c=1;c<=1000;c=(c+1))
          begin
        if((d==1)&&(e==1))
            begin
            dummy_14=centered_data_copy[d][c];
            dummy_15=Parent.centered_data_float_trans[c][e];

        #10 ***cov_mul_ins[c].cov_mul***(.CLK(clk),
                             .nRST(1'b1),
                             .leftArg(dummy_14),
                             .rightArg(dummy_15),
                             .loadArgs(1'b1),
                             .product(cov_temp[c][1])
                             );