电路仿真器中Verilog‑A模型的计算优化方法与流程

文档序号:14136104阅读:661来源:国知局
电路仿真器中Verilog‑A模型的计算优化方法与流程

本发明属于eda产品设计领域,用于在eda仿真产品中对verilog-a模型的计算进行优化加速,特别涉及一种电路仿真器中verilog-a模型的计算优化方法。



背景技术:

verilog-a是描述模拟电路系统和模拟电路单元的结构、行为及特性参数的模块化硬件描述语言。随着工艺不断的向着纳米级进展,verilog-a在器件级、标准单元以及系统级建模中已经发挥着越来越重要的作用。eda仿真器要支持verilog-a电路模型,必须将veriglog-a电路描述通过解析编译成和仿真器接口相适应的c/c++代码。verilog-a主要通过对端口信号进行一系列复杂运算来模拟电路的行为特性,这一系列运算最终会转换成该模型对电路矩阵的贡献来进行求解计算。

verilog-a模型中把端口信号值赋值给变量就会产生该变量对端口信号的依赖,在产生的代码中要加入该变量对所有依赖的端口信号的导数运算,才能正确的填充雅可比矩阵,这种依赖会随着变量与变量之间的赋值运算进行传递。如果verilog-a模型本身很复杂,在产生的代码中,需要加入大量的变量对节点电压或支路电流的导数计算。由于对每个模型的计算会在每次迭代的时候都进行,所以大量冗余的导数计算会造成非常大的时间开销,从而影响仿真速度。

本发明提出了一种通过压缩变量依赖数量来减少计算量的优化方法。



技术实现要素:

为了解决现有技术中存在的不足,本发明的目的在于提供一种电路仿真器中verilog-a模型的计算优化方法,通过压缩变量依赖数量来减少计算量。

为实现上述目的,提供的电路仿真器中verilog-a模型的计算优化方法,包括以下步骤:

1)收集所有对雅可比矩阵有贡献的变量;

2)将变量直接依赖的变量集展开,用展开的变量集替换被展开的变量;

3)将变量直接依赖的变量集组合展开,获得该变量的直接依赖;

4)对变量所有依赖层次展开,获得该变量的直接依赖;

5)重复步骤2)至步骤4),对下一变量进行遍历优化,直至遍历所有变量。

进一步地,所述步骤2)进一步包括,将变量直接依赖的变量集依次展开,在展开的过程中,如果依赖数量增加,则本次展开取消。

进一步地,所述步骤3),进一步包括,将变量直接依赖的变量集多个组合展开,取展开后依赖数量最少变量集作为该变量的直接依赖。

进一步地,所述步骤3),进一步包括,对变量所依赖层次从高到低,每一层全部展开,取展开后依赖数量最少的一层变量集,作为该变量的直接依赖。

进一步地,所述变量,其编号唯一,并按照依赖关系从低到高标出层级,所述变量的层级是其所依赖的变量中层级最高值加1,端口信号层级为0。

更进一步地,所述变量为叶子节点变量,且所述叶子节点变量依赖多个端口信号。

本发明的优化方法遍历所有对雅可比矩阵有贡献的变量,从局部和整体上通过对单个变量和其他变量之间的依赖进行选择性的展开,使得最终的变量依赖数量最少。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,并与本发明的实施例一起,用于解释本发明,并不构成对本发明的限制。在附图中:

图1为根据本发明的整体优化流程图;

图2为根据本发明的优化子流程图;

图3为根据本发明的对变量直接依赖的变量集依次展开优化示意图;

图4为根据本发明的对变量直接依赖的变量集组合展开优化示意图;

图5为根据本发明的对变量所有依赖层次逐层展开优化示意图。

具体实施方式

以下结合附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1为根据本发明的整体优化流程图。优化开始后,在步骤101,收集变量依赖关系。

在该步骤中,收集所有需要优化的变量,建立它们之间的依赖关系。每个变量需要有唯一的编号(名称相同的变量被多个赋值语句赋值被认为是不同变量),变量按照依赖关系从低到高标出层级,一个变量的层级是它所依赖的变量中层级最高值加1,端口信号层级统一为0。

在步骤102,遍历变量,逐个进行优化。

在步骤103,对在步骤102中的当前变量的变量依赖进行优化。

在该步骤中还包括以下步骤:

1)将变量直接依赖的变量集依次展开,用展开的变量集替换被展开的变量,展开的过程中要保证新得到的直接依赖数量不会增加,如果依赖数量增加,则取消本次展开。如图3所示,变量a初始依赖数量为4,展开变量b1之后依赖会数量增加,所以取消变量b1的展开,展开变量b3之后依赖数量则会减少,保留变量b3的展开,用变量集{b2,b4}替换变量b3得到变量a的最终变量依赖集{b1,b2,b4}。

2)将变量直接依赖的变量集多个组合展开,取展开后依赖数量最少变量集作为该变量的直接依赖。如图4所示,变量a的初始依赖数量为4,单独展开变量b1、b2、b3、b4都会使得依赖数量增加,而同时展开变量b1、b2、b4则会使依赖数量减少,得到a的最终变量依赖集{c1,c2,b3}。

3)对变量所有依赖层次从高到低,每一层全部展开,取展开后依赖数量最少的一层变量集,作为该变量的直接依赖。如图5所示,变量a的初始依赖数量为4,逐层展开的过程中可以找到最优的变量依赖集{d2,d2,d3}。

以上优化中均假设叶子节点变量依赖多个端口信号。

如果经过上述三个步骤变量依赖得了改善,就继续依次再进行一轮,如果没有,就结束对该变量的优化。

在步骤104,判断是否已遍历完成。

在该步骤,如果已经完成了对所有变量的遍历工作,则进行下一步骤;如果还未完成对所有变量的遍历工作,则返回步骤102,继续遍历下一个遍历,重复步骤103至步骤104。

当程序判断已经完成变量遍历,则在步骤105,根据优化之后的变量依赖关系和它们之间的真实的运算产生相应的代码(code)。

在产生代码的过程中,对模型中原始表达式按照优化之后的依赖进行展开就可以得到该变量的优化计算。

本发明针对eda仿真器在支持verilog-a电路模型时,在将verilog-a模型描述语句转换成c/c++代码的过程中产生的大量冗余导数计算导致仿真效率变慢的问题,提出了从多个维度经过多次迭代对变量依赖进行压缩优化的方法,在不影响仿真精度的前提下,达到提高仿真器效率的目的。优化方法严格按照原始网表的顺序进行,没有改变变量之间的赋值传递顺序,优化前后计算精度一致。优化全面彻底。采用多维度多次迭代进行优化,优化比较彻底,效率提高非常明显。

本领域普通技术人员可以理解:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1