VLSI数字信号处理系统——第三章流水线与并行处理
作者:夏风喃喃
参考:
(1) VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著
(2) socvista https://wenku.baidu.com/u/socvista?from=wenku
一.引言
本章的内容可以大致分为两部分:
1)主要介绍如何在DSP 程序中应用流水与并行技术,同时还给出了流水的严格定义。并行处理的严格定义将在“展开”一章做进一步的探讨。注意,若一个非递归结构,可以使用流水线,则一定可以实现并行处理。
2)流水和并行处理主要有高速度和低功耗的优点。流水线技术用于斩断有效关键路径(也就是缩短关键路径),从而提高系统运行的频率,吞吐率也得到相应的提高;并行处理技术通过构造多份“相同”的硬件电路,以同时处理多个输入样本点(提高并行程度),来提高吞吐率。流水线的缺点是增加了锁存器的数目并且增加了系统的迟滞,即流水系统第一个输出数据时间与原来时序系统第一个输出数据时间相比会有滞后。
下图是一个插入流水线(pipelining)寄存器实现流水线的原理图,数据通路是一条前向非递归路径。在割线处插入流水线寄存器,使得此一级流水线结构中的关键路径比原来的无流水线结构减小了,这样迭代周期可以缩小,吞吐率也能提高。
下图是一个并行处理的结构,二阶的并行处理系统可以将输入序列分为奇偶两列,分别由两套相同的硬件电路来算,增加了吞吐率。
二.流水线
流水线的定义:
1)一个架构的速度(或时钟周期)由任意两个寄存器间、一个输入与一个寄存器间、一个寄存器与输出间或输入与输出间路径中最长的路径限定。
2)这个最长的路径或“关键路径”可以通过在架构中恰当插入流水线寄存器来缩短。
3)流水线寄存器只能按照穿过任一图的前馈割集的方式插入。
核心思想:流水线寄存器要插入到能斩断所有关键路径的边上才能缩短关键路径长度。
割集和前馈割集:
割集:割集是一个图边的集合,如果从图中移去这些边,图就成为不相连的了。
前馈割集:如果数据在割集的所有边上都沿前进方向移动,这个割集就称为前馈割集。
流水线寄存器只能在前馈割集上插入,而且必须在单向割集上插入。
流水线寄存器插入方法:
1)当DSP系统有多个输入端和多个输出端时,应该先把多个输入端折合成一个输入节点,多个输出端折合成一个输出节点,输入节点和输出节点计算不耗时间。比如图四a)的DSP框图,输入有四个分别为a(n)、b(n)、c(n)和d(n),输出有两个分别为y(n)和z(n);图四b)为其DFG,所有输入折合为节点I,所有输出折合为节点O。
2)假设加法节点计算时间
T
A
=
1
u
.
t
.
T_A=1u.t.
TA=1u.t.,乘法节点计算时间为
T
M
=
2
u
.
t
.
T_M=2u.t.
TM=2u.t.。目前的关键路径长度为
4
u
.
t
.
4u.t.
4u.t.。一些可插入寄存器的单向割集如图五所示。a)和c)只是将一个计算时间为0u.t.的输入节点从关键路径是去掉而已,并不算斩断有效的关键路径。b)和d)斩断有效关键路径,使得关键路径的长度分别减少为
2
u
.
t
.
2u.t.
2u.t.和
3
u
.
t
.
3u.t.
3u.t.。
3)细粒度流水线,就是假设那些决定架构关键路径的节点是可以拆分的,将其拆分之后再运用流水线寄存器将其斩断,从而进一步缩短关键路径。
如果乘法节点能拆分,比如拆成两个部分,分别为节点*1 和节点*2,且两个节点计算时间相等都为
1
u
.
t
.
1u.t.
1u.t.,也就是原始乘法节点的一半,如图六a),那么可以再次插入一级流水线(红色割线所示),就可以斩断乘法节点,从而得到关键路径长度为
1
u
.
t
.
1u.t.
1u.t.的“终极”细粒度流水架构如图六b)所示。
三.并行处理
如果可以划分为一组不相关的计算能够在一个流水线系统中按交替的方式计算,那么它也能够利用复制的硬件按并行处理的模式计算。
并行处理实现方法:
3阶FIR滤波器的并行处理,迭代公式如下:
直接实现形式如下图,关键路径为*++,长度是
T
M
+
T
A
+
T
A
T_M+T_A+T_A
TM+TA+TA:
为了将其改造为一个3 阶并行处理系统(可同时处理N份样本点的系统称为N 阶并行处理系统),可先对其迭代公式进行如下改造,将
n
=
3
k
、
3
k
+
1
n=3k、3k+1
n=3k、3k+1和
3
k
+
2
3k+2
3k+2带入原迭代公式,得到如下3 个新迭代公式:
只要输入
x
(
3
k
)
、
x
(
3
k
+
1
)
x(3k)、x(3k+1)
x(3k)、x(3k+1)和
x
(
3
k
+
2
)
x(3k+2)
x(3k+2)就可以计算出
y
(
3
k
)
、
y
(
3
k
+
1
)
y(3k)、y(3k+1)
y(3k)、y(3k+1)和
y
(
3
k
+
2
)
y(3k+2)
y(3k+2),其他的输入
x
(
∗
∗
∗
)
x(***)
x(∗∗∗)都是之前就已经输入的数据,可由
x
(
3
k
+
1
)
x(3k+1)
x(3k+1)和
x
(
3
k
+
2
)
x(3k+2)
x(3k+2)延时而得。
块处理系统:并行处理系统也称为块处理系统,因为系统的输入是一块一块的,比如我们所讨论的3阶并行处理系统,每次输入都是3个数据为一块,即 x ( 3 k ) 、 x ( 3 k + 1 ) x(3k)、x(3k+1) x(3k)、x(3k+1)和 x ( 3 k + 2 ) x(3k+2) x(3k+2),输出也是3个数据为一块,即 y ( 3 k ) 、 y ( 3 k + 1 ) y(3k)、y(3k+1) y(3k)、y(3k+1)和 y ( 3 k + 2 ) y(3k+2) y(3k+2)。块中所包含的数据个数 L L L称为块尺寸,在我们系统中,块尺寸 L L L为3。
并行处理的采样周期与迭代周期:迭代周期就是时钟周期, 即 T i t e r = T c l k T_{iter}=T_{clk} Titer=Tclk , 根据系统的并行度与迭代周期, 可计算出采样周期为 T s a m p l e = T i t e r / L T_{sample}=T_{iter}/L Tsample=Titer/L, L L L为并行处理系统的块尺寸。
L L L级减慢:并行处理系统中的一个延时,跟原始串行系统中的延时不太一样,称为块延时,也称 L L L级减慢,称为 L − s l o w L-slow L−slow。从代数式看,就是 x ( 3 k + 2 ) x(3k+2) x(3k+2)延迟一个单位,得到 x ( 3 ( k − 1 ) + 2 ) = x ( 3 k − 1 ) x(3(k-1)+2)=x(3k-1) x(3(k−1)+2)=x(3k−1)。综上所述,对于块尺寸为L 的并行处理系统,如果某端口输入为 x ( L k + m ) x(Lk+m) x(Lk+m), m = 0 , … , L − 1 , k m=0,…,L-1,k m=0,…,L−1,k 为非负整数,延时一个单位得到 x ( L ( k − 1 ) + m ) = x ( L k + m − L ) x(L(k-1)+m)=x(Lk+m-L) x(L(k−1)+m)=x(Lk+m−L)。
块尺寸为3的3阶FIR滤波器如下图所示:
四.流水线与并行处理的功耗减低
传播延迟:CMOS简化传播延迟公式如下所示。
其中
C
c
h
a
r
g
e
C_{charge}
Ccharge为等价的充放电电容,
V
0
V_0
V0为门电路工作电压(电源电压),
V
t
V_t
Vt 为门电路阈值电压,参数
k
k
k为工艺参数。
动态功耗:CMOS简化动态功耗公式如下。
C
t
o
t
a
l
C_{total}
Ctotal为电路总的等价电容,
V
0
V_0
V0为门电路工作电压,
f
f
f为电路时钟频率。
注意:: C c h a r g e C_{charge} Ccharge与 C t o t a l C_{total} Ctotal是不同的概念。前者与关键路径有关,是关键路径上的充放电电容,用于衡量信号延时;后者与整个系统有关,是整个电路系统中所有的充放电电容,用于衡量系统的整体动态功耗。
1.用流水线降低功耗
如下图所示,单独把旧电路中关键路径(红色线段)拿出来分析,加入M级“理想的”流水
线之后得到新电路(蓝色线段)。不论是旧电路还是新电路,都采用相同的时钟频率来运行,提高时钟频率只是流水的其中一个用途,这里我们不需要提高系统时钟频率,而是需要降低系统功耗。
流水线技术斩断了原始系统的有效关键路径,也相当于分解了原始系统的有效关键路径充电电容。约定以下符号:
C
o
−
c
h
a
r
g
e
C_{o-charge}
Co−charge:为旧电路关键路径上的等价充放电电容,上图的整段红线所代表的电容;
C
n
−
c
h
a
r
g
e
C_{n-charge}
Cn−charge:为新电路关键路径上的等价充放电电容,上图一小段蓝线所代表的;
V
0
V_0
V0:为旧电路工作电压;
b
V
0
bV_0
bV0:为新电路工作电压,b 是大于0 小于1 的数(其实从这就可以看出我们要通过降低工作电压的方法来降低功耗);
P
o
P_o
Po:为旧电路功耗;
P
n
P_n
Pn:为新电路功耗;
C
t
o
t
a
l
C_{total}
Ctotal:新旧电路的等价电容,可以近似认为流水线不改变电路总电容(实际上加入流水线会使
C
t
o
t
a
l
C_{total}
Ctotal增大一点点)。
由于“理想”M级流水线的插入,使得
C
n
−
c
h
a
r
g
e
C_{n-charge}
Cn−charge=
C
o
−
c
h
a
r
g
e
/
M
C_{o-charge}/M
Co−charge/M。传输延时公式中的充放电电容变小,而我们又不需要改变传输延时
T
p
d
T_{pd}
Tpd,那么肯定能带来工作电压的减小,新旧电路传播延时相等,且各自的关系如下式:
合并两式,得到计算工作电压减小因子b的公式,如下式所示:
新的电路功耗为:
2.用并行处理降低功耗
原始电路的关键路径如红线段所示,运行频率为
T
s
e
q
T_{seq}
Tseq,系统电压为
V
0
V_0
V0;使用N阶并行处理来构造新电路,如蓝色线段所示,由于我们不需要提高系统吞吐率,所以在N阶并行处理电路中应该以原始时钟频率的N 分之一,也就是以
N
∗
T
s
e
q
N*T_{seq}
N∗Tseq为周期来运行(系统速率变慢,但吞吐率不变)。
并行处理没有斩断有效关键路径,故而关键路径的充放电电容不变,均为
C
c
h
a
r
g
e
C_{charge}
Ccharge,但是系统的总电容为原来的N倍,即
N
∗
C
t
o
t
a
l
N*C_{total}
N∗Ctotal。新旧电路吞吐率相等,关系如下式:
合并两式,得到计算工作电压减小因子b的公式,如下式所示:
新的电路功耗为:
P
n
=
N
C
t
o
t
a
l
(
b
V
0
)
2
(
f
/
N
)
=
C
t
o
t
a
l
(
b
V
0
)
2
f
=
b
2
P
0
P_n=NC_{total}(bV_0)^2(f/N)=C_{total}(bV_0)^2f=b^2P_0
Pn=NCtotal(bV0)2(f/N)=Ctotal(bV0)2f=b2P0
可以看到, L L L级流水线和 L L L阶并行处理的采用在不改变原始时序电路性能的情况下有相同的功耗降低能力。
3.流水线与并行处理的结合
下图(a)为原始时序电路,其关键路径用时为
T
T
T,图(b)为流水线与并行处理结合的电路,其关键路径被减小为一半且使用了三阶并行处理,其关键路径用时为
3
T
3T
3T。(a)和(b)拥有相同的吞吐率与时钟频率。
根据流水线与并行处理的传播延时公式,列出如下等式:
化简后,得到计算工作电压减小因子b的公式,如下式所示:
新的电路功耗为:
P
n
=
b
2
P
0
P_n=b^2P_0
Pn=b2P0
五.结论
本章介绍了非递归DSP系统中的流水线和并行处理方法,两种方法都可以提高非递归DSP系统采样频率。
流水线中,流水线寄存器放置在SFG的前馈单向割集处,使关键路径计算时间降低,结果使时钟频率提高,采样频率提高。
并行处理中,复制原始串行系统硬件,得到一个MIMO并行系统,使时钟频率不变,采样频率提高。
流水线和并行处理技术进行低功耗设计,就是牺牲电路面积(流水和并行占用了更多的电路资源),换取了较低的工作电压,从而降低系统的功耗。
本章推荐:关于大量运用流水并行技术进行低功耗设计的项目可以参考opencore上由Xuke发起的h.264解码器设计项目(nova)。Xuke 现在IBM 担任Staff R&D Engineer。