自学内容网 自学内容网

ic进阶|性能篇01:ic设计中的重定时到底是什么?一文带你了解重定时的原理!

在这里插入图片描述
本篇文章让我们来讨论在芯片设计、综合和实现中经常用到的一项技术——重定时(retiming,也被称为寄存器平衡),该项技术能够在不改变电路的逻辑功能的前提下,改变系统中延时(寄存器)数目和分布,以达到优化时序,缩短时钟周期或者是减少寄存器数目的效果。

为了让我们对重定时有个初始的了解,先举个对IIR滤波器进行重定时的例子:
在这里插入图片描述
上图左图是重定时之前,右图是重定时之后,可以发现在使用了重定时后:

关键路径发生了变化,从原有的一个乘法器和一个加法器变成了两个加法器,由于乘法器的计算比加法器更加复杂,这相当于关键路径的延迟减少了。而关键路径是所有路径中具有最长计算时间的路径,关键路径计算时间限制了电路的时钟周期的缩小。因此,我们可以利用重定时来减少关键路径的计算时间,从而实现增加电路的时钟频率的目的。

寄存器的数量发生了变化,从原有的4个变成了5个,可见重定时可以改变电路中寄存器的数量。

从上面的分析可以看出,我们可以设定不同的方向,利用重定时对电路进行优化,即:(1)寄存器数量最少;(2)时钟周期最小;(3)两者折中。

一、重定时的定量描述

为了准确描述重定时,我们需要对重定时采用数学的方式进行定量描述,我们将电路中的任务或者运算单元称为节点。而重定时实际上就是通过改变这些节点之间的寄存器的位置来对电路进行优化的。

为了定量重定时前后电路发生的变化,我们可以给每个节点V赋予一个整数值r(V),将重定时过程视为在节点V的输入边增加r(V)个延时,给节点U的输出边减去r(U)个延时(请注意这里的r(V)和r(U)可正可负的整数)。并用w(e)来表示两个节点之间原始的延时数目(也就是寄存器的数目),用wr(e)表示两个节点间重定时之后的延时数目。那么重定时之后从节点U到节点V的新边的延时wr(e)可以使用下式表示:

在这里插入图片描述
从上式我们可以看出重定时之后的延时wr(e)需要大于0,这是因为路径中不可能存在负的延时,也就是说重定时不能将路径的延时变为负数,因此必须保证所有边的wr(e)>=0,只有满足这个约束条件,重定时才是可行的。

我们可以列出电路中所有边的延时wr(e),这些wr(e)>=0的不等式组成了重定时的可行性约束,重定时的解必须通过解这个多元一次方程组才能得到。对于这个不等式组来说可以存在多个解,因此如何求出最优解呢?这实质上是一个最短路径问题,可以使用一些最短路径算法,例如Bellman_Ford算法或者Floyd-Warshall算法进行求解。

二、重定时的性质

接着让我们来进一步了解一下重定时的几条性质,首先我们需要了解一下以下两个基本概念:

路径:由边和节点组成的序列,例如在这里插入图片描述
,其中的V即节点,e即节点之间的边。

环路:封闭的路径,也就是在这里插入图片描述

在了解到以上两个概念之后,我们进一步介绍重定时的性质,即以下4项:

  1. 重定时的路径在这里插入图片描述
    的对应延时为:

在这里插入图片描述

其中w§为这条路径的总延时。

  1. 重定时不会改变环路之中的延时总数,这很好理解,因为环路的起点到终点都是同一个节点,于是有:

在这里插入图片描述

  1. 重定时不会改变数据流图的迭代边界。

解释一下,这里的迭代边界是指的对于一些dsp算法迭代以及采样周期存在的最低限制。因为环路延时不会由于重定时发生变化,而一个dsp算法的迭代边界只和关键环路的环路延时相关,因此重定时不能改变迭代边界。

  1. 每个节点的重定时值增加一个常数j,不会改变重定时的映射,因为:
    在这里插入图片描述

三、割集重定时和流水线

本小节我们介绍一下重定时的两个特例,这些特例可以在某些情况下简化重定时的计算。

3.1 割级重定时

首先是第一个特例——割集重定时,它是重定时的一种特殊情况,割集是一组边,可以把它们从原始图中移走而产生两个不相连接的子图G1和G2,并且会使得G1到G2的每条边都增加k个延时,使G2到G1的每条边都减少k个延时(k可正可负)。

在割集重定时中,可以认为子图G1每个节点的重定时的值都为j,子图G2的的每个节点重定时值都为j+k,根据上一节的性质4可知,j值可以是任意值,因此可以省去。所以需要确定的仅有k值,而对于重定时来说需要满足可行性约束,因此有以下关系式:

在这里插入图片描述
于是只要保证k满足下式即可:

在这里插入图片描述
这个式子的意义是:一个合理的k值必须大于负的G1到G2的最小延时,且小于G2到G1的最小延时。

接下来让我们举个栗子说明割集重定时的使用,下图是文章开头的那个IIR滤波器的数据流图,我们将其中的节点1,3划到子图G1中,将节点2,4设为子图G2,从图中可以发现G1到G2的最小延时为0,G2到G1的最小延时为1,因此k大于等于0,小于等于1,设0不会改变寄存器的位置,因此我们设k=1,于是可以得到图c中的IIR滤波器,这就是通过隔集重定时改变电路的一个简单应用了~

在这里插入图片描述
再举个例子,这次我们将节点2设为G2,其他节点为G1,继续取k=1,于是产生了下面的图b中的新IIR滤波器,图中的寄存器数量和分布都发生了变化,可见我们可以利用割集重定时简单又快速的对电路进行重定时!

在这里插入图片描述

3.2 流水线

流水线也可以视为割集重定时的一种特殊情况,因为对流水线使用割集时,并不会有G2到G1的边,我们把这种割集称为前馈割集。对流水线使用割集重定时的效果如下所示:
在这里插入图片描述
上图可以即是采用了k=2的割集重定时,可以发现这种情况下只会使得G1到G2的边增加或者减少延时,因此可以将流水线看作重定时的一种特殊情况。

3.3 割级重定时和减速

割集重定时也可以和减速(slow-down)结合使用,按照以下步骤进行:

  1. 将原有电路进行N倍减速,即使用N个寄存器替代原结构中的每个寄存器。

  2. 进行割集重定时。

下面是一个例子:

在这里插入图片描述
如上图所示,先对原结构进行2倍降速,再进行k=1的割集重定时,最终的结构就相当于再每一级中间都插入了寄存器,且不会改变功能!这样对时序的优化是显而易见的,因为关键路径缩小了。接下来我们用数据说明上面的电路的变化:

我们假定加法器和乘法器需要1u.t和2u.t,且原结构滤波器的关键路径上有101个加法器和2个乘法器,因此最小的抽样周期为105u.t.,而新的结构的关键路径上只有2个乘法器和2个加法器,因此最小抽样周期只有6u.t.*2=12u.t.(因为进行了2倍降速,所以得乘以2)。

因此我们可以利用降速和割级重定时使得系统的关键路径减小,使得将系统的时钟周期缩小,提高系统工作频率,但是也是因为使用了N倍减速,所有采样率减少为1/N,提高了采样周期为N倍,硬件的利用效率也随着变为1/N,会造成面积的浪费。

四、总结

本篇文章的内容差不多结束了,我们可以使用割级重定时来快速的完成重定时操作,除此之外还有其他更加复杂的重定时,比如说我们可以使用重定时的可行性约束,以及添加额外的时钟周期约束和扇出约束,来求得更为优化的重定时解,从而使得电路的时钟周期和寄存器数量最小化,这部分的内容大家感兴趣的话可以自行了解~

以下是往期精彩内容:
ic进阶|面积篇01:改善面积的神器–折叠技术!以fir滤波器为例带你了解折叠技术!(qq.com)

如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!
在这里插入图片描述


原文地址:https://blog.csdn.net/demayiya/article/details/140389648

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!