shawge

关于流水线延时公式的个人理解

0
阅读(6115)

关于流水线延时公式的个人理解


不带反馈的组合逻辑展开成流水线结构的优点在很多文章中已经阐述,主要是提高系统的性能,主要的手法是插入寄存器暂存组合逻辑的中间计算结果。但纵观网上文章对流水线性能提升的分析,写得都不显然,当然可能本人太笨。
例如以下这样一个组合逻辑,由#1、#2、#3个子逻辑构成,
图1——原组合逻辑

插入寄存器保存#1,#3的中间计算结果,展开成两级流水线结构后如下图
图2——流水线展后后的组合逻辑

通常的文章中开始分别分析原组合逻辑和流水线展开后的组合逻辑延时。
【原组合逻辑延时】

这个组合逻辑包括两级。
第一级的延迟是T1和T3两个延迟中的最大值;
第二级的延迟等于T2的延迟。
为了通过这个组合逻辑得到稳定的计算结果输出,需要等待的传播延迟为:
[max(T1,T3)+T2]

【流水线展开后的组合逻辑延时】

在从输入到输出的每一级插入寄存器后,流水线设计的第一级寄存器所具有的总的延迟为T1与T3时延中的最大值加上寄存器的Tco(触发时间)。同样,第二级寄存器延迟为T2的时延加上Tco。采用流水线设计为取得稳定的输出总体计算周期为:
max(max(T1,T3)+Tco,(T2+Tco))

原组合逻辑的延时为[max(T1,T3)+T2]很好理解,但是流水线展开后的延时为什么是max(max(T1,T3)+Tco,(T2+Tco))就不那么显然了,犹其对于初学者而言。
关于这一点我个人是从同步时序分析的角度进行理解的。

注意,流水线在初始化的时候会有一个首次延时,见下图:
将始下步骤

展开为流水线执行

从图中可以看到,流水线的各级最初是没有数据的,只有当个流水线的各级充满数据时,流水线才起作用,我们将这个填充满流水线的时间,或者说从第一个数据输入到第一个结果输出的延时叫首次延时。一般有N级中间寄存器就有N-1个CLK的延时。