以下,结合图5.17的例子,具体说明调度方法。采用预留算法调度的非线性流水线的预约表如图5.23,有非计算延迟的流水线连接图如图5.24所示。
从图5.23所示的预约表中很容易看到,流水段S1、S2和S3所对应的行各有2个"×",而且是所有行里"×"最多的,因此,可以确定流水线的最小平均启动距离应该为2。 与最小平均启动距离2相对应的最小启动循环可能很多个,例如:(2)、(2,2)、(1,3)、(1,1,4)、(2,2,2)等。其中,只有(2)是恒定循环。由于每次启动距离都相等,因此,流水线的控制比较简单。下面,就以最小启动循环(2)为例,说明预留算法的调度方法。 从预约表中看,任意一行中凡是与第1个"×"的距离为2的倍数的时钟周期都要预留出来。于是,流水段所在行的第2个"×"要从时钟周期5向后延迟到时钟周期6。由于流水段所在行的第2个"×"的输入来自流水段的第2个"×"的输出,因此,流水段所在行的第2个"×"也要向后延迟一个时钟周期,从时钟周期6延迟到时钟周期7。同样,流水段所在行的第2个"×"也要向后延迟一个时钟周期,从时钟周期7延迟到时钟周期8。经过这样调度后的预约表如图5.23所示,与这张预约表相对应的流水线连接图是图5.24,它与图5.19相比,增加了一个非计算延迟流水段,这个流水段在流水线中的作用只是延迟一个时钟周期,没有其它功能。