湘攸客

【技术分享】改善代码风格,通过重组关键路径优化时序

0
阅读(4318)

1.35 通过关键路径重组来优化时序


         第五个用于提高时序性能的策略我们称其为路径重组,即通过重组数据流上的路径达到最小化关键路径的目的。这个技巧通常用于关键路径是由多个路径组合而成的场合,而且这些被组合的路径之间又可以重组相互之间的先后顺序。通过这样简单的顺序重组,可以使得寄存器之间的关键路径被拉得更近。使用这个策略的时候,我只需关注任何给定的寄存器之间的逻辑路径。举例来说,我们先来看看下述代码:

module randomlogic(
output reg [7:0] Out,
input [7:0] A,B,C,
input clk,
input Cond1,Cond2);
always @ (posedge clk)
if (Cond1)
Out<=A;
else if (Cond2&&(C<8))
Out<=B;
else
Out<=C;
endmodule

         在这个例子中,首先我们假设关键路径是COut之间的路径,这个路径包括了比较器、两个与门以及一个多路选择器,如图1-11所示。

1-11:过长的关键路径

         如果我们假设前面例子中的条件判决不是互斥的,那么我们可以将上述代码修改如下所示:

module randomlogic(
output reg [7:0] Out,
input [7:0] A,B,C,
input clk,
input Cond1,Cond2);
wire CondB=(Cond2&!Cond1);
always @ (posedge clk)
if (CondB&&(C<8))
Out<=B;
else if (Cond1)
Out<=A;
else
Out<=C;
endmodule

         通过重新组织代码,我们将关键路径上的一个门电路移出关键路径,如图1-12所示。所以如果我们非常注意代码是如何实现具体功能的时候,我就可以对时序性能施加非常直接的影响。根据以上分析,我们可以得出这样的结论,即通过重组组成关键路径的路径,使关键路径中的某个路径距离目的寄存器更近,这样可以使设计的时序性能得到改善。

图1-12:通过逻辑重组减小关键路径