发明名称 全芯片互连线功耗最优的布局阶段缓冲器规划方法
摘要 全芯片互连线功耗最优化的布局阶段缓冲器规划方法属于互连线设计优化技术领域,其特征在于,含有以下步骤:读入模块信息及互连线信息,建立电路的逻辑拓扑,边状态初始化为1,计算模块间互连线的时间松弛量,计算逻辑拓扑图中各边权重,利用预流推进方法得到逻辑拓扑图的最大割集,对该割集中的每条边分配时间松弛量,对于每一段互连线,根据时间松弛量分配结果,计算所需要的缓冲器尺寸和个数,以及电路消耗的总互连线功耗。本发明在不影响电路延时性能的前提下,降低了互连线总功耗,具有很高的执行效率,具有工业应用价值。
申请公布号 CN100538711C 申请公布日期 2009.09.09
申请号 CN200810101598.8 申请日期 2008.03.10
申请人 清华大学 发明人 马昱春;贺祥庆;洪先龙;蔡懿慈;邱翔
分类号 G06F17/50(2006.01)I 主分类号 G06F17/50(2006.01)I
代理机构 代理人
主权项 1.全芯片互连线功耗最优化的缓冲器规划方法,其特征在于,所述方法是在计算机中依次按以下步骤实现的:步骤(1).初始化设置功耗计算用的工艺参数:电源电压V<sub>DD</sub>、时钟频率f<sub>clk</sub>、单位尺寸缓冲器漏电流I<sub>offn</sub>、单位尺寸缓冲器短路电路I<sub>short</sub>,设置缓冲器的相关参数:负载电容C<sub>L</sub>、驱动输出电阻R<sub>d</sub>、单位尺寸缓冲器输出电阻r<sub>s</sub>、单位尺寸缓冲器输入电容c<sub>o</sub>、单位尺寸缓冲器输出电容c<sub>p</sub>,设置互连线的相关参数:单位长度线电容c,单位长度线电阻r,设置功耗-时间松弛分段线性模型的相关参数:各分段区间的起始位置a<sub>i</sub>,终止位置b<sub>i</sub>,单位长度互连线最优延时<img file="C200810101598C00021.GIF" wi="135" he="122" />表示线性区间斜率的模型参数m<sub>i</sub>、n<sub>i</sub>,以及互连线临界长度L<sub>crit</sub>,其中功耗-时间松弛分段线性模型为:<maths num="0001"><![CDATA[<math><mrow><mi>&Delta;P</mi><mrow><mo>(</mo><mi>&alpha;</mi><mo>,</mo><mi>L</mi><mo>,</mo><mi>slack</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close='' separators=','><mtable><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mo>(</mo><mi>L</mi><mo>&lt;</mo><mo>=</mo><msub><mi>L</mi><mi>crit</mi></msub><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mi>&alpha;</mi><mrow><mo>(</mo><msub><mi>m</mi><mi>i</mi></msub><mi>L</mi><mo>+</mo><msub><mi>n</mi><mi>i</mi></msub><mi>slack</mi><mo>)</mo></mrow></mtd><mtd><mrow><mo>(</mo><mi>L</mi><mo>></mo><msub><mi>L</mi><mi>crit</mi></msub><mo>,</mo><mi>f</mi><mo>=</mo><mfrac><mi>slack</mi><mrow><mi>L</mi><mo>&CenterDot;</mo><msub><mrow><mo>(</mo><mfrac><mi>&tau;</mi><mi>l</mi></mfrac><mo>)</mo></mrow><mi>opt</mi></msub></mrow></mfrac><mo>&Element;</mo><mrow><mo>[</mo><msub><mi>a</mi><mi>i</mi></msub><mo>,</mo><msub><mi>b</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中slack是时间松弛量,α代表信号翻转概率,L是互连线长度;互连线临界长度L<sub>crit</sub>按下式得到:<maths num="0002"><![CDATA[<math><mrow><msub><mi>L</mi><mi>crit</mi></msub><mo>=</mo><mn>2</mn><msqrt><mfrac><mrow><msub><mrow><mn>2</mn><mi>r</mi></mrow><mi>s</mi></msub><mrow><mo>(</mo><msub><mi>c</mi><mn>0</mn></msub><mo>+</mo><msub><mi>c</mi><mi>p</mi></msub><mo>)</mo></mrow></mrow><mi>rc</mi></mfrac></msqrt><mo>;</mo></mrow></math>]]></maths>步骤(2).从模块描述文件读入模块及线网信息:步骤(2.1).读入模块四角坐标,并根据此模块的四角坐标计算模块的宽、高,以及模块对应引线端的坐标;步骤(2.2).读入所选模块的时延信息;步骤(2.3).读入线网信息,记录模块的互联信息及输入输出关系,并按下式计算互连线的长度L以及初始时延:设:互连线引线端的坐标为(x<sub>1</sub>,y<sub>1</sub>),(x<sub>2</sub>,y<sub>2</sub>),则:互连线的长度L为:L=|x<sub>1</sub>-x<sub>2</sub>|+|y<sub>1</sub>-y<sub>2</sub>|,设:互连线的初始延时d<sub>Linit</sub>为<maths num="0003"><![CDATA[<math><mrow><msub><mi>d</mi><mi>Linit</mi></msub><mo>=</mo><mn>2</mn><msqrt><msub><mi>r</mi><mi>s</mi></msub><msub><mi>c</mi><mn>0</mn></msub><mi>rc</mi></msqrt><mrow><mo>(</mo><mn>1</mn><mo>+</mo><msqrt><mfrac><mn>1</mn><mn>2</mn></mfrac><mrow><mo>(</mo><mn>1</mn><mo>+</mo><mfrac><msub><mi>c</mi><mi>p</mi></msub><msub><mi>c</mi><mn>0</mn></msub></mfrac><mo>)</mo></mrow></msqrt><mo>)</mo></mrow><mo>*</mo><mi>L</mi><mo>;</mo></mrow></math>]]></maths>步骤(3).根据步骤(2.2)的模块信息和互连信息,构造用以表示电路连接关系的有向无环图作为电路的逻辑拓扑图,图中的节点表示模块,而边表示模块之间的连线,并增加一个虚拟输入节点作为原有所有输入节点的输入,同时,增加一个虚拟输出节点作为原有所有输出节点的输出,虚拟节点的本征延时均记为0;步骤(4).按以下步骤迭代分配时间松弛量:步骤(4.1).初始设置所建有向无环图中各边的状态量为1;步骤(4.2).按以下公式计算各互连线间的时间松弛量:<maths num="0004"><![CDATA[<math><mrow><mfenced open='{' close='' separators=','><mtable><mtr><mtd><mi>a</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow><mo>=</mo><munder><mi>max</mi><mrow><mi>u</mi><mo>&Element;</mo><mi>FI</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><mrow><mo>(</mo><mi>a</mi><mrow><mo>(</mo><mi>u</mi><mo>)</mo></mrow><mo>+</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>)</mo></mrow><mo>+</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>)</mo></mrow><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mi>r</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow><mo>=</mo><munder><mi>min</mi><mrow><mi>u</mi><mo>&Element;</mo><mi>FO</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow></mrow></munder><mrow><mo>(</mo><mi>r</mi><mrow><mo>(</mo><mi>u</mi><mo>)</mo></mrow><mo>-</mo><mi>d</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow><mo>-</mo><mi>d</mi><mrow><mo>(</mo><mi>v</mi><mo>,</mo><mi>u</mi><mo>)</mo></mrow><mo>)</mo></mrow></mtd></mtr><mtr><mtd><mi>slack</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>)</mo></mrow><mo>=</mo><mi>r</mi><mrow><mo>(</mo><mi>v</mi><mo>)</mo></mrow><mo>-</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>)</mo></mrow><mo>-</mo><mi>a</mi><mrow><mo>(</mo><mi>u</mi><mo>)</mo></mrow><mo>-</mo><mi>d</mi><mrow><mo>(</mo><mi>u</mi><mo>,</mo><mi>v</mi><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中:a(v)为信号实际到达模块v的时间,单位ns,a(u)为信号实际到达模块u的时间,单位ns,d(v)为信号通过模块v的本征延时,单位ns,d(u)为信号通过模块u的本征延时,单位ns,d(u,v)为信号通过模块v,u之间的互连线的延时,单位ns,r(v)为信号要求到达模块v的时间,单位ns,r(u)为信号要求到达模块u的时间,单位ns,slack(u,v)为模块v,u之间的互连线的时间松弛量,单位nsFI(v)为模块v的所有输入模块的集合,FO(v)为模块v的所有输出模块的集合,此处设:信号实际到达虚拟输入模块的时间为0,信号要求到达虚拟输出模块的时间为信号实际到达该模块的时间;步骤(4.3).对于时间松弛量为0的互连线,将该互连线的状态量置为0,一旦所有互连线的状态量均为0,迭代过程结束;步骤(4.4).按下式计算出所建电路的逻辑拓扑图中各边的权重w:<maths num="0005"><![CDATA[<math><mrow><mi>w</mi><mo>=</mo><mfrac><mrow><mi>d&Delta;P</mi><mrow><mo>(</mo><mi>&alpha;</mi><mo>,</mo><mi>L</mi><mo>,</mo><mi>slack</mi><mo>)</mo></mrow></mrow><mrow><mi>d</mi><mrow><mo>(</mo><mi>slack</mi><mo>)</mo></mrow></mrow></mfrac></mrow></math>]]></maths>即w是ΔP(α,L,slack)对slack的偏导数;步骤(4.5).利用预流推进方法得到逻辑拓扑图的最大割集,对此割集中的每条边按以下步骤分配时间松弛量:步骤(4.5.1).当互连线中不插入缓冲器时,该互连线有最大延时d<sub>Lmax</sub>:<maths num="0006"><![CDATA[<math><mrow><msub><mi>d</mi><mrow><mi>L</mi><mi>max</mi></mrow></msub><mo>=</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><msup><mi>rcL</mi><mn>2</mn></msup><mo>+</mo><mrow><mo>(</mo><msub><mi>R</mi><mi>d</mi></msub><mi>c</mi><mo>+</mo><msub><mi>rC</mi><mi>L</mi></msub><mo>)</mo></mrow><mi>L</mi><mo>+</mo><msub><mi>R</mi><mi>d</mi></msub><msub><mi>C</mi><mi>L</mi></msub><mo>,</mo></mrow></math>]]></maths>其中:R<sub>d</sub>为驱动输出电阻(Ω),C<sub>L</sub>为负载电容(fF),且处于状态i的互连线的延时有一个上限约束d<sub>Li</sub>:d<sub>Li</sub>=d<sub>Linit</sub>(1+f<sub>i</sub>),f<sub>i</sub>是功耗-时间松弛分段线性模型中对应线性区间的右端点取值,d<sub>Lmin</sub>是步骤2中得到的互连线的初始延时;设:当前状态下每条边当前的延时为d<sub>Lcurrent</sub>,slack为步骤4.2中得到的模块之间互连线的时间松弛量,则:该边的延时应当更新为d<sub>Lupdated</sub>;d<sub>Lupdated</sub>=min((d<sub>Lcurrent</sub>+slack),d<sub>Lmax</sub>,d<sub>Li</sub>);步骤(4.5.2).若d<sub>Lupdated</sub>被赋值为d<sub>Lcurrent</sub>+slack或者d<sub>Lmax</sub>,则该互连线状态量改写为0,该互连线不能再分配时间松弛量;步骤(4.5.3).若d<sub>Lupdated</sub>被赋值为d<sub>Li</sub>,则该互连线状态量在原有基础上加1;步骤(4.6).对于每一段互连线,根据时间松弛量分配结果计算所需要的缓冲器的尺寸s和个数N并输出,其公式如下:<maths num="0007"><![CDATA[<math><mrow><mfrac><mrow><msub><mi>k</mi><mn>1</mn></msub><mrow><mo>(</mo><msub><mi>c</mi><mi>p</mi></msub><mo>+</mo><msub><mi>c</mi><mn>0</mn></msub><mo>)</mo></mrow></mrow><mi>l</mi></mfrac><mo>+</mo><mfrac><msub><mi>k</mi><mn>2</mn></msub><mi>l</mi></mfrac><mo>+</mo><msub><mi>k</mi><mn>3</mn></msub><mrow><mo>(</mo><mn>1</mn><mo>+</mo><mi>f</mi><mo>)</mo></mrow><msub><mrow><mo>(</mo><mfrac><mi>&tau;</mi><mi>l</mi></mfrac><mo>)</mo></mrow><mi>opt</mi></msub><mo>-</mo><mrow><mo>[</mo><mfrac><mrow><msub><mi>k</mi><mn>1</mn></msub><mi>s</mi><mrow><mo>(</mo><msub><mi>c</mi><mi>p</mi></msub><mo>+</mo><msub><mi>c</mi><mn>0</mn></msub><mo>)</mo></mrow></mrow><msup><mi>l</mi><mn>2</mn></msup></mfrac><mo>+</mo><mfrac><mrow><msub><mi>k</mi><mn>2</mn></msub><mi>s</mi></mrow><msup><mi>l</mi><mn>2</mn></msup></mfrac><mo>]</mo></mrow><mfrac><mi>dl</mi><mi>ds</mi></mfrac><mo>=</mo><mn>0</mn></mrow></math>]]></maths><maths num="0008"><![CDATA[<math><mrow><mfrac><mn>1</mn><mi>l</mi></mfrac><msub><mi>r</mi><mi>s</mi></msub><mrow><mo>(</mo><msub><mi>c</mi><mi>p</mi></msub><mo>+</mo><msub><mi>c</mi><mn>0</mn></msub><mo>)</mo></mrow><mo>+</mo><mfrac><msub><mi>r</mi><mi>s</mi></msub><mi>s</mi></mfrac><mi>c</mi><mo>+</mo><msub><mi>rsc</mi><mn>0</mn></msub><mo>+</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mi>rcl</mi><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>+</mo><mi>f</mi><mo>)</mo></mrow><msub><mrow><mo>(</mo><mfrac><mi>&tau;</mi><mi>l</mi></mfrac><mo>)</mo></mrow><mi>opt</mi></msub><mo>=</mo><mn>0</mn></mrow></math>]]></maths><maths num="0009"><![CDATA[<math><mrow><mrow><mo>[</mo><mfrac><mn>1</mn><mn>2</mn></mfrac><mi>rc</mi><mo>-</mo><mfrac><mrow><msub><mi>r</mi><mi>s</mi></msub><mrow><mo>(</mo><msub><mi>c</mi><mi>p</mi></msub><mo>+</mo><msub><mi>c</mi><mn>0</mn></msub><mo>)</mo></mrow></mrow><msup><mi>l</mi><mn>2</mn></msup></mfrac><mo>]</mo></mrow><mfrac><mi>dl</mi><mi>ds</mi></mfrac><mo>+</mo><msub><mi>rc</mi><mn>0</mn></msub><mo>-</mo><mfrac><mrow><msub><mi>r</mi><mi>s</mi></msub><mi>c</mi></mrow><msup><mi>s</mi><mn>2</mn></msup></mfrac><mo>=</mo><mn>0</mn></mrow></math>]]></maths>其中,<maths num="0010"><![CDATA[<math><mrow><msub><mi>k</mi><mn>1</mn></msub><mo>=</mo><msubsup><mi>&alpha;V</mi><mi>DD</mi><mn>2</mn></msubsup><msub><mi>f</mi><mi>clk</mi></msub><mo>,</mo></mrow></math>]]></maths><maths num="0011"><![CDATA[<math><mrow><msub><mi>k</mi><mn>2</mn></msub><mo>=</mo><mfrac><mn>3</mn><mn>2</mn></mfrac><msub><mi>V</mi><mi>DD</mi></msub><msub><mi>I</mi><mi>offn</mi></msub><mo>,</mo></mrow></math>]]></maths>k<sub>3</sub>=ln3·αV<sub>DD</sub>I<sub>short</sub>f<sub>clk</sub>,其中,s为缓冲器尺寸,即单位缓冲器大小的倍数,L为互连线长度,um,α为信号翻转概率,V<sub>DD</sub>为电源电压,V,f<sub>clk</sub>为工作频率,GHz,l为缓冲器间距,um,c<sub>o</sub>为单位缓冲器输入电容,fF,c为单位长度线电容,fF/um,c<sub>p</sub>为单位缓冲器输出电容,fF,I<sub>offn</sub>为单位缓冲器漏电电流,uA,I<sub>short</sub>为单位缓冲器短路电流,uA,f为时间惩罚,用实际延时超出最优延时的百分比(%)表示,<img file="C200810101598C00051.GIF" wi="110" he="123" />为单位长度互连线最优延时,ns,设定值;缓冲器的个数N按照下式求得:<img file="C200810101598C00052.GIF" wi="164" he="112" /><img file="C200810101598C00053.GIF" wi="55" he="55" />表示向下取整步骤(4.7).由设定每一段互连线的功耗,计算该电路整体互连线功耗。
地址 100084北京市100084-82信箱