VLSI数字信号处理系统——第二章迭代边界

VLSI数字信号处理系统——第二章迭代边界

作者:夏风喃喃
参考:VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著

一.数据流图的表示

DFG表示:DSP程序通常用DFG表示,它是一种可以用来描述程序的有向图。图2-1a表示程序 y ( n ) = a y ( n − 1 ) + x ( n ) y(n) = ay(n-1) + x(n) y(n)=ay(n1)+x(n),图2-1b是其简化后的表示。A表示加法,执行时间为2;B表示乘法,执行时间为4;边A→B的延时为0,边B→A的延时为1。一个节点的一次迭代表示该节点执行一次,一个DFG的一次迭代表示该DFG中每个节点都执行一次。
在这里插入图片描述
迭代优先级约束:DFG内没有延时的边是一种迭代内优先级约束,有一个延时或者多个延时的边是一种迭代间优先级约束。这些约束指定了DFG的执行顺序,即A的第 k k k次迭代先于B的第 k k k次迭代,B的第 k k k次迭代先于A的第 k k k+1次迭代。单箭头表示迭代内优先级约束 A k A_k Ak B k B_k Bk,双箭头表示迭代间优先级约束 B k B_k Bk=> A k + 1 A_{k+1} Ak+1

关键路径:在DFG中,具有零延时的所有路径中,具有最长运算时间的路径定义为关键路径,关键路径是组合逻辑在每拍的执行中所需最长路径。关键路径的运算时间也是DFG一次迭代的最小运算时间。如图2-1b中关键路径A→B,运算时间6 u . t . u.t. u.t.

递归与非递归DFG:非递归DFG不包含环路,递归DFG至少有一个环路。递归DFG存在一个基本极限,该极限表示了关于用硬件实现基本DSP程序能够有多快,称为迭代边界(iteration bound) T ∞ T_∞ T

二.环路边界和迭代边界

环路周期:环路未经优化时,目前的每拍最短允许的周期,即关键路径的时长。

迭代周期:系统(可能为多环路)未经优化时,目前的每拍最短允许的周期,即最大环路周期的时长。

环路边界:表示环路运行时间的最低限制,第 l l l 个环路的边界指 t l / w l t_l/w_l tl/wl,其中 t l t_l tl 是环路运行时间, w l w_l wl 是指环路中延时数目(可以理解为环路经过优化后每拍最短的允许的周期)。图2-1b中的环路边界是6/1 = 6 u . t . u.t. u.t.

关键环路:关键环路是具有最大环路边界的环路。

迭代边界:关键环路的环路边界就是迭代边界。这个边界是DSP程序中迭代或者采样周期的最低限制(可以理解为系统(可能为多环路)经过优化后每拍最短的允许的周期)。
在这里插入图片描述

三.计算迭代边界的算法

1.最长路径矩阵(LPM)算法

LPM算法中,首先构建一系列矩阵,然后通过观察矩阵斜对角线上的数据,就可以得到迭代边界,以下图中的DFG为例。
DFG图例
d d d表示延时数目,矩阵 L ( m ) L^{(m)} L(m) m m m = 1,2,……, d d d,按照下面方法构建:

step1)构建矩阵 L ( 1 ) L^{(1)} L(1):从延时单元 d i d_i di到延时单元 d j d_j dj中经过正好 m m m-1延时(不包含 d i d_i di d j d_j dj)的所有路径中,用 l i , j ( m ) l_{i,j}^{(m)} li,j(m)表示最长的运算时间。如果这样的路径不存在,那么 l i , j ( m ) l_{i,j}^{(m)} li,j(m) = -1。例如, l 3 , 1 ( 1 ) l_{3,1}^{(1)} l3,1(1)考虑 d 3 d_3 d3 d 1 d_1 d1零延时的路径有 d 3 d_3 d3 n 5 n_5 n5 n 3 n_3 n3 n 2 n_2 n2 n 1 n_1 n1 d 1 d_1 d1,路径需要运算时间为5,所以 l 3 , 1 ( 1 ) l_{3,1}^{(1)} l3,1(1) = 5。

step2)递归构建高阶矩阵 L ( m ) L^{(m)} L(m):更高阶的矩阵 L ( m ) L^{(m)} L(m) m m m = 2,……, d d d,可以通过下面的递归计算每一个矩阵元素。
在这里插入图片描述
其中K是区间[1, d d d]中使得 l i , k ( 1 ) l_{i,k}^{(1)} li,k(1) = -1或 l k , j ( m ) l_{k,j}^{(m)} lk,j(m) = -1都不满足的整数k的集合。例如 l 2 , 1 ( 2 ) l_{2,1}^{(2)} l2,1(2)先在集合{1,2,3,4}中寻找合适的集合K,因为 l 2 , 3 ( 1 ) l_{2,3}^{(1)} l2,3(1) = 0, l 3 , 1 ( 1 ) l_{3,1}^{(1)} l3,1(1) = 5,所以3属于K,而k = 1,2,4中每个数, l 2 , k ( 1 ) l_{2,k}^{(1)} l2,k(1) l k , 1 ( 1 ) l_{k,1}^{(1)} lk,1(1)两者至少有一个等于-1,故不属于K。所以 l 2 , 1 ( 2 ) l_{2,1}^{(2)} l2,1(2) = max(-1,0+5) = 5。

以此类推, L ( 3 ) L^{(3)} L(3)的计算需要 L ( 1 ) L^{(1)} L(1) L ( 2 ) L^{(2)} L(2),例如 l 3 , 3 ( 3 ) l_{3,3}^{(3)} l3,3(3) = max(-1, l 3 , k ( 1 ) l_{3,k}^{(1)} l3,k(1)+ l k , 3 ( 2 ) l_{k,3}^{(2)} lk,3(2)) = max(-1,5+0) = 5。

step3)计算迭代边界:最终,此DFG的迭代边界由下式算出。
在这里插入图片描述

2.最小环均值(MCM)算法

环均值:环 c c c的环均值表示 c c c的边的平均长度,即环中边的长度求和后除以环中边线的数目,MCM表示所有环均值的最小值。

一个新图形 G d G_d Gd的最大环均值即迭代边界,其中 G d G_d Gd可以从相应的DFG中得到(称该DFG为 G G G)。

step1) G d G_d Gd的构建:若 d d d G G G中延时单元数,则 G d G_d Gd d d d个节点,每个节点对应G中的一个延时单元。图 G G G中从延时 d i d_i di到延时 d j d_j dj的所有不经过任何延时的路径中的最长路径的长度就是 G d G_d Gd中从节点 i i i到节点 j j j的边的权重,用 w ( i , j ) w(i,j) w(i,j)表示。如果从延时 d i d_i di到延时 d j d_j dj没有零延时路径,那么 G d G_d Gd中边 i i i j j j不存在。例如下图(a)即example中DFG的 G d G_d Gd
在这里插入图片描述
step2) G d ‾ \overline{G_d} Gd的构建:为了计算 G d G_d Gd的最大环均值,可以将 G d G_d Gd边的权重乘以 -1 构建 G d ‾ \overline{G_d} Gd并寻找其MCM,然后将其乘 -1 即可。例如上图(b)即example中DFG的 G d ‾ \overline{G_d} Gd

step3) G d ‾ \overline{G_d} Gd的MCM求迭代边界:通过建立 d d d + 1个向量序列 f ( m ) f^{(m)} f(m) m m m = 0,1,……, d d d,其中每个向量的大小为 d d d × 1,可以找到 G d ‾ \overline{G_d} Gd的MCM。指定 G d ‾ \overline{G_d} Gd的一个参考节点称为 s s s。初始向量 f ( 0 ) f^{(0)} f(0)如下确定: f ( 0 ) ( s ) f^{(0)}{(s)} f(0)(s) = 0, f ( 0 ) f^{(0)} f(0)的其余项全部设为 ∞ ∞ 。若example中节点1为 G d ‾ \overline{G_d} Gd的参考节点,那么有
在这里插入图片描述
其余的向量 f ( m ) f^{(m)} f(m) m m m = 0,1,……, d d d,按照下面的公式递归计算:
在这里插入图片描述
其中 I I I表示在 G d ‾ \overline{G_d} Gd中从节点 i i i j j j存在一条边( i i i j j j)的节点集合。example的向量序列如下:
在这里插入图片描述
迭代边界可以如下计算:
在这里插入图片描述
在example中, d d d = 4,表2-1列出了找MCM的情况( ∞ ∞ - ∞ ∞ 视为0):
在这里插入图片描述
利用表2-1右边的列,可以得到DFG的迭代边界:
在这里插入图片描述

四.总结

DSP程序都具有从 n n n = 0执行到 n n n = ∞ ∞ 时的性质。这些程序常常用DFG来表示,它们或者是递归的,或者是非递归的。如果DFG是递归的,对于该DSP程序的硬件实现,迭代边界是其最小采样周期的基本极限。我们已经讨论了两种计算迭代边界的算法,根据时间复杂度,对于大多数情况,MCM算法比LPM算法要快。

附:LPM算法迭代的python实现

import numpy as np

#延迟单元的数目
delay_num = 2
#创建三维全零数组定义L矩阵组
L = np.zeros((delay_num,delay_num,delay_num))
#将由DFG手动推导的L(1)写入三维数组的第一层
L[:,:,0] = np.array([[8,8],[4,4]])
#待选择的k的集合
K_forselect = range(1,delay_num+1)

#利用迭代通过L(1)及L(m-1)遍历并计算L(m)高阶矩阵的元素
for d in range(1,delay_num):
    for i in range(0,delay_num):
        for j in range(0,delay_num):
            max_list = [-1]
            K_temp = list(K_forselect)
            for k in K_forselect:
                if(L[i,k-1,0] == -1 or L[k-1,j,d-1] == -1):
                    K_temp.remove(k)
            for k in K_temp:
                max_list.append(L[i,k-1,0]+L[k-1,j,d-1])
            L[i,j,d] = max(max_list)

#遍历每一个矩阵的对角线元素,并计算迭代边界
bound_list = []
for d in range(0,delay_num):
    for i in range(0,delay_num):
        if(L[i,i,d] != -1):
            bound_list.append(L[i,i,d]/(d+1))
iter_bound = max(bound_list)
print("Iteration bound is ",iter_bound)
  • 12
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值