发明名称 基于松弛操作的层次式电源/地线网络的瞬态分析方法
摘要 基于松弛操作的层次式电源/地线网络的瞬态分析方法属于VLSI物理设计领域,其特征在于:先把原始电路利用一种以通孔连线为边界线的划分策略划分为多个规模较小的子电路,再通过松弛操作把子电路的电学参数映射到由边界节点组成的父亲电路中,再利用现有的快速算法求解父亲电路后逐个求解各子电路,本发明用C语言实现,它在满足精度前提下,不仅快速且占用的内存小,而且其层次式的设计方法更适用于更大规模芯片的测试。
申请公布号 CN100347711C 申请公布日期 2007.11.07
申请号 CN200510011804.2 申请日期 2005.05.27
申请人 清华大学 发明人 洪先龙;蔡懿慈;潘著;骆祖莹;谭向东
分类号 G06F17/50(2006.01) 主分类号 G06F17/50(2006.01)
代理机构 代理人
主权项 1.基于松弛操作的层次式电源/地线网络的瞬态分析方法,含有基于直流分析的对电源线/地线即P/G网络进行瞬态分析的方法,其特点在于:它是一种基于计算机计算,把原始电路利用一种划分策略划分为多个规模较小的子电路,再利用松弛操作将子电路的电学参数映射到由边界点组成的父亲电路中,然后再利用现有快速算法求解父亲电路之后逐个求解子电路模块的既快速又节约内存的方法;它依次含有以下步骤:步骤1.计算机读入电路的信息文件,文件中包括节点之间的关联结构;节点之间的电阻值、电感值、电感初始电压和电流值、电容值、电容初始电压和电流值以及与各个节点连接的供电模块单元的随时间变化的吸纳电流波形,据此在计算机内建立电路的信息,并且标记所有通孔节点即Via;连接所有通孔节点,标记其连线上的节点为边界节点;步骤2.根据电路的工作周期和需要模拟的周期数,计算机分别读入相应的模拟用的时间步长h和总模拟步数M;并且利用基尔霍夫定律得到如公式(1)所示的常微分方程组:<math-cwu><![CDATA[<math> <mrow> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mi>C</mi> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <mi>L</mi> </mtd> </mtr> </mtable> </mfenced> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mover> <mi>V</mi> <mo>&CenterDot;</mo> </mover> <mrow> <mo>(</mo> <mi>t</mi> <mo>)</mo> </mrow> </mtd> </mtr> <mtr> <mtd> <mover> <mi>I</mi> <mo>&CenterDot;</mo> </mover> <mrow> <mo>(</mo> <mi>t</mi> <mo>)</mo> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>+</mo> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mi>G</mi> </mtd> <mtd> <mo>-</mo> <msubsup> <mi>A</mi> <mi>l</mi> <mi>T</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>A</mi> <mi>l</mi> <mi>T</mi> </msubsup> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> </mtable> </mfenced> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mi>V</mi> <mrow> <mo>(</mo> <mi>t</mi> <mo>)</mo> </mrow> </mtd> </mtr> <mtr> <mtd> <mi>I</mi> <mrow> <mo>(</mo> <mi>t</mi> <mo>)</mo> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mi>U</mi> <mrow> <mo>(</mo> <mi>t</mi> <mo>)</mo> </mrow> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow></math>]]></math-cwu>再利用差分公式,选定一个足够小的模拟用的时间步长h,在k+1模拟时刻,上式离散化为如(2)、(3)的线性方程组:<math-cwu><![CDATA[<math> <mrow> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mi>G</mi> <mo>+</mo> <mi>C</mi> <mo>/</mo> <mi>h</mi> </mtd> <mtd> <mo>-</mo> <msubsup> <mi>A</mi> <mi>l</mi> <mi>T</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>A</mi> <mi>l</mi> <mi>T</mi> </msubsup> </mtd> <mtd> <mi>L</mi> <mo>/</mo> <mi>h</mi> </mtd> </mtr> </mtable> </mfenced> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mi>V</mi> <mrow> <mo>(</mo> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> </mtd> </mtr> <mtr> <mtd> <mi>I</mi> <mrow> <mo>(</mo> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open='(' close=')'> <mtable> <mtr> <mtd> <mi>U</mi> <mrow> <mo>(</mo> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>)</mo> </mrow> <mo>+</mo> <mrow> <mo>(</mo> <mi>C</mi> <mo>/</mo> <mi>h</mi> <mo>)</mo> </mrow> <mi>V</mi> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mo>(</mo> <mi>L</mi> <mo>/</mo> <mi>h</mi> <mo>)</mo> </mrow> <mi>I</mi> <mrow> <mo>(</mo> <mi>k</mi> <mo>)</mo> </mrow> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow></math>]]></math-cwu>Axk+1=bk+1(3)其中:待求变量V(t)是电路节点电压,I(t)是支路电流;U(t)是系统的输入电流向量;C是电容系数相关的矩阵,L是电感系数相关的矩阵;G和Al是电导系数相关的矩阵;步骤3.划分电路,并且利用松弛操作补偿误差步骤3.1.把所有通孔连线上的节点视为边界节点,由它们组成父亲电路,而通孔连线将原始电路划分为若干子电路模块,划分后的电路由子电路I、剩余电路R和边界电路B组成,此步骤的操作相当于把方程组(3)划分为如下的形式:<math-cwu><![CDATA[<math> <mrow> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msup> <mi>A</mi> <mi>II</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>IB</mi> </msup> </mtd> <mtd> <mn>0</mn> </mtd> </mtr> <mtr> <mtd> <msup> <mi>A</mi> <mi>BI</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>BB</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>BR</mi> </msup> </mtd> </mtr> <mtr> <mtd> <mn>0</mn> </mtd> <mtd> <msup> <mi>A</mi> <mi>RB</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>RR</mi> </msup> </mtd> </mtr> </mtable> </mfenced> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow></math>]]></math-cwu>AII,ABB,ARR分别为子电路I、边界电路B和剩余电路R的系数矩阵,并依次与I中的变量向量xI,xB,xR相关联;ABI和AIB为子电路I与边界电路B的关联矩阵;ABR和ARB为剩余电路R与边界电路B的关联矩阵;xk+1I,xk+1R,xk+1B分别代表子电路I、剩余电路R和边界电路B在k+1时刻步骤的解;步骤3.2.在第k+1模拟步骤时刻,相对于直接求解方程组(4),我们可以把方程组(4)写成如下形式:<math-cwu><![CDATA[<math> <mrow> <msup> <mi>A</mi> <mi>II</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> <mo>+</mo> <msup> <mi>A</mi> <mi>IB</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> <mo>=</mo> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> </mrow></math>]]></math-cwu><math-cwu><![CDATA[<math> <mrow> <msup> <mi>A</mi> <mi>BI</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> <mo>+</mo> <msup> <mi>A</mi> <mi>BB</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> <mo>+</mo> <msup> <mi>A</mi> <mi>BR</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> <mo>=</mo> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> </mrow></math>]]></math-cwu><math-cwu><![CDATA[<math> <mrow> <msup> <mi>A</mi> <mi>RB</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> <mo>+</mo> <msup> <mi>A</mi> <mi>RR</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> <mo>=</mo> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> </mrow></math>]]></math-cwu>然后把以上三式中的后两式合并,并且做简单变换后得到:<math-cwu><![CDATA[<math> <mrow> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msup> <mi>A</mi> <mi>BB</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>BR</mi> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mi>A</mi> <mi>RB</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>RR</mi> </msup> </mtd> </mtr> </mtable> </mfenced> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> <mo>-</mo> <msup> <mi>A</mi> <mi>BI</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> </mtd> </mtr> </mtable> </mfenced> </mrow></math>]]></math-cwu><math-cwu><![CDATA[<math> <mrow> <msup> <mi>A</mi> <mi>II</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> <mo>=</mo> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> <mo>-</mo> <msup> <mi>A</mi> <mi>IB</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> </mrow></math>]]></math-cwu>针对以上两部分,可以用松弛的方法进行逐个求解,直到满足精度要求为止;具体的方法如下所示:<math-cwu><![CDATA[<math> <mrow> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msup> <mi>A</mi> <mi>BB</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>BR</mi> </msup> </mtd> </mtr> <mtr> <mtd> <msup> <mi>A</mi> <mi>RB</mi> </msup> </mtd> <mtd> <msup> <mi>A</mi> <mi>RR</mi> </msup> </mtd> </mtr> </mtable> </mfenced> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mi>p</mi> </mrow> <mi>B</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mi>p</mi> </mrow> <mi>R</mi> </msubsup> </mtd> </mtr> </mtable> </mfenced> <mo>=</mo> <mfenced open='[' close=']'> <mtable> <mtr> <mtd> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>B</mi> </msubsup> <mo>-</mo> <msup> <mi>A</mi> <mi>BI</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mi>p</mi> <mo>-</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> </mtd> </mtr> <mtr> <mtd> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>R</mi> </msubsup> </mtd> </mtr> </mtable> </mfenced> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>5</mn> <mo>)</mo> </mrow> </mrow></math>]]></math-cwu><math-cwu><![CDATA[<math> <mrow> <msup> <mi>A</mi> <mi>II</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mi>p</mi> </mrow> <mi>I</mi> </msubsup> <mo>=</mo> <msubsup> <mi>b</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> <mo>-</mo> <msup> <mi>A</mi> <mi>IB</mi> </msup> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mi>p</mi> </mrow> <mi>B</mi> </msubsup> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>6</mn> <mo>)</mo> </mrow> </mrow></math>]]></math-cwu>其中:xk+1,pI,xk+1,pR,xk+1,pB分别代表子电路I、剩余电路R和边界电路B在k+1时刻,p次松弛步骤的解;当方程组(5)在第一次求解的时候,令<math-cwu><![CDATA[<math> <mrow> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mi>p</mi> <mo>-</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> <mo>=</mo> <msubsup> <mi>x</mi> <mi>k</mi> <mi>I</mi> </msubsup> <mo>,</mo> </mrow></math>]]></math-cwu>表示利用k时刻的值来初始化k+1时刻的起始松弛步骤的值;步骤4.初始化模拟,令步骤计数器K=0,由每一个节点的PWL波形图得到各个节点的初始电压值,此值应该等于各个节点关联电容的初始电压值,并计算出各个支路上面的初始电流值,由此构建xk;步骤5.若K>M,则结束模拟;否则执行以下步骤:步骤6.在k+1时刻,利用层次式策略和松弛操作求解电路,子过程如下:a)通过每一个节点的PWL波形提取k+1步骤时刻各个节点供电模块单元的吸纳电流,计算得到k+1时刻方程组右边的电流向量bk+1,带入由步骤3得到的线性方程组(5)、(6);b)p=1,并且初始化子电路模块此时刻的值:<math-cwu><![CDATA[<math> <mrow> <msubsup> <mi>x</mi> <mrow> <mi>k</mi> <mo>+</mo> <mn>1</mn> <mo>,</mo> <mi>p</mi> <mo>-</mo> <mn>1</mn> </mrow> <mi>I</mi> </msubsup> <mo>=</mo> <msubsup> <mi>x</mi> <mi>k</mi> <mi>I</mi> </msubsup> <mo>;</mo> </mrow></math>]]></math-cwu>c)求解父亲电路,得到边界点上此时刻的电流值xk+1,pB;d)逐个求解子电路模块得到解向量xk+1,pI,由此得到所有节点的解向量xk+1,p;e)如果‖xk+1,p-xk+1,p-1‖≤ε,ε是一预先设定的正小数;表明迭代满足收敛条件,xk+1=xk+1,p,结束此步骤的模拟过程,转向步骤7;否则p=p+1,转向c);步骤7.输出保存此时刻的所有节点的电压值,k=k+1;转到步骤5进行下一步模拟。
地址 100084北京市北京100084-82信箱