4位快速加法器设计_芯片设计小实例——一种数据调度的时序优化

今天想通过一个具体的小例子来介绍另一种常见的优化时序的方法。因为涉及到微架构的修改,这是一种综合工具无法做到的优化。

b560649b95f8680c17a7ff5b76245afe.png

在之前的文章《芯片设计小实例——共享buffer》中,介绍了一个简单共享buffer,buffer中存有不同id的数据流,每个数据流的packet都带有qos(这里可以简单理解为packet之间相互的优先级),每个周期通过调度算法在所有最高qos的队头packet中调度出一个packet输出。这里为了方便说明,本文的设计里,Buffer的深度选择较大的32深度,数据位宽选择较大的1024bit,使用Round-Robin轮询调度算法。我们重点关注数据调度通路。

01

按照“先选最高优先级队头,再进行调度”的这种一般顺序,来进行设计,其简单的微架构大致如下:

f0e2a4feba4116119cb35c6a2c0c8430.png具体数据流如下:

Step1.buffer中所有的QoS bit与不同的QoS阈值做比较,得到不同QoS阈值的bit array,因为这里QoS是2bit,所以一共有4个阈值,生成4组32bit的array,生成的array需要与buffer中所有entry的valid && head信息做qualify,只有有效的队头entry才参与仲裁

Step2.这一步主要完成的是“寻找最高优先级的QoS ValidHead Entry list”这个动作。从第二高的QoS阈值开始,每个QoS阈值对应的32bit QoS Valid Head Entry list各自做一个位或运算,表证该阈值有满足条件的待调度buffer entry存在,作为选择信号。然后从低优先级到高优先级,需要做3个优先级mux,以选出当前Buffer中存在的最高优先级QoS Valid Head Entrylist。

这个地方的时序较长。主要是由32bit的位或运算和3级的2选1 mux串联组成。粗略估算大概9.5级逻辑门。(5级位或+1.5x3级mux,一级mux按1.5级逻辑门算)。

Step3. 这一步是调度算法的实现。这里选择了Round-Robin算法。当然算法的具体实现方式多样,具体的逻辑级数和实现方式有关。这里只是采用了一般实现的估计,粗略6级左右。Round-Robin的输入是当前最高优先级的QoSValid Head Entry list,输出是一个32bit的one-hot独热码,这就是被调度的entry。

Step4. 理论上Step3输出的32bit独热码可以直接参与到Step5的选择逻辑通路上,通过AOI形式的选择输出数据。但是这里考虑到每个buffer的数据位宽较大,加上buffer数量较多,在这种情况下,任意1bit的独热码都会有1024个扇出,需要使用大驱动能力的buffer来进行驱动,根据工艺情况,可能一个buffer还不够,甚至需要2个。相当于2-4级的逻辑门。

Step5. 这是真正的buffer数据输出,也就是仲裁结果调度出了某个entry,需要把它从buffer中读出来。32选1的话大概是5级逻辑门。

从上面的图中可以看到,这个调度流程的critical path(红色箭头)有27.5级!这是什么概念。即便是现在最先进的5nm工艺,在1GHz左右都只能装下大概30级(此数据只是在LVT/SVT比例适中的基础上粗略估算,不考虑大量使用ULVT),这条路径在大部分主频稍微高点的,使用7nm以上工艺的设计中基本都无法1拍收下来。而打拍意味着会有性能损失,可不可以想办法再优化一下时序呢?

02

按照“选最高优先级队头与调度同时进行”的并行思想,来进行设计,其简单的微架构大致如下:

1ba07be62f4b4b2c245f8db088304c14.png

在上图中,Step1,4,5都没有变。

Step 2做了2个事情。

1. 选择出当前buffer中的最高QoS。与第一种做法不同,因为这里并不是直接选出最高QoS的bit array,只是选出2bit的最高QoS,虽然还是需要大概3个串联mux的逻辑,但是因为待选择数据有规律(2’b00-2b11)并且位宽小,这里实际上保守估计只需要大概4级逻辑门。加上与第一种做法一样的每个QoS Valid head array需要做位或的5级逻辑,这里需要9级逻辑。

2. 这个地方并行,并行,并行(重要的事情说三遍)地进行了Round-Robin的仲裁。这里是对所有QoS阈值的Valid head array都做了Round-Robin仲裁,(而第一种做法是只对最高优先级QoS做仲裁),预先得到了所有阈值QoS的仲裁结果。这样一来,在最高优先级选择出来的时候,仲裁结果早已经准备就绪了。(根据之前分析,RR按6级计算,小于最高优先级选择的9级逻辑。)这样一来,6级的RR逻辑成功地被“隐藏”在9级逻辑中,很好地实现了串行逻辑到并行逻辑的转换。(有兴趣可以阅读本公众号另一篇文章“芯片性能小谈——时间并行”,里面提到了多一些的并行思想,如有错误欢迎指正。)

Step 3是对所有阈值QoS的仲裁结果的选择。这里是一个one-hot的4选1,只需要2级逻辑。

由此我们可以看到,这个方案的关键路径只需要3+9+2+4+5=23级。足足少了4.5级逻辑。虽然还是算比较长,但至少多了许多收敛的可能性。这样做的主要代价就是需要多做几份RR仲裁,牺牲了面积功耗,换取了性能。

 

在这个例子中,我们看到通过将RR仲裁逻辑与最高QoS选择逻辑的处理从串行转成并行,直接掩盖掉了整个RR仲裁逻辑的延时。实际上这种做法是很常见而有效的,可以应用到很多时序收敛的问题中。比如经典的进位选择加法器。这里简单摘取一段百度百科介绍,有兴趣的可以自行搜索具体实现方案:

“进位选择加法器(Carry-Select Adder)是加法器中的一种。在逐位进位加法器(Carry-RippleAdder)中,除最低位外,每一位都需要等待前一位输出的进位信号。那么不妨预先考虑进位输入的所有可能,对于二进制加法来说,就是0与1两种可能,并提前计算出若干位针对这两种可能性的结果。等到前一位的进位来到时,可以通过一个双路开关选出输出结果。”

在这里面“预先考虑所有可能”和“提前计算”正是这种方法的关键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值