2015-05-05 48 views
0

是否可以按顺序执行由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

“执行块生成”听起来像你想要的硬件实例像软件功能一样执行。要共享一个硬件块,您需要创建一个实例并创建一个控制器来对其进行排序。 – Morgan

+0

生成块根据指定的模式*复制*一些硬件结构。如果您复制依次相互连接的块,则会依次“执行”。 –

回答

0

这是很难只从您所提供的代码确定,但如果你连线的几个组合模块组合在一起,每个将作用于先前的结果。比方说,你有三个组合块:

A -> B -> C 

由于每个模块组合,这只是其输入的功能,因此将有效地运作“顺序” - 一旦输出到的决心,B会更新,直到结果传播到模块C的输出。

但是,此组合更新可能需要相当长的时间,特别是如果您有多个顺序块,这可能导致周期时间较长。该实现并行执行的速度优点,同时保持循环时间合理一种更有效的方法是管道设计通过每个块之间增加的寄存器:

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

这允许A,B和C,以同时执行在顺序数据上。您可以轻松修改您的generate语句,方法是在每个fixed_point_div块的输出被传递到下一个块之前注册该设计。