流水线设计将原来一个时钟周期完成的较大的组合逻辑,通过切割后分由多个时钟完成,形式上,在切割处安排一个寄存器。
原理
例如一个组合逻辑由A0,A1,A2四个部分组成,每一部分延迟都是1ns,在流水线形式之前总共延迟3ns,寄存器建立时间1ns,那
时钟周期最小Tclk1>=Tsetup+Tpd_critical,4ns,切为3份流水 Tclk1>=Tsetup+Tpd_critical/3 =2ns,每条指令要花三个时钟周期执行完。当全速执行的时候,每个时钟周期结束都有一条指令处理完,而新时钟周期Tclk2明显比之前没流水线时候Tclk1小了,所以我们说吞吐率提高了(更深一层次的原因是,A2逻辑不需要等待A1逻辑的数据,而是使用A1上个周期打入寄存器的数据,即A2在无时不刻的运行,运行效率增加)。如果你只关注一条指令的实际执行时间(注意每条指令花三个时钟周期完成): 3* Tsetup+Tpd_critical/3)= 3*Tsetup + Tpd_critical 你发现绝对时间来看,单条指令执行时间反而比没流水线时候大了。多出来2个Tsetup就是所谓的sequencing overhead。因此,如果流水线不被充慢的话,速度反而有可能比没有流水线更慢。
指令执行时间(流水线)=指令执行时间(非流水线)/流水线级数