掌桥专利:专业的专利平台
掌桥专利
首页

用于模块化电路行为仿真的方法和系统

文献发布时间:2024-04-18 19:58:21


用于模块化电路行为仿真的方法和系统

技术领域

本发明涉及仿真技术领域,具体涉及用于模块化电路行为仿真的方法和系统。

背景技术

电路仿真技术是芯片设计过程中进行性能评估以及功能验证的重要手段,能帮助设计人员在芯片设计过程中发现设计缺陷、比较不同设计方案的优劣。目前主要的电路仿真技术有两类,第一类是基于RTL(寄存器传输级语言)代码的仿真,第二类是基于设计人员对电路功能的描述通过软件实现的功能仿真。前者有成熟的仿真工具,而后者则要针对不同的设计单独进行开发。

基于RTL(寄存器传输级语言)代码的仿真能够达到电路时钟周期级别的仿真精度,并且最贴近电路的实际运行行为。但该方法仿真时间过长。例如,对于较大规模的电路,完成1ms(毫秒)的仿真可能需要高性能服务器运行数小时或数天,极大地阻碍了设计迭代的速度。

基于设计人员对电路功能的描述通过软件实现的功能仿真能够实现较快的仿真速度,完成1ms的仿真可能仅需要服务器运行10~100s。但该方法没有对具体的硬件行为建模,仅能保证最终计算结果的准确性,并提供简单的性能模型进行估计,而无法对电路的中间计算结果进行校验。同时,因为任务复杂度的差异和软件设计的精细程度的不同,这类仿真方法的性能误差有较大波动,无法正确地指导硬件的设计优化。

也就是说,虽然通过System C语言(软/硬件协同设计语言)进行仿真可以实现类似本发明的功能,但是System C对硬件的抽象依然是时钟周期形式以及基于敏感表的形式,抽象层次比较低,且相应地构建模型的代价较高。此外,虽然通过现有的硬件描述语言仿真工具可以实现类似功能的仿真,但不能进行快速建模和验证。

因此,需要一种能够在提升仿真速度及仿真精度的同时对中间计算结果进行校验的电路行为仿真的方法和系统。

发明内容

有鉴于此,本公开实施例提供一种用于模块化电路行为仿真的方法和系统,至少部分解决现有技术中存在的问题。

第一方面,本公开实施例提供了一种用于模块化电路行为仿真的方法,包括:

对模块化电路的各个子模块进行建模,

向所述各个子模块发送生成一个或多个任务的指令,所述一个或多个任务中的每一个包括开始事件和结束事件;

通过所述各个子模块将所述一个或多个任务中的每一个的开始事件提交到事件队列;

对所述事件队列进行初始化处理;

遍历所述事件队列,取出并执行所述事件队列中能够最早时间被执行的开始事件;

在所述开始事件被执行完成后,请求对应的子模块将与所述开始事件对应的任务的结束事件提交到所述事件队列;

对所述事件队列进行更新处理;以及

当更新后的所述事件队列不为空时,遍历更新后的所述事件队列,取出并执行更新后的所述事件队列中能够最早时间被执行的开始事件或结束事件。

根据本公开实施例的一种具体实现方式,每当开始事件被执行完成后,将仿真时间更新为所述开始事件被执行完成后的时间。

根据本公开实施例的一种具体实现方式,当仿真时间超过预定仿真时限时,仿真结束。

根据本公开实施例的一种具体实现方式,所述开始事件包含开始条件和开始功能两个部分,其中当开始条件满足时,执行所述开始事件;以及所述结束事件包含结束条件和结束功能两个部分,其中当结束条件满足且仿真时间超过所述结束事件所属任务的最短执行时间时,执行所述结束事件。

根据本公开实施例的一种具体实现方式,开始事件的开始功能被建模为生成一个或多个新的任务,并将所述一个或多个新的任务中的开始事件提交到事件队列;以及结束事件的结束功能被建模为生成一个或多个新的任务,并将所述一个或多个新的任务中的开始事件提交到事件队列。

根据本公开实施例的一种具体实现方式,在所述开始事件或结束事件的功能被执行完成后,再次对所述事件队列进行更新处理。

第二方面,本公开实施例提供了一种用于模块化电路行为仿真的系统,其特征在于,所述系统包括:

建模单元,被配置为

对模块化电路的各个子模块进行建模,

向所述各个子模块发送生成一个或多个任务的指令,所述一个或多个任务中的每一个包括开始事件和结束事件;

通过所述各个子模块将所述一个或多个任务中的每一个的开始事件提交到事件队列;

对所述事件队列进行初始化处理,以及

仿真单元,被配置为

遍历所述事件队列,取出并执行所述事件队列中能够最早时间被执行的开始事件;

在所述开始事件被执行完成后,请求对应的子模块将与所述开始事件对应的任务的结束事件提交到所述事件队列;

对所述事件队列进行更新处理;以及

当更新后的所述事件队列不为空时,遍历更新后的所述事件队列,取出并执行更新后的所述事件队列中能够最早时间被执行的开始事件或结束事件。

第三方面,本公开实施例还提供了一种电子设备,该电子设备包括:

至少一个处理器;以及,

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行时,使所述至少一个处理器执行前述第一方面或第一方面的任一实现方式中的用于模块化电路行为仿真的方法。

第四方面,本公开实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令当由至少一个处理器执行时使所述至少一个处理器执行前述第一方面或第一方面的任一实现方式中的用于模块化电路行为仿真的方法。

第五方面,本公开实施例还提供了一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,使所述计算机执行前述第一方面或第一方面的任一实现方式中的用于模块化电路行为仿真的方法。

通过本公开实施例中的用于模块化电路行为仿真的方法,可以在大幅度提高仿真速度的同时提高仿真精度,并且可以对中间计算结果进行校验,极大的提升了开发人员芯片设计及改进芯片的效率。

附图说明

为了更清楚地说明本公开实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为根据本公开实施例的用于模块化电路行为仿真的方法的流程图;

图2为根据本公开实施例的用于模块化电路行为仿真的系统的示意图;以及

图3为根据本公开实施例的用于模块化电路行为仿真的方法的建模示例图。

具体实施方式

下面结合附图对本公开实施例进行详细描述。

以下通过特定的具体实例说明本公开的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本公开的其他优点与功效。显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。本公开还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本公开的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。基于本公开中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。

需要说明的是,下文描述在所附权利要求书的范围内的实施例的各种方面。应显而易见,本文中所描述的方面可体现于广泛多种形式中,且本文中所描述的任何特定结构及/或功能仅为说明性的。基于本公开,所属领域的技术人员应了解,本文中所描述的一个方面可与任何其它方面独立地实施,且可以各种方式组合这些方面中的两者或两者以上。举例来说,可使用本文中所阐述的任何数目个方面来实施设备及/或实践方法。另外,可使用除了本文中所阐述的方面中的一或多者之外的其它结构及/或功能性实施此设备及/或实践此方法。

还需要说明的是,以下实施例中所提供的图示仅以示意方式说明本公开的基本构想,图式中仅显示与本公开中有关的组件而非按照实际实施时的组件数目、形状及尺寸绘制,其实际实施时各组件的型态、数量及比例可为一种随意的改变,且其组件布局型态也可能更为复杂。

另外,在以下描述中,提供具体细节是为了便于透彻理解实例。然而,所属领域的技术人员将理解,可在没有这些特定细节的情况下实践所述方面。

为解决现有的电路仿真方法在仿真精度和仿真速度两个方面无法兼顾的问题,本发明提出了一种用于模块化电路行为仿真的方法。

本发明提出的用于模块化电路行为仿真的方法包含两个部分:对硬件行为建模的软件接口和执行仿真过程的程序,其中,对硬件行为建模的软件接口以任务为基本单位,每个任务包含开始事件和结束事件。

接下来将参照图1至图3对根据本公开实施例的用于模块化电路行为仿真的方法和系统进行说明。

图1为根据本公开实施例的用于模块化电路行为仿真的方法100的流程图。

如图1所示,在步骤S110处,对模块化电路的各个子模块进行建模。

接下来,转到步骤S120。

在步骤S120处,向模块化电路的所述各个子模块发送生成一个或多个任务的指令,所述一个或多个任务中的每一个包括开始事件和结束事件。

在本发明的实施例中,向模块化电路的所述各个子模块发送指令可以是并行发送的,也可以是层级式发送的,这取决于具体的建模结构。当层级式发送指令时,指令在模块间逐级传递。

在本发明实施例中,执行仿真过程的方法(亦或程序)以事件为基本单位描述电路运行过程中的行为,每个事件还包含执行条件和功能函数两个部分。

例如,开始事件包含开始条件和开始功能两个部分,其中当开始条件满足时,执行所述开始事件。结束事件包含结束条件和结束功能两个部分,其中当结束条件满足且仿真时间超过所述结束事件所属任务的最短执行时间时,执行所述结束事件。开始功能为开始事件的功能函数,其能够用于计算执行该开始事件所属任务的最短执行时间;结束功能为结束事件的功能函数。

接下来,转到步骤S130。

在步骤S130处,通过所述各个子模块将所述一个或多个任务中的每一个的开始事件提交到事件队列。

接下来,转到步骤S140。

在步骤S140处,对所述事件队列进行初始化处理。

在本发明实施例中,如下所述,根据事件的执行功能,事件队列在初始化之后,也可以在执行事件的过程中被更新,因而并不需要在初始化阶段构造所有的仿真事件,只需构造开始事件即可。

在对事件队列进行初始化处理之后,仿真时间被初始化为0。

接下来,转到步骤S150。

在步骤S150处,遍历所述事件队列,取出并执行所述事件队列中能够最早时间被执行的开始事件。

在所述开始事件被执行完成后,转到步骤S160。

在步骤S160处,请求对应的子模块将与所述开始事件对应的任务的结束事件提交到所述事件队列。

接下来,转到步骤S170。

在步骤S170处,对所述事件队列进行更新处理。

具体而言,在本发明实施例中,由于每当开始事件被执行完成后,将仿真时间更新为所述开始事件被执行完成后的时间。因此,也将依据各事件的最新仿真时间对事件队列进行更新。

例如,以事件队列中存在2个开始事件为例,设定第一开始事件被执行的时间为第1s,第一开始事件所述任务被执行完成的时间段为3s,第二开始事件被执行的时间为第3s,则当第一开始事件被执行完成后的第一结束事件应当被执行的时间为1s+3s=4s。与第二开始事件相比,第一结束事件应当被执行的时间较晚,因此将优先执行第二开始事件。

在本发明实施例中,事件的仿真时间可以为是固定的数值或计算一个时间值的函数,在此并不构成对本发明的限制。

接下来转到步骤S180。

在步骤S180处,检查事件队列是否为空。

当更新后的事件队列不为空时,转到步骤S190。

在步骤S190处,遍历更新后的事件队列,取出并执行更新后的事件队列中能够最早时间被执行的开始事件或结束事件。

在本发明实施例中,虽然未在图中示出,但开始事件的开始功能还能够被建模为生成一个或多个新的任务,并将所述一个或多个新的任务中的开始事件提交到事件队列。同时,结束事件的结束功能也能够被建模为生成一个或多个新的任务,并将所述一个或多个新的任务中的开始事件提交到事件队列。当生成新的任务,并执行新的开始事件时,当新的开始事件执行完成后,仍将请求将与新的开始事件对应的新的结束事件提交到事件队列中。

进一步地,在开始事件的功能或结束事件的功能被执行完成后,将再次对事件队列进行更新处理。

如上参照图1所述的方法步骤能够被迭代执行,直至事件队列为空。当事件队列为空时,仿真结束。

此外,虽然未在图中示出,但在本发明实施例中,还可以设置预定仿真时限,并设置当仿真时间超过预定仿真时限时,结束仿真过程。

本发明提出的用于模块化电路行为仿真的方法以事件队列的形式来维护仿真中实现的功能以及执行顺序,通过开始事件和结束事件来抽象一个在硬件上需要执行一段时间的任务,且本发明的硬件行为的仿真建模包含一个完整定义的仿真任务接口,可以实现对不同硬件模块的仿真模型独立编程开发,而不需要根据仿真事件执行的顺序来调整程序。因此,开发人员在使用仿真接口进行电路仿真时,不需要提前指定不同任务之间的执行顺序,仅需定义每一个任务的开始条件、结束条件和任务功能即可达到仿真目的,大幅度提高仿真速度的同时提高仿真精度,极大的提升了设计人员芯片设计及改进的效率。

此外,虽然通过现有的硬件描述语言仿真工具可以实现类似功能的仿真,但却无法快速建模和验证。进一步地,虽然通过System C语言进行仿真可以实现类似本发明的功能,但是System C对硬件的抽象依然是时钟周期形式以及基于敏感表的形式,抽象层次比较低,相应地构建模型的代价更高。本发明不限定对应的编程语言,可以是C/Python或其他通用编程语言,在此并不构成对本发明的限制。

图2示出了本发明提供的用于模块化电路行为仿真的系统200。系统200包括建模单元210和仿真单元220。

建模单元210被配置为对模块化电路的各个子模块进行建模,向所述各个子模块发送生成一个或多个任务的指令,所述一个或多个任务中的每一个包括开始事件和结束事件;通过所述各个子模块将所述一个或多个任务中的每一个的开始事件提交到事件队列;以及对所述事件队列进行初始化处理。

仿真单元220被配置为遍历所述事件队列,取出并执行所述事件队列中能够最早时间被执行的开始事件;在所述开始事件被执行完成后,请求对应的子模块将与所述开始事件对应的任务的结束事件提交到所述事件队列;对所述事件队列进行更新处理;以及当更新后的所述事件队列不为空时,遍历更新后的所述事件队列,取出并执行更新后的所述事件队列中能够最早时间被执行的开始事件或结束事件。

图3为根据本公开实施例的用于模块化电路行为仿真的方法的建模示例。

如图3所示,通过建模来构建用于模块化电路行为仿真的系统(或称硬件行为仿真系统)300。该系统300包括调度模块310、读数据模块320、卷积模块330、向量模块340、写数据模块350。除此之外,系统300还可以包括片上缓存模块360和片上缓存模块370。

图3所示的系统300的各个模块执行上述方法100中所描述的仿真过程。具体而言,在图3所示的系统300中,在系统300中开辟内存来模拟片上缓存模块360以及片外缓存模块370。在系统300中开辟完内存之后,向调度模块310输入指令队列,接下来,由调度模块310分别向读数据模块320、卷积模块330、向量模块340、写数据模块350下发对应的指令队列。读数据模块320、卷积模块330、向量模块340、写数据模块350分别与调度模块310之间维护一个指令队列,并基于指令队列生成任务,其中每个任务均包括开始事件和结束事件。

接下来将详细阐述调度模块310、读数据模块320、卷积模块330、向量模块340、写数据模块350中各个模块在仿真过程中的实现:

1.调度模块310

在系统中实现调度模块310:调度模块310初始化时基于输入的指令序列建立一个任务,该任务的要素为:

a)开始条件:任务队列中还包含未执行的指令;

b)开始功能:从任务队列中取出一条指令,根据其指令码放置在对应执行模块的指令队列中,最短执行时间为1个时钟周期。

c)结束条件:目标任务的队列不为满。

d)结束功能:无。

2.读数据模块320

在系统中实现读数据模块320:读数据模块320初始化时基于指令序列建立一个任务,该任务的要素为:

a)开始条件:读数据模块320的指令队列中包含至少一条指令。

b)开始功能:根据指令的内容执行对应的读取操作。

c)结束条件:无其他条件。

d)结束任务:将执行完的指令从指令队列中取出。

3.卷积模块330

在系统中实现卷积模块330:卷积模块330初始化时基于指令序列建立一个任务,该任务的要素为:

a)开始条件:卷积模块330的指令队列中包含至少一条指令。

b)开始功能:根据指令的内容执行对应的卷积操作,该操作的最短执行时间由卷积操作的卷积核大小以及图像大小计算得出。

c)结束条件:无其他条件。

d)结束任务:将执行完的指令从指令队列中取出。

4.向量模块340

在系统中实现向量模块340:向量模块340初始化时基于指令序列建立一个任务,该任务的要素为:

a)开始条件:向量模块340的指令队列中包含至少一条指令。

b)开始功能:根据指令的内容执行对应的向量操作。

c)结束条件:无其他条件。

d)结束任务:将执行完的指令从指令队列中取出。

5.写数据模块350

在系统中实现写数据模块350:写数据模块350初始化时基于指令序列建立一个任务,该任务的要素为:

a)开始条件:写数据模块350的指令队列中包含至少一条指令。

b)开始功能:根据指令的内容执行对应的写入操作。

c)结束条件:无其他条件。

d)结束任务:将执行完的指令从指令队列中取出。

此外,值得说明的是,虽然在图3中以调度模块310、读数据模块320、卷积模块330、向量模块340、写数据模块350的结构关系示出了本发明提供的用于模块化电路行为仿真的方法和系统示例,但这并不构成对本发明的限制,各个模块也可以是独立而不是层级式接收指令序列的。

进一步地,本公开实施例还提供了一种电子设备,该电子设备包括:

至少一个处理器;以及,

与该至少一个处理器通信连接的存储器;其中,

该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行前述方法实施例中的用于模块化电路行为仿真的方法。

进一步地,本公开实施例还提供了一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质存储计算机指令,该计算机指令用于使该计算机执行前述方法实施例中的用于模块化电路行为仿真的方法。

进一步地,本公开实施例还提供了一种计算机程序产品,该计算机程序产品包括存储在非暂态计算机可读存储介质上的计算程序,该计算机程序包括程序指令,当该程序指令被计算机执行时,使该计算机执行前述方法实施例中的用于模块化电路行为仿真的方法。

需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:获取至少两个网际协议地址;向节点评价设备发送包括所述至少两个网际协议地址的节点评价请求,其中,所述节点评价设备从所述至少两个网际协议地址中,选取网际协议地址并返回;接收所述节点评价设备返回的网际协议地址;其中,所获取的网际协议地址指示内容分发网络中的边缘节点。

或者,上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:接收包括至少两个网际协议地址的节点评价请求;从所述至少两个网际协议地址中,选取网际协议地址;返回选取出的网际协议地址;其中,接收到的网际协议地址指示内容分发网络中的边缘节点。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的名称在某种情况下并不构成对该单元本身的限定,例如,第一获取单元还可以被描述为“获取至少两个网际协议地址的单元”。

应当理解,本公开的各部分可以用硬件、软件、固件或它们的组合来实现。

以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。

相关技术
  • 用于至少一个IC集成电路的安全系统、安全集成电路卡和安全无线通讯的方法
  • 一种用于物联网(IOT)系统的行为和/或性能的仿真的方法、系统和仿真节点、IOT系统和IOT通信设备、程序和计算机可读介质
  • 一种用于电网企业的网络攻击行为仿真系统的仿真方法
技术分类

06120116485708