一种基于增量编译的电路仿真方法

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

阅读说明:本技术 一种基于增量编译的电路仿真方法 (Circuit simulation method based on incremental compilation ) 是由 徐启迪 吴大可 周振亚 于 2021-07-14 设计创作,主要内容包括:一种基于增量编译的电路仿真方法,包括以下步骤:1)分析仿真任务并进行分组预编译,将预编译后的仿真任务放入进程池;2)以分布式的方式启动进程池的每个进程;3)对于每个仿真进程,根据组号找到该分组对应的编译信息表;4)根据所述编译信息表分析网表文件并执行增量编译;5)根据所述编译信息表分析仿真选项并执行增量编译;6)对分组中其余的每个任务加上组号构成一个仿真进程,收集所有仿真进程放入进程池,返回执行步骤2)至仿真任务结束。本发明的基于增量编译的电路仿真方法,考虑了不同仿真任务之间数据的相关性,利用增量编译机制共享编译数据从而节省编译时间、降低编译期内存峰值,有效提高整体仿真效率。(A circuit simulation method based on incremental compilation comprises the following steps: 1) analyzing the simulation task, performing grouping pre-compilation, and putting the pre-compiled simulation task into a process pool; 2) starting each process of the process pool in a distributed mode; 3) for each simulation process, finding a compiling information table corresponding to the group according to the group number; 4) analyzing a netlist file according to the compiling information table and executing incremental compiling; 5) analyzing simulation options according to the compiling information table and executing incremental compiling; 6) and adding a group number to each of the rest tasks in the group to form a simulation process, collecting all the simulation processes, putting the simulation processes into a process pool, and returning to execute the step 2) until the simulation tasks are finished. The circuit simulation method based on incremental compilation takes the data correlation among different simulation tasks into consideration, and utilizes the incremental compilation mechanism to share the compiled data, thereby saving the compilation time, reducing the memory peak value in the compilation period and effectively improving the overall simulation efficiency.)

一种基于增量编译的电路仿真方法

技术领域

本发明涉及集成电路设计技术领域,特别是涉及一种利用增量式编译进行集成电路分布式仿真的方法。

背景技术

传统模拟集成电路仿真器的一般工作流程为:1.读取电路网表进行词法、语法分析(Parsing);2.计算参数、建立电路拓扑结构、拓扑约减(Elaboration);3.划分电路(Partition);4.建立矩阵、求解方程(Solving);5.输出。流程1、2、3与4、5是相对独立的,可把1、2、3看作编译或解释,4、5看作运行。对于规模较大的电路,虽然运行部分占据仿真时间的大头,但编译所占用的绝对时间和内存峰值是相当可观的:可分别达到几十个小时、上百GB。对于规模较小的电路,运行时间一般很短,通常只有几秒,然而编译的相对时间消耗便突显出来:和运行相当甚至是运行的几倍。由此可见,无论是大规模还是小规模电路的仿真,编译的时间与内存峰值对性能都有很大影响,如果能把这部分影响降到最小则可有效提高整体仿真的效率。

一种解决方案是把编译的结果保存下来,当输入网表不变或只有少量改变时通过增量编译复用之前的编译数据从而达到节省时间和降低内存峰值的目的。

传统仿真器把编译和运行做成不可中断的串行流水线,即一个仿真任务从编译到运行是一个进程,且不同任务之间没有通信,因此做不到编译共享。实际应用中,可共享编译的情形是很多的:对于大规模电路,在一次仿真后往往希望调整某个选项或某个参数再进行第二次仿真来对比结果或debug,输入网表保持不变;对于小规模电路,有时希望对电路单元、物理模型、参数等做各种组合,每种组合进行一次仿真,仿真次数可达几百万次,而这些仿真的输入数据有大量的重叠(如建model库的场景)。

发明内容

为了解决现有技术存在的不足,本发明的目的在于提供一种基于增量编译的电路仿真方法,考虑了不同仿真任务之间数据的相关性,利用增量编译机制共享编译数据从而节省编译时间、降低编译期内存峰值,有效提高整体仿真效率。

为实现上述目的,本发明提供的一种基于增量编译的电路仿真方法,包括以下步骤:

1)分析仿真任务并进行分组预编译,将预编译后的仿真任务放入进程池;

2)以分布式的方式启动进程池的每个进程;

3)对于每个仿真进程,根据组号找到该分组对应的编译信息表;

4)根据所述编译信息表分析网表文件并执行增量编译;

5)根据所述编译信息表分析仿真选项并执行增量编译;

6)对分组中其余的每个任务加上组号构成一个仿真进程,收集所有仿真进程放入进程池,返回执行步骤2)至仿真任务结束。

进一步地,所述步骤1)分析仿真任务并进行分组预编译,将预编译后的仿真任务放入进程池的步骤,还包括,

仿真任务的输入由网表文件和仿真选项两部分组成;

将网表文件和选项值相似的分为一组,每组选一个任务并记录组号构成一个仿真进程,收集所有仿真进程放入进程池。

进一步地,所述步骤3)对于每个仿真进程,根据组号找到该分组对应的编译信息表的步骤,还包括,

每个分组对应一张编译信息表,每张编译信息表由编译信息网表文件和编译信息仿真选项文件两个子表组成;

以至少一个网表文件模块为单位进行编译,编译结果为一个目标数据块,所有目标数据块构成编译数据集;

当前仿真任务所需的所有目标数据块构成工作数据集,初始时当前任务的工作数据集为空。

进一步地,所述每个分组对应一张编译信息表,每张编译信息表由编译信息网表文件和编译信息仿真选项文件两个子表组成的步骤,还包括,

所有分组的编译信息表均以文件形式保存,每张编译信息网表文件保存了该分组相关文件不同版本中模块与目标数据块的一一映射;

每张编译信息仿真选项文件保存了该分组网表不同版本的选项与目标数据块的一一映射。

进一步地,所述步骤4)根据所述编译信息表分析网表文件并执行增量编译的步骤,还包括,根据网表文件的文件名和时间戳将所有文件分为三个集合,包括:

无改动的文件集合:文件名和时间戳在编译信息网表文件中有对应的项;

新增的文件集合:文件名在编译信息网表文件中没有对应的项;

改动的文件集合:文件名在编译信息网表文件中有对应的项,但文件名下的时间戳没有对应的项。

进一步地,还包括,

对所述无改动的文件集合中的每个文件,根据文件名和时间戳查询编译信息网表文件得到对应的模块,将模块对应的目标数据块加入工作数据集;

对所述新增的文件集合中的每个文件,进行词法、语法分析得到网表文件模块,对所述网表文件模块进行编译得到目标数据块,在编译信息网表文件中增加相关的映射并将目标数据块加入工作数据集;

对所述改动的文件集合中的每个文件,首先,进行词法、语法分析得到网表文件模块;然后,将这些模块和编译信息网表文件中该文件名下所有版本的模块字节进行匹配;再后,计算每个版本匹配模块的字节占比,选出占比最大的版本并记录最大字节占比;

所述计算每个版本匹配模块的字节占比,选出占比最大的版本并记录最大字节占比的步骤,还包括,若所述最大字节占比大于或等于设定的阈值,则当前文件可以和版本共享,否则当前文件不存在可共享的版本。

进一步地,所述步骤5)根据所述编译信息表分析仿真选项并执行增量编译的步骤,还包括,根据所述编译信息表将仿真选项分为四个不相交集合,包括:

与编译无关只与运行有关的选项集合;

新增的选项集合:编译信息仿真选项文件中当前网表、时间戳下没有该选项;

无改动选项的集合:编译信息仿真选项文件中当前网表、时间戳下有该选项,且值相同;

改动选项的集合:编译信息仿真选项文件中当前网表、时间戳下有该选项,但值不同。

更进一步地,还包括,

对于所述与编译无关只与运行有关的选项集合,无需操作;

对于所述新增的选项集合,执行该选项相关的编译操作,生成目标数据块,将所述目标数据块加入工作数据集;

对于所述无改动选项的集合,利用编译信息仿真选项文件将对应的目标数据块加入工作数据集;

对于所述改动选项的集合,执行该选项相关的编译操作,生成目标数据块,将所述目标数据块加入工作数据集。

为实现上述目的,本发明还提供一种电子设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行如上文所述的基于增量编译的电路仿真方法的步骤。

为实现上述目的,本发明还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时执行如上文所述的基于增量编译的电路仿真方法的步骤。

本发明的基于增量编译的电路仿真方法、电子设备及计算机可读存储介质,具有以下有益效果:

1)考虑了不同仿真任务之间数据的相关性,利用增量编译机制共享编译数据从而节省编译时间、降低编译期内存峰值;

2)无论对大规模电路仿真任务还是小规模电路多次仿真任务都能有效提高整体仿真效率。

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

附图说明

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

图1为根据本发明的基于增量编译的电路仿真方法流程图;

图2为根据本发明的实施例一执行增量编译流程示意图;

图3为根据本发明的实施例一编译信息网表文件示意图;

图4为根据本发明的实施例一编译信息仿真选项文件示意图。

具体实施方式

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

实施例1

图1为根据本发明的基于增量编译的电路仿真方法流程图,下面将参考图1,对本发明的基于增量编译的电路仿真方法进行详细描述。

首先,在步骤101,分析仿真任务并进行分组预编译。该步骤中,分组预编译的目的是先从有代表性的任务组中每组选一个进行编译,将编译数据保存以便后续任务共享。

优选地,用户预分析仿真任务,仿真任务的输入由网表文件和仿真选项两部分组成。

优选地,根据仿真任务的相似程度进行分组,即网表文件和选项值相似的为一组。每组选一个case并记录组号(group-id)构成一个仿真进程,收集所有仿真进程放入进程池。

在步骤102,以分布式的方式启动进程池的每个进程。

在步骤103,对于每个仿真进程,根据组号找到该分组对应的CIT(CompilationInformation Table,编译信息表)。

优选地,每个分组对应一张编译信息表,每张编译信息表由两个子表组成:CIT.file和CIT.option,如果没有则新建空表。

优选地,所有分组的CIT均以文件形式保存在磁盘,每张CIT.file(如图3所示)保存了该分组相关文件不同版本(以文件名+时间戳标识)中模块与目标数据块的一一映射。

优选地,每张CIT.option(如图4所示)保存了该分组网表不同版本(以网表主文件名+所有相关文件的时间戳标识)的选项(选项名+值)与目标数据块的一一映射。

优选地,仿真器以一个或多个网表文件模块为单位进行编译,编译结果为一个目标数据块,所有目标数据块构成CDB(Compilation Data Base,编译数据集)。

优选地,当前仿真任务所需的所有目标数据块构成其WCD(Working CompilationData,工作数据集),供“运行”阶段使用。

优选地,初始时当前任务的WCD为空,后续将逐一往里添加。

在步骤104,分析网表文件并执行增量编译。

优选地,分析网表文件,根据文件时间戳和CIT将文件分为三个集合。

优选地,网表文件由一个主文件和0至多个间接包含文件(在一个文件中可通过include语句把其它文件包含进来)组成,每个文件由若干模块组成。首先根据文件名和时间戳将所有文件分为三个集合:(a).无改动的文件集合:文件名和时间戳在CIT.file中有对应的项;(b).新增的文件集合:文件名在CIT.file中没有对应的项;(c).改动的文件集合:文件名在CIT.file中有对应的项,但文件名下的时间戳没有对应的项。

优选地,对(a)中的每个文件,根据文件名、时间戳查询CIT.file得到对应的模块,将模块对应的目标数据块加入WCD。

优选地,对(b)中的每个文件,首先进行词法、语法分析得到网表文件模块,对模块进行编译得到目标数据块。在CIT.file中增加相关的映射:“文件名、时间戳、模块”→“目标数据块”,将目标数据块加入WCD。

优选地,对(c)中的每个文件,首先进行词法、语法分析得到网表文件模块。将这些模块和CIT.file中该文件名下所有版本(不同时间戳)的模块做匹配:匹配以模块为单位,模块所有字节均相同则认为匹配。对每个版本计算匹配模块的占比r:

选出占比最大的一个版本,记为vmax,对应的占比为rmax

优选地,若rmax大于或等于用户设定的阈值,则认为当前文件可以和版本vmax共享,否则当前文件没有可共享的版本。

优选地,对于没有版本可共享的情况,处理方法和(4.3)一样;对于有版本可共享的情况,对匹配的模块,根据CIT.file将对应的目标数据块加入WCD,而对没有匹配的模块,编译后将目标数据块加入WCD。由于编译只需作用在未匹配的模块上,故名增量编译。

在步骤105,分析仿真选项并执行增量编译。

优选地,利用CIT.option将仿真选项分为四个不相交集合:(a).与编译无关只与运行有关的选项集合:例如微分方程求解时的数值积分方法、收敛容差等;(b).新增的选项集合:CIT.option中当前网表、时间戳下没有该选项;(c).无改动选项的集合:CIT.option中当前网表、时间戳下有该选项,且值相同;(d).改动选项的集合:CIT.option中当前网表、时间戳下有该选项,但值不同。

优选地,对于(a),选项无需生成目标数据块,也无需更新WCD,故无需操作。

优选地,对于(b),执行该选项相关的编译操作,生成目标数据块。在CIT.option中增加一条新映射:“网表、时间戳、(选项,值)”→“目标数据块”,将目标数据块加入WCD。

优选地,对于(c),利用CIT.option,将对应的目标数据块加入WCD。

优选地,对于(d),执行该选项相关的编译操作,生成目标数据块。在CIT.option中增加一条新映射:“网表、时间戳、(选项,值)”→“目标数据块”,将目标数据块加入WCD。

在步骤106,利用WCD中的目标数据块加上步骤5(a)中的选项,执行后续的“运行”流程:建立矩阵、求解方程、输出。

在步骤107,构建增量编译任务并执行。

优选地,对分组中剩余的每个任务加上group-id构成一个仿真进程,收集所有仿真进程放入进程池,依次执行步骤102至步骤106至所有仿真任务结束。清理CIT、CDB或保留至后续使用。

实施例2

下面结合一具体实施例对本发明的基于增量编译的电路仿真方法做进一步的说明。

根据本发明实施例的另一方面,结合两种应用场景对本发明的实施进行说明。

场景1:先后对同一个大规模后仿真电路进行仿真,仿真选项不同。

任务1:输入主文件:netlist1,选项:数值积分方法=方法1

任务2:输入主文件:netlist1,选项:数值积分方法=方法2

Step0:分组预编译。任务1和任务2网表文件相同,仅仿真选项不同,分在同一组group-id=1。将任务1放入进程池,执行流程Step2-Step6,如图2所示。该步骤生成CDB数据集,CIT分别建立“netlist1”、“数值积分方法=方法1”到CDB相关目标数据块的映射。

Step1:构建增量编译任务并执行。将任务2放入进程池,执行流程Step2-Step6,如图2所示。执行完毕后再执行Step7,具体如下。

Step2:从进程池取任务2并启动进程。

Step3:用group-id=1找到该组的CIT,将WCD置空。

Step4:分析网表文件并执行增量编译。收集netlist1的所有相关文件,对于每个文件用文件名、时间戳在CIT.file中查询,得知均为历史无改动文件,因此查得对应的目标数据块加入WCD,无需编译。

Step5:分析仿真选项并执行增量编译。用“数值积分方法=方法2”在CIT.option中查询,得知仿真选项为历史选项,选项值发生变化,但该选项为编译无关选项,因此无需编译,WCD无更新。

Step6:运行。利用WCD中的目标数据块和选项“数值积分方法=方法2”建立矩阵、求解方程、输出。

Step7;销毁进程池,保留CIT、CDB给后续仿真使用。

场景2:每个仿真任务较小,但任务数多,任务个数T=100万。

任务1:输入主文件:netlist1;选项集1

任务2:输入主文件:netlist2;选项集2

任务T:输入主文件:netlistT;选项集T

Step0:分组预编译。分析仿真任务,将任务分组,网表数据和选项值重叠度高的为一组。每组选一个case并记录组号(group-id)构成一个仿真进程。收集所有仿真进程放入进程池,执行流程Step2-Step6,如图2所示。完毕后再执行Step1。

Step1:构建增量编译任务并执行。对每组剩余的每个任务加上group-id构成一个仿真进程。收集所有仿真进程并放入进程池,执行流程Step2-Step6,如图2所示。最后执行Step7。

Step2:以分布式的方式启动进程池的每个进程,执行Step3。

Step3:对于每个仿真进程,根据group-id找到该分组对应的CIT,如果没有则新建。将WCD置空。执行Step4。

Step4;分析网表文件并执行增量编译。

(4.1).首先根据文件名和时间戳将所有文件分为三个集合:(a).无改动的文件集合;(b).新增的文件集合;(c).改动的文件集合。对(a)、(b)、(c)分别执行(4.2)、(4.3)、(4.4)。

(4.2).对(a)中的每个文件,根据文件名、时间戳查询CIT.file得到对应的模块,将模块对应的目标数据块加入WCD。

(4.3).对(b)中的每个文件,首先进行词法、语法分析得到文件中的模块,对模块进行编译得到目标数据块。在CIT.file中增加相关的映射:“文件名、时间戳、模块”“目标数据块”,将目标数据块加入WCD。

(4.4).对(c)中的每个文件,首先进行词法、语法分析得到文件中的模块。将这些模块和CIT.file中该文件名下所有版本(不同时间戳)的模块做匹配:匹配以模块为单位,模块所有字节均相同则认为匹配。对每个版本计算匹配模块的占比r,选出占比最大的一个版本,记为v_max,对应的占比为r_max。若r_max大于或等于用户设定的阈值,则认为当前文件可以和版本v_max共享,否则当前文件没有可共享的版本。对于没有版本可共享的情况,处理方法和(4.3)一样;对于有版本可共享的情况,对匹配的模块,根据CIT.file将对应的目标数据块加入WCD,而对没有匹配的模块,进行编译后将目标数据块加入WCD。

Step5:分析仿真选项并执行增量编译。

(5.1).利用CIT.option将仿真选项分为四个不相交集合:(a).与编译无关只与运行相关的选项集合;(b).新增的选项集合;(c).无改动选项的集合;(d).改动选项的集合。对这些集合分别执行(5.2)~(5.5)。

(5.2).对于(a),选项无需生成目标数据块,也无需更新WCD,故无需操作。

(5.3).对于(b),执行该选项相关的编译操作,生成目标数据块。在CIT.option中增加一条新映射:“网表、时间戳、(选项,值)”“目标数据块”,将目标数据块加入WCD。

(5.4).对于(c),利用CIT.option,将对应的目标数据块加入WCD。

(5.5).对于(d),和(5.3)相同。

Step6:利用WCD中的目标数据块和Step5的集合(a)执行“运行”流程:建立矩阵、求解方程、输出。

Step7:销毁进程池,保留CIT、CDB给后续仿真使用。

本发明提出了一种支持增量编译、分布式的仿真方法,利用不同仿真任务输入网表数据和选项的高度相关性,提出一种基于增量编译的、分布式的仿真方法,提高仿真效率。

本发明的一个实施例中,还提供一种电子设备,包括存储器和处理器,所述存储器上储存有在所述处理器上运行的计算机程序,所述处理器运行所述计算机程序时执行如上文所述的基于增量编译的电路仿真方法的步骤。

本发明的一个实施例中,还提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序运行时执行如上文所述的基于增量编译的电路仿真方法的步骤。

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

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种门级仿真网表文件正确性的验证方法及装置

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!

技术分类