生成语句中的顺序操作

时间:2015-05-05 03:01:12

标签: verilog

是否可以按顺序执行generate语句生成的块?

假设生成语句生成块a,块b,块c ...它们都并行运行但我有块b的输入取决于块a的结果,这表明它们按顺序运行。有没有办法做到这一点?我试着搜索但找不到任何东西。

以下是代码段:

genvar i,j,k;
generate
for (k=1;k<6;k=k+1) begin : stepk   // number of whole operation reps
  for (i=k;i<6;i=i+1) begin : stepi // row counter
    for (j=k+1;j<6;j=j+1) begin : stepj // column counter
      //res2[i][j] = res[i][j]/ res[i][k] 
      fixed_point_div fpdiv(
                    .clk(clk),
                    .dividend_fp(res[k][i][j]),
                    .divisor_fp(res[k][i][k]),
                    .quotient_fp(res[k+1][i][j]));

      //assign res3[1][j] = res2[1][j];
      assign res[k+2][i][j] = (i==k) ? res[k+1][k][j] : (res[k+1][i][j] - res[k+1][k][j]);

    end
  end
end
endgenerate

1 个答案:

答案 0 :(得分:0)

很难仅根据您提供的代码确定,但如果您将多个组合模块连接在一起,则每个模块都会根据之前的结果执行操作。假设您有三个组合块:

A -> B -> C

由于每个模块都是组合的,它只是其输入的一个功能,因此将“顺序”有效地运行 - 一旦输出到A解析,B将更新,等等,直到结果传播到输出模块C.

但是,这种组合更新可能需要相当长的时间,特别是如果序列中有许多块,这可能会导致循环时间过长。在保持循环时间合理的同时实现并行执行的速度优势的更有效方法是通过在每个块之间添加寄存器来管道设计:

A -> || -> B -> || -> C

这允许A,B和C同时在顺序数据上执行。您可以通过在将每个fixed_point_div块传递到下一个块之前注册每个java.text.SimpleDateFormat块的输出来轻松修改您的生成语句。