一种基于依赖关系进行参数求值的方法

文档序号:136522 发布日期:2021-10-22 浏览:69次 >En<

阅读说明:本技术 一种基于依赖关系进行参数求值的方法 (Method for parameter evaluation based on dependency relationship ) 是由 郭根华 徐启迪 周振亚 吴大可 王晓光 于 2021-07-08 设计创作,主要内容包括:一种基于依赖关系进行参数求值的方法,包括以下步骤:1)遍历电路结构中定义的参数赋值表达式,建立参数之间的静态依赖关系;2)对电路结构中定义的参数集合进行拓扑排序,并计算所有参数的值;3)遍历电路实例化时的参数赋值表达式,建立参数之间的动态依赖关系;4)结合静态参数和动态依赖关系,得到最终的求值参数集合;5)按顺序遍历最终的求值参数集合,直接进行求值计算。本发明适用于大规模模拟电路的时序仿真,可以有效地提高电路仿真过程中对电路参数进行求值计算的速度,从而大大减少建立电路拓扑结构的时间,加速了电路的整体设计周期。(A method for parameter evaluation based on dependency relationship comprises the following steps: 1) traversing parameter assignment expressions defined in a circuit structure, and establishing a static dependency relationship among parameters; 2) carrying out topological sorting on a parameter set defined in a circuit structure, and calculating values of all parameters; 3) traversing a parameter assignment expression during circuit instantiation, and establishing a dynamic dependency relationship between parameters; 4) combining the static parameters and the dynamic dependency relationship to obtain a final evaluation parameter set; 5) and traversing the final evaluation parameter set in sequence, and directly performing evaluation calculation. The method is suitable for time sequence simulation of large-scale analog circuits, and can effectively improve the speed of evaluating and calculating the circuit parameters in the circuit simulation process, thereby greatly reducing the time for establishing a circuit topological structure and accelerating the overall design period of the circuit.)

一种基于依赖关系进行参数求值的方法

技术领域

本发明涉及集成电路自动化产品设计领域,涉及电路仿真过程中对网表中电路的解析和拓扑构建过程,特别涉及一种基于依赖关系进行参数求值的方法。

背景技术

电路仿真是集成电路功能验证的重要手段。由电路设计图(Schematic)产生的网表文件,作为电路仿真的主要输入,需要将其进行解析并且构建出电路的拓扑结构,然后才能建立电路方程组并进行求解。电路拓扑结构的构建,是一个复杂且耗时的过程,随着集成电路规模的急剧增加,各层电路都可能会定义数量巨大的参数表达式,其中包括普通参数、器件参数和模型参数等,而在电路实例化过程中,每个电路实体都可以直接或间接改变电路结构中所定义的那些参数,因此,参数之间的依赖关系是一个庞大而复杂的集合。

在建立整个电路拓扑结构之前,必须将所有子电路实体最终使用的参数都计算出来,以便确定子电路中各器件、模型的参数值等,才能进一步判断哪些电路实体可以共享相同的子电路拓扑结构。因此,电路参数的计算,是构建电路拓扑结构的前提条件,尤其是当扫描条件改变时,所影响的那些参数还可能需要进行多次求值计算。因此,设计一种快速高效的参数求值方法,对电路仿真的验证工作具有很大的影响,对于实际电路设计也具有重要意义。

发明内容

为了解决现有技术存在的不足,本发明的目的在于提供一种基于依赖关系进行参数求值的方法,对电路结构定义的和实例化时的参数表达式进行遍历,分别得到参数之间的静态依赖关系和动态依赖关系,并结合两者的集合求出最终的有序的影响参数集合,然后按顺序依次进行求值,使得求值过程中无需再去查找和修改依赖关系,从而大大提高了电路拓扑结构的建立速度。

为实现上述目的,本发明提供的基于依赖关系进行参数求值的方法,包括以下步骤:

1)遍历电路结构中定义的参数赋值表达式,建立参数之间的静态依赖关系;

2)对电路结构中定义的参数集合进行拓扑排序,并计算所有参数的值;

3)遍历电路实例化时的参数赋值表达式,建立参数之间的动态依赖关系;

4)结合静态参数和动态依赖关系,得到最终的求值参数集合;

5)按顺序遍历最终的求值参数集合,直接进行求值计算。

进一步地,所述参数赋值表达式中只包含常数和参数ID两种,其中参数ID是指参数的标识,所述参数ID的可访问的范围包括三种:父层电路可访问、实例化所在电路可访问、定义所在的电路可访问。

进一步地,所述静态依赖关系的表达方式采用数据结构中的有向图,并以邻接表形式存储,其中有向图中的节点记录了参数ID和对应的邻接表地址。

进一步地,所述步骤2)进一步包括对有向图进行拓扑排序,得到按依赖关系排好序的参数集合,其中,在求值计算过程中,当参数的值无法求出时,将其暂时标记为未定义,等到实例化时进行处理。

进一步地,所述步骤3)的动态依赖关系的表达方式使用字典表的方式,其中键为赋值表达式左边的参数ID,值为赋值表达式右侧所有参数ID的无重复的集合,记作实例化参数的依赖集合,所述依赖集合中的所有参数都会直接影响当前参数的值。

进一步地,所述步骤4)的所述最终的求值参数集合,包括实例化参数集合本身和实例化参数集合所影响的所有参数的有序集合。

进一步地,确定所述实例化参数集合所影响的所有参数的有序集合进一步包括以下步骤,

71)对实例化参数集合的每个参数,深度遍历静态依赖关系对应的有向图,并结合动态依赖关系确定是否需要中断当前遍历;

72)当某个节点的邻接表都已经遍历完,就把该节点对应的参数ID加入到临时有序集合;

73)实例化参数集合的所有参数都深度遍历完之后,将临时有序集合进行逆序操作,得到的结果就是实例化参数集合所影响的所有参数的有序集合。

更进一步地,所述步骤5)进一步包括,如果参数的值无法计算得到,则说明该参数没有定义或形成了依赖循环,需进行报错处理。

为实现上述目的,本发明还提供一种基于依赖关系进行参数求值的装置,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的程序,所述处理器运行所述程序时执行上述的基于依赖关系进行参数求值的方法的步骤。

为实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述的基于依赖关系进行参数求值的方法的步骤。

本发明的一种基于依赖关系进行参数求值的方法,与现有技术相比,具有如下有益效果:本发明是在电路仿真过程中,通过建立电路结构中所定义参数的静态依赖关系和电路实例化时的动态依赖关系,并结合两者求出最终的有序的影响参数集合,然后按顺序依次对参数进行求值。这种方法在网表的解析过程中,一次性地确定了参数之间的求值的先后顺序,无需在计算过程中再去查找相互依赖关系以判断所依赖参数的值是否已经计算出来,且之后可以多次根据这个求值顺序进行快速求值,为电路拓扑结构的构建和共享提供了高效率的判断方法,大大减少了仿真过程的整体时间。

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

附图说明

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

图1为本发明的基于依赖关系进行参数求值的方法的流程图;

图2为一个网表中的两层电路结构定义;

图3为图2中的sub2电路定义中参数依赖关系的有向图。

具体实施方式

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

图1为根据本发明的基于依赖关系进行参数求值的方法流程图,下面将参考图1,对本发明的基于依赖关系进行参数求值的方法进行详细描述。

在步骤11,遍历电路结构中定义的参数赋值表达式,建立参数之间的静态依赖关系。

电路参数包括名字以及在语法规则中的大小写明感属性,为了便于描述,将电路参数的名字和大小写敏感属性合称为电路参数的标识(ID)。电路参数的赋值表达式,左侧是参数ID,右侧是表达式。其中,表达式可以为空,也可以是由常数、参数ID以及函数调用构成的可以进行求值计算的表达式。由于函数调用最终还是转化为赋值表达式,因此,可以认为参数赋值表达式中只包含常数和参数ID两种。

表达式中的参数ID,根据不同的语法规则,其可访问的范围分为三种:父层电路可访问、实例化所在电路可访问、定义所在的电路可访问。同时,参数取值的优先级也分为两种:全局优先和本地优先。全局优先时,从顶层电路开始查找参数,没找到则继续往下层电路查找,直到找到或到达可访问的最底层电路(实例化所在电路或者定义所在的电路);本地优先时,先在实例化所在电路中查找,没找到且如果可访问定义所在的电路,则在定义所在的电路中查找,否则从父层电路开始往上找,直到找到或者到达顶层电路。

由于电路结构定义中的参数包括普通参数、器件参数和模型参数等,但是其赋值表达式的语法规则都相同,并且表达式中参数的可访问范围和优先级规则也都相同,因此,本发明后面的陈述都以普通参数为例进行说明。

在该步骤中建立静态依赖关系的过程,首先需要遍历电路结构定义的参数赋值表达式。在遍历每个赋值表达式的过程中,需要记录等号左侧的参数ID以及等号右侧的参数ID的集合,并以此建立左侧参数依赖于右侧参数的关系。如果右侧表达式中没有出现参数ID,都是常数,那么说明左侧参数不依赖任何其他参数。根据上述方法,依次建立整个电路结构中的所有参数之间的依赖关系,由于这些参数赋值表达式都是定义在电路结构中,在电路实例化时可能会被改变,因此,此时得到的依赖关系只是一种静态的关系。

参数依赖关系的表示方式,本发明采用数据结构中的有向图,并以邻接表形式存储。有向图中的节点记录了参数ID和对应的邻接表地址。如果某个节点的邻接表不为空,表示该节点对应的参数值发生变化时,邻接表中所有节点中的参数都会被直接影响;如果某个节点的邻接表为空,则表示该节点对应的参数不会影响其他任何参数。

步骤22,对电路结构中定义的参数集合进行拓扑排序,并计算所有参数的值。

在该步骤中的计算所有参数的值,是指对电路结构中定义的所有参数按照依赖关系进行排序后,按顺序进行求值。

由于步骤11中已经对电路结构中定义的参数集合建立了静态依赖关系,并以有向图表示。因此,对该有向图进行拓扑排序后,得到的结果就是按依赖关系排好序的参数集合。但是,由于所有的参数赋值表达式都有可能在实例化时被修改,也可能会保持不变。因此,在求值计算过程中,即使发现有参数的值无法求出,也暂时标记为未定义,而不直接报错,需要等到实例化的时候再处理。对于未定义的参数,除了确实找不到其定义的情况,还有一种可能,就是处于依赖循环中,在有向图中表现为形成了环路。但是,这种情况仍然不需要报错,因为实例化的时候,如果环路中的某个参数被重定义,则环路可能会被断开。

在步骤33,遍历电路实例化时的参数赋值表达式,建立参数之间的动态依赖关系。

在该步骤中的建立动态依赖关系的过程,首先需要遍历电路实例化时的所有参数赋值表达式。对每个赋值表达式的遍历过程与步骤11相同。

根据步骤11中遍历赋值表达式的方法,依次建立该电路在该次实例化时的所有参数之间的依赖关系,由于这些赋值表达式很可能重新定义了原来电路结构中定义的部分或全部参数,每一次实例化都有可能与其他实例化的结果不同,因此,得到的依赖关系是一种动态的关系。

动态依赖关系的表示方式,本发明使用字典表,其中键(Key)为赋值表达式左边的参数ID,值(Value)为赋值表达式右侧所有参数ID的无重复的集合(Set),为方便后续描述,我们称这个集合为实例化参数的依赖集合。这个依赖集合中的所有参数都会直接影响当前参数的值,或者说,当前参数的值直接依赖于这个集合中的参数。

对于同一个电路结构定义,可以进行多次实例化,并且每次实例化时重新定义的参数都可能不相同,因此,对应的动态依赖关系也可能需要建立多次。对于同一个电路结构的多个实例化,如果两次实例化中修改的参数个数、参数ID以及对应的赋值表达式都一样,那么这两个实例化实体将可以共享同一个电路拓扑结构。

在步骤44,结合静态参数和动态依赖关系,得到最终的求值参数集合。

该步骤中的最终的求值参数集合,包括实例化参数集合本身和实例化参数集合所影响的所有参数的有序集合。要得到实例化参数集合所影响的所有参数的有序集合,需要对实例化参数集合的每个参数,深度遍历静态依赖关系对应的有向图,并结合动态依赖关系确定是否需要中断当前遍历。当某个节点的邻接表都已经遍历完,就把该节点对应的参数ID加入到一个临时的集合中,我们将其称为临时有序集合。实例化参数集合的所有参数都深度遍历完之后,将临时有序集合进行逆序操作,得到的结果就是实例化参数集合所影响的所有参数的有序集合。

由于参数可访问范围以及取值优先级规则的限制,具体操作可分为两种情况:

(1)实例化时参数表达式的值能够直接求出。

由于实例化时的参数值已经确定,因此对应的动态依赖关系中,每个参数对应的依赖集合是空的。此时,求有序的影响参数集合的步骤如下:

a>初始化有向图中的所有节点的处理状态,都标记为未处理。

b>循环遍历实例化参数集合,为便于描述,将该循环称为外循环。

c>对每个实例化的参数,查找其在静态依赖关系对应的有向图中的节点。d>如果当前实例化参数在有向图中的对应节点找到了,将该节点命名为外循环当前节点,将其状态标记为处理中,然后转向步骤e>;否则,继续遍历下一个实例化的参数,转步骤c>。

e>如果外循环当前节点的邻接表不为空,则转步骤f>;否则,继续遍历下一个实例化的参数,转步骤c>。

f>循环遍历当前节点的邻接表中的所有节点,为了便于描述,称该循环为内循环,将遍历的当前节点命名为内循环当前节点。

g>如果内循环当前节点已经标记为已处理状态,继续遍历邻接表中的下一个节点,转步骤g>,否则,转步骤h>;

h>如果内循环当前节点的ID也在实例化参数集合中,表示外循环当前节点会影响内循环当前节点,但是内循环当前节点属于实例化参数集合,说明内循环当前节点不受任何参数依赖,因此,内循环当前节点在内循环的遍历终止,继续遍历邻接表中的下一个节点,转步骤g>;否则,

转步骤i>。

i>如果内循环当前节点的状态为处理中,表明存在依赖循环,报错退出,整个外循环结束;否则,将该节点标记为已处理,继续遍历邻接表中的下一个节点,转步骤g>。

j>内循环结束后,如果邻接表的全部节点都已标记为已处理,那么外循环当前节点就加入到临时有序集合中,并将外循环当前节点标记为已处理状态。

k>继续遍历下一个实例化的参数,转步骤c>,直到外循环结束。

(2)实例化时参数表达式的值不能直接求出。

由于实例化时的参数值无法直接确定,因此对应的动态依赖关系中,各个参数对应的依赖集合至少有一个不为空。此时,求有序的影响参数集合的步骤如下:

a>初始化有向图中的所有节点的处理状态,都标记为未处理。

b>循环遍历实例化参数集合,为便于描述,将该循环称为外循环。

c>对每个实例化的参数,查找其在静态依赖关系对应的有向图中的节点。d>如果当前实例化参数在有向图中的对应节点找到了,将该节点命名为外循环当前节点,将其状态标记为处理中,然后转向步骤e>;否则,继续遍历下一个实例化的参数,转步骤c>。

e>如果外循环当前节点的邻接表不为空,则转步骤f>;否则,继续遍历下一个实例化的参数,转步骤c>。

f>循环遍历当前节点的邻接表中的所有节点,为了便于描述,称该循环为内循环,将遍历的当前节点命名为内循环当前节点。

g>如果内循环当前节点已经标记为已处理状态,继续遍历邻接表中的下一个节点,转步骤e>,否则,转步骤h>;

h>在动态依赖关系所对应的字典表中查询内循环当前节点的ID,如果能够找到,表示内循环当前节点属于实例化参数集合中,且其赋值表达式出现了其他参数ID或自身ID,转步骤i>;否则,转步骤k>;

i>将内循环当前节点在字典表中的依赖集合找到,在依赖集合中查找外循环当前节点,如果没找到,说明内循环当前节点的动态依赖关系中,并不依赖于外循环当前节点。当前内循环遍历过程终止,继续遍历邻接表中的下一个节点,转步骤g>;否则,转步骤j>;

j>如果内循环当前节点的状态为处理中,表明存在依赖循环,报错退出,整个外循环结束;否则,将该节点标记为已处理,继续遍历邻接表中的下一个节点,转步骤g>;

k>内循环结束后,如果邻接表的全部节点都已标记为已处理,那么外循环当前节点就加入到临时有序集合中,并将外循环当前节点标记为已处理状态。

l>继续遍历下一个实例化的参数,转步骤c>,直到外循环结束。

对于上述两种情况,将临时有序集合进行逆序,即可得到最终的求值参数集合。

步骤55,按顺序遍历最终的求值参数集合,直接进行求值计算。

在该步骤中的直接进行求值计算,是对步骤44中得到的最终的求值参数集合,按顺序对参数进行求值计算。求值过程中,不需要再考虑是否有参数因为依赖关系没有求出值,直接计算即可。如果发现无法得到某个参数的值,那么说明该参数确实没有定义或者形成了依赖循环,应该进行报错处理。

图2为一个网表中的两层电路结构定义,假定只有普通参数的定义和子电路的实例化语句,其他的都省略。为了便于描述,以SPICE语法进行描述,但是参数的可访问范围以及取值优先级规则都不限于该语法。

下面以图2所示电路结构中的参数定义与实例化语句,并以子电路sub2为当前电路,对本发明中的各个步骤进行进一步解释和说明:

应用步骤11,对图2中sub2定义的所有参数赋值表达式进行遍历,即在图2中的语句2,‘a=1’、‘b=a+1’和‘c=a+b’,‘d=d+1’,‘e=c’这5个赋值表达式。得到的静态依赖关系为:a直接影响b和c,b直接影响c,c直接影响e,d直接影响d,e不影响任何其他参数。对应的有向图(用邻接表表示)如图3所示,箭头方向表示影响关系,a->b表示参数a影响参数b,即参数a必须在参数b求值前先进行求值。

应用步骤22,对图3中的有向图进行拓扑排序,得到的有序的求值集合为{a,d,b,c,e},其中,a和d的顺序可交换。按顺序进行求值后得到a=1,d=invalid,b=2,c=3,e=3。d的值为invalid,是因为d依赖自身,形成了环路,无法求值。不过,因为是静态依赖关系,在实例化时可能会改变,因此,此时并不需要报错处理。

应用步骤33,对sub2的实例化参数的赋值表达式进行遍历,图2中语句3、4都是对sub2的实例化。

语句3中,参数的赋值表达式右侧都是由常数组成,因此可以直接求出各参数的值,即a=1,b=3,属于步骤44中描述的第一种情况。

语句4中,参数c的赋值表达式中含有参数d,根据不同语法对可访问范围以及取值优先级的规定,参数c的值可能无法直接求出,因此,这种情况属于步骤44描述第二种情况。

应用步骤44,对于步骤33中的两种情况,分别进行说明。

对于第一种情况,以a为根节点,深度遍历图3中的有向图,得到的影响参数集合为{c},b在实例化参数集合中,故遍历过程中没有加入到临时有序集合;以b为根节点,深度遍历图3中的有向图,得到的影响参数集合为{c},由于c已经加入临时有序集合中,故不在重复加入,最终的有序影响参数集合为{c}。

对于第二种情况,字典表为c->{d}。以c为根节点,深度遍历图3中的有向图,由于c的邻接表中只有e一个节点,而e节点并不在字典表中,因此,正常遍历,将e加入到临时有序集合中。最终的有序影响参数集合为{e}。

应用步骤55,对于语句3,最终的有序求值参数集合为{a,b,c},对应的值为{1,3,4};对于语句4,最终的有序求值参数集合为{d,c,e},对应的值需要根据d的可访问范围以及取值优先级规则来确定,这里就不展开说明了。

本发明的优点在于以下两个方面:

第一,静态依赖关系和动态依赖关系相结合,对各种语法各种规则都适应。不同语法的可访问范围以及取值优先级规则都存在差异,本方法结合了静态依赖关系和动态依赖关系,可以灵活地应用到各种语法规则中,高效便利地得到最终的参数求值集合。

第二,得到最终的求值参数集合后,可以多次直接进行参数求值。由于实例化参数的值可能依赖于扫描参数,每扫描一次,其值都会变化。本方法得到最终的求值参数集合,在多次扫描过程中,都只要按顺序进行求值即可,大大节省了电路仿真的时间,提高了仿真验证的效率。

本发明可以加快建立电路拓扑结构的速度,保证了电路仿真验证工作的高效性。本发明通过遍历电路定义和实例化时的参数赋值表达式,建立对应的静态和动态依赖关系,并结合两者求出一个有序的参数集合,然后直接进行计算。本发明大大加快了参数计算的速度,提高了仿真结果的验证效率,缩短电子电路的设计周期,适应了电路规模的急剧增长。

本发明还提供基于依赖关系进行参数求值的装置,包括存储器和处理器,存储器上储存有在处理器上运行的程序,处理器运行所述程序时执行上述基于依赖关系进行参数求值的方法的步骤。

本发明还提供了一种计算机可读存储介质,其上存储有计算机指令,所述计算机指令运行时执行上述的基于依赖关系进行参数求值的方法的步骤,所述基于依赖关系进行参数求值的方法参见前述部分的介绍,不再赘述。

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

11页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种功率器件漏源寄生电容子电路模型及其建模方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类