对于芯片来说,如果能够减少其中的大面积单元(例如乘法器、除法器、ram等等)的使用,对芯片面积的优化是十分重要的。本篇文章,我们介绍一种用于减少芯片面积的技术——折叠技术,这种技术是通过对同一运算单元(例如一个加法器)的共享,使得其能够分时复用在多个不同时刻的运算过程中,也就是以一个运算单元来替代多个运算单元,这样自然能够减少芯片的面积。
一、折叠技术
首先,让我们举一个例子,来说明折叠技术的应用:假设我们需要计算输入信号a、b、c的求和结果,最为直接的方法即使用两个同样的加法器先计算a+b,再计算b+c,例如下图左侧所示:
为了对面积进行优化,我们可以使用折叠计算,即使用一个加法器和两个选择器,对上述输入信号进行分时计算,例如:
-
周期0:选择信号a和b作为加法器的输入进行加法计算,并对加法器输出结果打一拍。
-
周期1:选择上一周期的计算结果(a+b)、和c作为加法器的输入,同样加法器输出结果将再打一拍。
-
周期2: 输出完整的a+b+c的计算结果,同时,加法器输出下一轮计算的中间结果a+b。
从以上的分析,我们可以发现折叠计算实质上就是一种以时间换取面积的技术。通常,折叠技术可以在增加计算时间N倍的代价之下,减少硬件功能单元的数目到1/N。因此,如果我们只使用了并行结构或折叠技术的话,就会有两种相反的极端情况:一个是只采用并行结构,每个算法运算都分配了单独的功能单元,这样的话计算速度会很快,但是面积也会相应的增长;另一个是只使用折叠技术,相同的功能都在一个功能单元上执行,这样的话对面积优化,但是计算效率就会延迟。因此,在实际芯片设计中,最好是结合芯片设计指标,对这两种设计方法综合应用。
二、折叠变换
当我们需要使用折叠技术时,首先我们要做的就是定义折叠集,及其元素的顺序,这里的折叠集是由相同功能单元所执行运算的有序集,每一个折叠集包含**N个单元,我们将N称为折叠因子,也就是折叠到一个功能单元的运算数目,用于表征折叠的强度,**其中的一些可能是空运算。以下是一个3阶fir的例子:
如上图所示,一个3阶的fir滤波器,由4个乘法器和3个加法器组成,由于乘法器和加法器之间没有延时单元,我们可以认为由一个乘法器和一个加法器构成了一个基础功能单元(如上图的虚线框所示),因此,我们可以定义折叠因子N=4,于是有折叠集S0={MA0,MA1,MA2,MA3