saber酱的抱枕

Fly me to the moon

12/5
13:13
其他 学习

pipeline设计的一个小技巧

pipeline设计不是基本功吗!不过也有那么一点点技巧

简单的pipeline设计的时候,往往会这么做:
pipe 0的enable信号就是总的en信号,pipe 1的enable信号就是en信号dly 1T......依此类推。

那么每次收到一个en,过一定T数,比如10T(pipeline长度)就会发出output。

一般来讲这个设计不会有什么问题。
但是,有时候,你会需要在收到en后几T之内就收到output,10T会太长。
而且这个en有可能是连续和断断续续的组合。

那么怎么办?
把data先推到最后一个pipe。当然会需要有预处理的时间。
这样每收一个en就所有pipe推一次,就可以每T推出来。

怎么做到?
这么想像吧,pipe推到最后一个的时候clk关掉了。然后等en来clk才打开,不就是了?
没错,clk gating。把所有pipe都用en额外卡住就好了。当然,output den要额外处理。
针对sram,视其dly可能也会需要特殊处理,比如把一个pre 2T的den用来处理sram read信号,这样刚好对齐。

这样就可以简单地把dly压到4~5T左右。需求就是必须要有预处理的时间。

pipeline设计的一个小技巧