玩命加载中 . . .

我们知道在芯片设计中,降低动态功耗的方法有很多种。比如clock gating,power gating等。今天想介绍一个通过减小移动数据位宽来降低动态功耗的方法。

动态功耗的来源是信号的传播,翻转。clock gating通过减少时钟信号的翻转,降低了寄存器clk pin本身的功耗,并且通过寄存器的特性,间接减少了Q pin的翻转,从而降低了数据链路的功耗。而power gating更绝,直接将电路断电,更无翻转可言。这两种方式本质上都是在电路或者某些寄存器没有数据更新需求的时候减少无谓的信号翻转,以此来降低功耗。而减小传播数据的位宽,可以在有数据更新需求的时候减少动态功耗。毕竟传递的数据少了,需要翻转的信号自然也少了。但是这样做需要考虑上减小数据位宽所带来的一点额外逻辑开销造成的功耗。不过大多数时候都能得到正收益,特别是当数据位宽较大的时候。

首先来看一下场景,这是一个在大多数设计中都会遇到的数据包调度问题。有A,B两个输入通道,向数据调度模块DUT输入数据。该调度模块DUT有一个输出通道C。A,B和DUT,DUT和C都是通过简单的握手传输数据。

img

两个输入通道都有数据包输入,可以同时输入。数据包以packet为单位,每个packet为128bit。不同的数据包有不同的id,id是4个bit。A和B通道不会同时输入同ID的数据。每个packet带有2bit的qos,qos越高,可以理解为该id的packet优先级相对于其他id的packet优先级越高。输出通道没有反压,只要有数据就可以出去。输入通道接受反压。数据输出的条件是,同id的packet要保序输出,不同id的packet,优先级较高的需要尽量先输出。