今天想分享几个高速设计中时序收敛的小实例。在此之前想要说明的是,以下几个案例一般情况下无需做特殊处理,只有在时序紧张,紧张到一两级逻辑都要细抠的时候可能会派上用场。对于做高速设计的同学可能帮助更大(处理器,高速总线等)。
1 大位宽比较器的巧用
对于多bit的比较器,其关键路径逻辑级数一般估算为log2(N),N为待比较的数据位宽。当N不足2的幂次方时依然按其最接近的2的幂次方数来生成电路。比如37bit的数据进行比较,其逻辑级数约为log2(64)也就是6级左右。也就是说,如果比较的数据位宽是38,39,40…只要小于64都可以按6级来估算。基于此,如果该比较数据逻辑所在的路径是关键路径,对于一些与该比较器强绑定的逻辑可以纳入比较器的输入端进行比较操作,从而实现串转并,减少串行逻辑级数。最常见的一个做法是将比较结果的valid信号与待比较信号放一起进行比较操作:
如此一来,原先比较器之后串行的一级与门被综合进比较器逻辑,关键路径深度减少1级。
2 优先级选择逻辑的拆分
对于多组优先级选择逻辑串联电路,如果其中有一个分支处于关键路径并且其优先级较低,可以将高于它的分支并行单独进行优先级判定,最后在与该关键路径分支进行优先级判定。
这样一来,原本处于关键路径的src3_dat通路上的逻辑一下子少了3级。
3 2选1选择逻辑的简化
一般而言一级2选1选择逻辑要么被综合成与或,要么被综合成一级mux,在逻辑级数估算的时候约为1.5~2级。在某些非常timing critical的时候,连0.5~1级逻辑都需要去细抠,类似这样的选择逻辑就可以进行一个简化。对于2选1来说,如果从功能上能保证待选的两个信号在对方信号被选中的时候是全0互斥的,那么可以将这1级的mux或者与或门简化成1级或门。
对于数据选择来说,一般要做到上述对方被选中则己方数据全0是不可能的,这时可以通过显性地将选择信号做成与或逻辑,然后将与门进行打拍隔离来实现。
如上图所示,rslt_dat的路径上少了一级与逻辑。当然这样做有一些前提,比如选择信号src0_sel对时序不敏感,该选择逻辑处于时序路径中的第一级等。这里只提供一个思路,具体应用还是要因地制宜。
今天就到这里,欢迎大家继续关注我们后续文章。