玩命加载中 . . .

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

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

今天想分享几种流保序策略。保序问题在不同的应用领域都会遇到,毕竟硬件电路本质上是需要很多数据流传输的。各种协议的接口,处理器的数据处理,指令处理等都离不开对应数据有序的传输。

如果只有一条数据流,可以直接使用一个FIFO保序。如果是多数据流,多个读写口,可以分不同ID使用不同FIFO保序。今天想讨论的是多数据流混合场景下只有1个读口和1个写口的保序。不同的数据流有对应不同的ID,大致有以下5种不同的保序策略。

首先来看一下场景,这是一个在大多数设计中都会遇到的数据包调度问题。有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,优先级较高的需要尽量先输出。