使用多个协同仿真器的并行仿真的制作方法

文档序号:6364087阅读:327来源:国知局
专利名称:使用多个协同仿真器的并行仿真的制作方法
技术领域
本发明总体涉及仿真系统,具体地涉及使用协同仿真器进行仿真的方法和系统。
背景技术
计算机化仿真技术被用于分析和解决不同领域中的复杂计算问题,例如验证复杂电子硬件设计的性能。现有技术中已知许多仿真技术。一些技术使用并行处理来减少仿真时间。例如,PCT国际公开WO 2009/118731(该公开内容以参引方式纳入本文)描述了一种用于设计仿真的方法,该方法包括将一个设计的验证任务划分(partition)成具有执行依赖性的第一多个原子处理单元(PE)。该方法还包括计算用于在一个多处理器设备上执行PE的顺序,所述多处理器设备包括并行运行的第二多个处理器,并根据内置的调度策略 调度由处理器执行的PE。不考虑调度策略,所述顺序通过不同的处理器与执行依赖性不冲突地并发执行PE。根据计算的顺序和调度策略,PE在处理器上执行,以得出仿真结果。该设计的性能根据仿真结果而被验证。作为另一个实施例,PCT国际公开WO 2010/004474(该公开内容以参引方式纳入本文)描述了一种包括接受计算任务的定义的计算方法,该计算任务包括多个具有执行依赖性的原子处理单元(PE)。所述计算任务被编译,以在多处理器设备上并发地执行,所述多处理器设备包括多个处理器,该多个处理器通过在一个包括一个第二数量的执行序列的调用数据结构中与执行依赖性不冲突地布置所述PE而能够同时地执行第一数量的PE,所述第二数量大于I且不超过第一数量。所述多处理器设备被调用以运行软件代码,该软件代码响应于所述调用数据结构而并行地执行所述执行序列,以得出计算任务的结果。

发明内容
下文描述的一个实施方案提供一种方法,包括由控制多个协同仿真器的一个仿真器接受一个用于仿真的仿真任务。所述多个协同仿真器中的每一个被分配执行所述仿真任务中的一个或多个相应的子任务。通过调用每个协同仿真器执行所述分配的相应的子任务来执行所述仿真任务。在一些实施方案中,所述仿真任务在任何给定的时间由一个仿真状态所定义,所述仿真状态由所述仿真器保持;以及,每个子任务在任何给定的时间由一个相应的协同仿真状态所定义,所述协同仿真状态由被分配执行所述子任务的所述协同仿真器独立于所述仿真器保持。在一些实施方案中,执行所述仿真任务包括由一个给定的协同仿真器执行一个给定的子任务,该给定的子任务包含一个赋值语句;如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前将所述赋值语句的结果从所述给定的协同仿真器返回至所述仿真器;以及如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果。在一个实施方案中,返回所述结果包括调度所述仿真器在一延迟时间呼叫所述给定的协同仿真器,以接受所述赋值语句的结果。在一些实施方案中,所述方法包括在一个给定的协同仿真器执行的一个给定的子任务执行完成之前,将所述仿真任务的控制从所述给定的协同仿真器返回至所述仿真器,以使得至少一个其他协同仿真器与所述给定的协同仿真器并发运行。返回所述控制可包括调度所述仿真器在一延迟时间呼叫所述给定的协同仿真器,以接受所述给定的子任务的结果。在一个公开的实施方案中,执行所述仿真任务包括由所述仿真器执行所述仿真任务的至少一个子任务。执行所述至少一个子任务可包括使用由所述仿真器执行的所述至少一个子任务同步两个或更多个子任务,所述两个或更多个子任务由两个或更多个相应的协同仿真器执行。在一些实施方案中,所述方法包括将所述仿真任务表示为一个分层树结构,并通 过递归遍历所述分层树结构将所述仿真任务划分为所述子任务。所述方法可包括使用一个或多个编译器编译所述子任务。在一个实施方案中,编译所述子任务包括使用两个或更多个相应的分立编译器编译两个或更多个所述子任务。在一个公开的实施方案中,接受所述仿真任务包括接受硬件设计的定义,以及执行所述仿真任务包括验证所述硬件设计。所述方法可包括在一个给定的协同仿真器中使用一个图形处理单元(GPU)执行给定的子任务的至少一部分。根据本发明的一个实施方案,还提供一种方法,该方法包括由一个仿真器调用一个协同仿真器,以执行一个仿真任务的一个子任务,其中所述子任务包括至少一个赋值语句。如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前将所述赋值语句的结果从所述协同仿真器返回至所述仿真器。如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果。所述仿真任务是由所述仿真器使用所述子任务的结果来执行的。根据本发明的一个实施方案,还提供一种系统,该系统包括一个仿真器和多个协同仿真器。所述仿真器被配置为接受一个仿真任务,以分配所述多个协同仿真器中的每一个执行所述仿真任务的一个或多个相应的子任务,并通过调用每个协同仿真器执行所述分配的相应的子任务来执行所述仿真任务。根据本发明的一个实施方案,还提供一种系统,该系统包括一个仿真器和一个协同仿真器。所述协同仿真器被配置为接受和执行一个仿真任务的一个子任务,其中所述子任务包括至少一个赋值语句,如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前返回所述赋值语句的结果,且如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果。所述仿真器被配置为调用所述协同仿真器以执行所述子任务,并使用从所述协同仿真器返回的所述子任务的结果来执行所述仿真任务。根据本发明的一个实施方案,还提供一种计算机软件产品。该产品包括有形非暂时计算机可读媒介,其中程序指令存储在该媒介中,当由计算机读取该指令时,该指令使得所述计算机接受一个仿真任务,以分配多个协同仿真器中的每一个执行所述仿真任务中的一个或多个相应的于任务,并通过调用每一个协同仿真器执行所述分配的相应子任务来执行所述仿真任务。根据本发明的一个实施方案,还提供一种计算机软件产品。该产品包括有形非暂时计算机可读媒介,其中程序指令存储在该媒介中,当由计算机读取该指令时,该指令使得所述计算机接受和执行一个仿真任务的子任务,其中所述子任务包括至少一个赋值语句,如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前返回所述赋值语句的结果,且如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果。从下文实施方案的详细描述,结合附图,可更全面地理解本发明。


图I是示意性示出根据本发明的一个实施方案的仿真系统的方块图;
图2是示意性示出根据本发明的一个实施方案的仿真问题的划分的图示;图3和4是示意性示出根据本发明的一个实施方案的仿真器和多个协同仿真器之间的交互的图示。
具体实施方式
总述下文描述的本发明的实施方案提供了用于执行仿真任务的改进的方法和系统。所公开的技术的应用可包括例如超大规模集成(VLSI)、模拟或控制硬件设计的验证。其他应用可在研究工程领域。在一些实施方案中,仿真系统包括控制多个协同仿真器的仿真器。为了执行某一仿真任务,每个协同仿真器被分配执行所述仿真任务的一个或多个子任务。所述仿真器通过调用每个协同仿真器执行其被分配的子任务,以及同步和协调多个协同仿真器的运行来执行仿真任务。不同于一些已知的其中仿真任务是由多个并行处理器来执行的并行仿真方案,在所公开的技术中,每个子任务由一个相应状态定义,该状态由独立于仿真器的正执行的协同仿真器所保持。一些公开的实施方案提供了仿真器和协同仿真器之间的接口和交互机制,这实现了整个系统的数据同步和并发执行。还描述了将仿真任务划分成一组均衡的于任务的示例性过程。划分为多个子任务使得多个子任务并行编译。在一些实施方案中,不同的子任务可被不同的(可能并行的)编译器编译。使用多个协同仿真器提供了相当大的优势。例如,所公开的仿真系统能够执行大型仿真任务,这些仿真任务超出了单个仿真器或者仿真器/协同仿真器对的存储能力和计算复杂度能力。再者,在多个并行协同仿真器之间划分一个仿真任务使得仿真时间显著减少。由于每个协同仿真器独立地保持其子任务的状态,因此所公开的方案提供了仿真器实际的卸载技术(offloading),因此可高度扩展。系统描述图I是示意性示出根据本发明的一个实施方案的仿真系统20的方块图。在本文描述的实施方案中,系统20被用于验证电子硬件设计。然而,在替代实施方案中,系统20可被用于执行任何其他合适的仿真任务,例如使用多个并发搜索引擎进行搜索。系统20包括一个仿真器24以及一个或多个协同仿真器28。在该实施例中,系统包括被指示为#1.棚的N个协同仿真器。尽管本文描述的实施方案主要指的是包括多个协同仿真器的配置,但是所公开的技术类似地可适用于仅具有单个协同仿真器的配置。
仿真器24设有待被执行的一个仿真任务,例如待被验证的硬件设计。在一个示例性实施方案中,硬件设计使用Verilog来表示。替代地,该设计可使用任何其他合适的硬件描述语言(HDL)(例如,VHDL),或者其他寄存器传输级(RTL)抽象来表示。仿真器24被配置为运行该仿真任务,该仿真任务被划分成待被仿真器和协同仿真器28执行的子任务。这种类型的执行通常涉及其中仿真任务被划分成子任务的预备处理阶段,如下文描述的。通常,每个子任务包括一个具有相应数据库的共享对象。在划分之后,仿真器将至少一些子任务提供至协同仿真器,并运行协同仿真器以执行指定给它们的子任务。应注意,一些子任务可在仿真器内部执行,并不委派给协同仿真器。例如,测试平台(test-bench)子任务(即,仿真控制)和对协同仿真器进行同步的子任务通常由仿真器执行。(应注意,测试平台任务可由协同仿真器执行。)在一些实施方案中,仿真任务由另一个处理器或系统划分,随后以划分形式提供至仿真器24。 在本专利申请和权利要求的上下文情景中,术语“协同仿真器(co-simulator)”指的是执行具有相应内部状态的一部分仿真任务的处理单元。这些内部状态对仿真器来说并非完全可得到,仿真器仅知晓定义整个仿真任务的整个状态。换句话说,协同仿真器是有状态的处理单元,每个协同仿真器独立于仿真器而保持其被指定部分的仿真任务的内部状态。仿真器可以同步和控制不同的协同仿真器,但是通常仅知晓仿真的整个状态,不会知晓协同仿真器的内部状态。协同仿真器的这个定义与一些已知的并行处理方案相反,在已知的并行处理方案中,仿真任务被划分为由多个并行的无状态的处理器或处理核执行的并行任务。本文中的协同仿真器28有时被称作加速器,且两个术语在本文中可互换使用。将某一仿真子任务委派给一个协同仿真器,有时被称作加速该仿真任务的部分。在图I的示例性实施方案中,仿真器24包括仿真器中央处理单元(CPU) 32和接口36,仿真器中央处理单元(CPU) 32执行仿真器的处理功能,接口 36与协同仿真器通信。每个协同仿真器28包括一个与仿真器24通信的接口 40、一个协同仿真器CPU 44和一个图形处理单元(GPU) 48。CPU 44管理和控制协同仿真器运行。GPU 48执行分配给协同仿真器的至少一部分仿真子任务。在一些实施方案中,CPU 44可执行分配给协同仿真器的一部分仿真子任务。在上文引用的PCT国际公开W02009/118731和W02010/004474中讨论了使用并行处理器(例如,GPU)来执行仿真任务的某些方面。出于若干原因,使用多个协同仿真器是有利的。例如,可被仿真的设计的大小通常被协同仿真器(例如,GPU)的有限存储大小所限制。在多个协同仿真器之间划分设计仿真任务,使得该系统能够对不能采用单个协同仿真器来仿真的大的设计进行仿真。再者,GPU (例如,NVIDIA GPU的CUDA)的运行环境有时将单个仿真实例可使用的存储大小限制在小于该GPU的总存储大小。适当地划分子任务使得该系统可利用协同仿真器的全部存储空间。此外,并行运行多个协同仿真器使得仿真带宽有相当大的增加,且仿真时间显著减少。图I中所示出的系统配置,是仅出于概念清楚的目的而选择的示例性配置。在替代实施方案中,系统20可具有任何其他合适的配置。例如,该系统可包括任何合适数量的协同仿真器。仿真任务可以任何合适方式被划分为任何合适数量的子任务。给定的协同仿真器28可包括一个或多个任何合适类型的处理单元,未必是GPU或其他并行处理器。在一些实施方案中,该系统可包括运行不同的、相应的仿真任务的多个仿真器24,或者运行多个仿真任务的单个仿真器。给定的协同仿真器可执行属于一个以上的仿真任务的子任务。仿真器24和协同仿真器28可在硬件、软件中实施,或者使用硬件元件和软件元件的组合来实施。在一个示例性实施方案中,整个系统20在单个服务器平台中实施,其中每个协同仿真器使用相应的刀片服务器来实施。然而,替代地,可使用任何其他合适的配置。通常,CPU32、CPU 44和GPU 48中的每一个可各自包括以软件编程来执行本文描述功能的通用处理器。软件可以电子形式例如经网络下载至处理器,或者替代地或附加地,软件可在非暂时有形媒介,例如磁存储器、光存储器或电存储器上被提供和/或存储。在本实施例中,仿真任务包括待被验证的电子硬件设计。该设计使用Verilog进行建模。Verilog 是例如在 2001 年的标题为 “IEEE Standard Verilog Hardware Description Language” 的 IEEE 标准 1364-2001 和 2009 年的标题为 “IEEE Standardfor System Verilog-Unified Hardware Design, Specification, and VerificationLanguage”的IEEE标准1800-2009中所规定的,两个标准以参引方式纳入本文。在该实施方案中,仿真器24和协同仿真器28使用Verilog程序接口(VPI)进行通信。在上文引用的IEEE 1364-2001标准中的26-27章中描述了 VPI。替代地,任何其他合适的接口或通信协议,例如,程序语言接口(PLI),可被用于仿真器24和协同仿真器28之间的通信。在上文引用的IEEE 1364-2001标准中的20-25章中描述了 PLI。其他接口实施例是DirectC和直接内核接口(Direct Kernel Interface) 分层仿真任务划分图2是示意性示出根据本发明一个实施方案的仿真问题的划分的图示。在该实施例中,仿真任务(例如,待被验证的设计)被建模为分层树50。树中的每个节点表示一个(可能是空的)仿真子任务。每个节点与其父节点和子节点通信。应注意,标记为“ACC”的节点表示被加速的子任务,即被委派给协同仿真器28执行。应注意,标记为“NACC”的节点表示未被加速的子任务,即由仿真器24执行。节点54表示仿真任务的顶节点。一个给定的仿真任务(例如,一个设计)可具有多个顶节点。 在本实施例中,仿真任务被划分成三个未被加速的子任务(由NACC节点56和66,以及也未被加速的顶节点54表示)和六个被加速的子任务(由ACC节点58、60、62、64、68和70表示)。虚线框74、76、78、80、82和84表示分配给相应的不同协同仿真器执行的划分。在该实施例中,每个协同仿真器执行由单个被加速的节点表示的子任务。然而,替代地,一个给定的协同仿真器可执行对应于多个被加速的节点的多个子任务。通常,包括被加速的节点的任何子树的根是未被加速的节点。例如,未被加速的节点56是包括被加速的节点60、62和64的子树的根。未被加速的节点66是包括被加速的节点68和70的子树的根。未被加速的节点54是包括节点58的子树的根。换句话说,任何两个被加速的节点(即,分配给协同仿真器的任何两个子任务)经由未被加速的节点同步(即,经由仿真器同步)。在一些实施方案中,被加速的节点之间的通信是通过未被加速的节点实现的,通过未被加速的节点使被加速的节点同步。替代地,被加速的节点可彼此之间直接通信,尽管被加速的节点是通过一个未被加速的节点进行同步的。仿真器24(或任何其他处理器或系统)可以任何合适方式将仿真任务划分成这种类型的分层结构。一种示例性划分方法将在下文详细描述。
仿真器和协同仿真器之间的交互在一些实施方案中,仿真器24和协同仿真器28使用这样一种机制通信,该机制确保仿真器和协同仿真器中的各种不同信号和数据库之间的同步和数据完整性。下文的描述涉及其中仿真器和协同仿真器使用VPI进行通信的系统配置。加以必要的修改,所公开的技术可使用其他各种合适的接口或通信协议。仿真器24通常在一系列仿真时隙中仿真一个Verilog设计。一个给定的协同仿真器28在一个给定的时隙中的处理,被分割成进入阶段(ingress phase)、执行阶段(execution phase)和离开阶段(egress phase)。在进入阶段,协同仿真器从仿真器中读取一个或多个信号的值。在执行阶段,协同仿真器对信号应用适当的处理。在离开阶段,协同仿真器将处理结果(即,信号的更新值)提供回至仿真器。记录(register)或订阅(subscribe)信号并请求仿真器在信号值改变时提供一个触发,协同仿真器读取一个给定的仿真器信号。该特征在VPI术语中被称作“在值改变时 回调”。记录处理可使得一个给定的信号上的值改变触发读取(“进入处理”)一个或多个其他信号。因此,协同仿真器未必需要记录所有的进入信号。由协同仿真器在执行阶段执行的处理可包括任何合适的Verilog语句。尤其是,该处理可包括阻塞赋值和/或非阻塞赋值(NBA)。在所公开的仿真器和协同仿真器之间的交互机制中,两种类型的赋值处理是不同的,如下文将进一步描述的。在阻塞赋值中(在Verilog中指示为“=”,例如A = B),赋值的右手侧(RHS)立即被求值且被替代进赋值的左手侧(LHS)。在该给定的仿真时隙中的其他计算被阻塞,直到赋值完成。在非阻塞赋值中(指示为“< = ”,例如A<= B),赋值的RHS立即被求值,但是将该结果赋值到LHS中则被延迟到在同一时隙中的其他赋值以及它们产生的赋值完成。(在下文图3的状态模型中,结果的赋值被延迟到NBA状态,仿真器进入激活(ACTIVE)状态或NBA状态。当进入NBA状态时,仿真器首先呼叫“预-NBA(Pre-NBA) ”呼叫(cbNBASync/cbReadffriteSync)。赋值到LHS(在非阻塞情形中)是在NBA状态中执行的。其他计算未被正在讨论的赋值所阻塞,是可执行的。通常,尽管不是必须的,但是阻塞赋值被用于对组合逻辑进行建模,而非阻塞赋值被用于对时序逻辑进行建模。图3是示意性示出根据本发明一个实施方案的仿真器24和协同仿真器28之间的交互的图示。如该图中可看出的,仿真器通过遍历被指示为(PREP0NED)、激活(ACTIVE)、非激活(INACTIVE)、NBA和延迟(POSTPONED)的一系列状态来处理每个时隙。在同一时隙中可多次遍历ACTIVE、INACTIVE和NBA状态。在上文引用的ffiEE 1800-2009标准的第9. 3节和IEEE 1364-2001标准的第5. 3节中可找到对于这些状态以及在每个状态中执行的处理的详细描述。在图3的示例性流程中,在INACTIVE状态,仿真器24向协同仿真器28提供触发90。每个协同仿真器接收对应于其所记录的信号的触发,该信号的值已经被改变。响应于触发90,每个被触发的协同仿真器在Pre-NBA回调时记录,即请求仿真器在从INACTIVE状态转变至NBA状态后再次触发它。仿真器通过使用Pre-NBA回调触发94再次触发协同仿真器来响应。应注意,由于接下来的状态执行进入阶段,因此应该验证在继续进行之前的所有的激活和非激活信号被更新。上述延迟机制确保离开处理仅在没有赋值在等待执行之后才执行。响应于触发94,每个被触发的协同仿真器执行进入阶段,即从仿真器读取信号值。随后,每个协同仿真器执行执行阶段,特别是更新其内部状态。此时,阻塞赋值和非阻塞赋值的处理是不同的。对于每个阻塞(非-NBA)赋值,协同仿真器执行离开阶段,即将已更新的信号值返回至仿真器。对于每个非阻塞赋值(NBA),协同仿真器在仿真器的NBA状态后的一晚些时间调度离开阶段。延迟的回调cbReadOnlySync 由箭头 102 标记。通常,协同仿真器不应在cbReadOnlySync回调时执行离开阶段,而是仅执行进入阶段,即读取信号。另一个选择是在CbReadWriteSync时记录。然而,在实际情况中,一些仿真器不在后-NBA(Post-NBA)(箭头98)时呼叫该回调。在一些实施方案中,在NBA状态处理完成之后,通过使得仿真器在“valUe_Change event”时呼叫协同仿真器来延迟离开阶段° 该机制使用信号 signal_updated_by_simulator 和 signal_driven_by_co_simulator来实施。由于信号signal_updated_by_simulator使用“< = ”来更新,因此其在NBA状态 处理期间被更新。然而,由于协同仿真器在该信号时记录(由于valUe_Change的原因),在NBA状态处理之后,仿真器不会继续到POSTPONED状态,而是又一次到ACTIVE状态,并在接下来的INACTIVE状态中呼叫协同仿真器。在一些实施方案中,对于阻塞赋值,离开阶段(将赋值结果从协同仿真器返回至仿真器)是在系统中的任何非阻塞赋值(包括例如,由仿真器、给定的协同仿真器和其他协同仿真器执行的阻塞赋值)执行之前执行的。另一方面,对于非阻塞赋值,离开阶段是在系统中的所有阻塞赋值执行之后执行的。作为使用pre-NBA回调触发94的替代,被触发的协同仿真器可在post-NBA回调时记录,即请求仿真器在NBA状态后再次触发它。在该实施方式中,仿真器通过采用post-NBA回调触发98再次触发协同仿真器来响应。当多个协同仿真器28 (或其他单元)使用上述机制与仿真器24通信时,所有这些单元的信号和数据库会保持同步。每个协同仿真器执行其进入阶段、执行阶段和离开阶段。在非阻塞赋值的情形中,仅在同一时隙中被触发的所有协同仿真器已经完成其相应的进入阶段之后才需要执行离开阶段。在协同仿真器和仿真器之间也需要一个类似的同步(即使在单个协同仿真器的情形中)。尽管该机制是在多个协同仿真器的情景中描述的,但是该机制也可被用于运行单个仿真器。无相互阻塞地运行多个协同仿真器当仿真器24使用图3的机制与多个协同仿真器交互时,每个协同仿真器的执行阶段被阻塞。例如,如果在到给定的协同仿真器的pre-NBA回调(图3中的箭头94)期间,该协同仿真器执行阻塞呼叫(即阻塞该处理,直到已经完成进入、执行和离开),仿真器将不能够在pre-NBA时呼叫其他协同仿真器。结果,其他协同仿真器将不能与该给定的协同仿真器并发执行它们的执行。相反,每个协同仿真器将仅在前一协同仿真器完成之后执行其进入、执行和离开。下文描述的机制使得执行阶段的并发运行成为可能。当使用该机制时,每个协同仿真器在其完成进入阶段且初始化执行阶段(执行被认为是非阻塞的)之后将控制返回至仿真器。
在一些实施方案中,一个给定的协同仿真器将控制返回至仿真器,即使该协同仿真器并未完成其执行阶段和离开阶段,以允许其他协同仿真器继续进行。如果该协同仿真器没有在将控制返回至仿真器时完成其执行阶段和离开阶段,则该协同仿真器调度仿真器在随后的时间再次呼叫它以更新离开阶段的结果。该示例性处理在图4中示出。图4是示意性示出根据本发明一个实施方案的一个仿真器和多个协同仿真器之间的交互的图示。图4的处理从仿真器24采用触发90触发一个给定的协同仿真器28 (在值变化时回调)开始。作为响应,在加载步骤106,协同仿真器加载被触发的信号的相应的数据库。数据库通常指示接下来的步骤,例如进入、执行、离开(NBA/非-NBA)。协同仿真器记录pre-NBA回调。结果,仅在所有ACTIVE和INACTIVE事件之后以及在NBA之前,仿真器 呼叫该回调。在处理步骤110,当pre-NBA触发回调触发94到达时,协同仿真器执行进入阶段,调用非阻塞赋值的执行,并调度延迟的离开处理。在下一个值改变回调触发90中,协同仿真器执行一个完成检验步骤114。在该步骤中,协同仿真器检验执行阶段是否已经完成。如果完成,则协同仿真器获得执行结果,并执行离开阶段。否则,协同仿真器重新调度离开用于阻塞赋值。使用该技术,在一个协同仿真器中的执行不会阻塞其他协同仿真器。结果,协同仿真器可并发执行它们相应的子任务,因此减少了仿真时间。当协同仿真执行由CPU 44而非GPU 48来执行时,可使用多个并发线程或进程来支持并发。在一些实施方案中,系统20使用下列机制调度阻塞执行和非阻塞执行■定义了两个指不为 “signal_driven_by_co_simulator” 和 “signal_updated_by_simulator”的Verilog信号(通常在被仿真器编译的一个Verilog文件中)。■对于信号signal_updated_by_simulator,协同仿真器记录在值变化时的回调。■添加下面的代码(通常在被仿真器编译的一个Verilog文件中):a.对于立即(阻塞)更新always (signal_driyen_by_co_simulator)signal_updated_by_simulator = signal_driven_by_co_simulatorb.对于NBA更新always (signal_driyen_by_co_simulator)signal_updated_by_simulator < = signal_driven_by_co_simulator■当协同仿真器准备调度回调时,它经由VPI从仿真器读取signal_driven_by_co-simulator信号,为该信号值增加1,并经由VPI将已增加的值写回至仿真器。由于仿真器如上文所述实施对signal_updated_by_simulator的更新,因此仿真器将呼叫协同仿真器(由于VPI值改变的原因)。将仿真任务划分为子任务—个给定的仿真任务(例如,待被验证的VLSI设计),可以不同方式被划分成子任务。在一些实施方案中,划分由在仿真器24之前的处理执行。该处理生成随后被该仿真器使用的结果。划分可由与运行仿真器24相同的计算平台执行。替代地,划分可由系统20外部的另一个处理器或系统执行,在该情形中,该设计可以以被划分的形式提供给仿真器24。下面的描述提供一个示例性划分处理。该描述指的是由处理器执行的划分,而不考虑运行它的实际计算平台。在该不例性实施方案中,处理器分割一个由分层树结构(例如,上文图2的树50)表示的仿真任务。处理器将该任务分割成多个(例如,数十个)划分。每个划分包括分层树中的某一节点以及该节点下面的节点。每个划分的根节点具有一个未被加速的父节点,即该父节点由仿真器执行且并未被分配至任何协同仿真器。各划分之间的同步经由仿真器执行。各划分之间的通信可直接实现,或经由仿真器实现。用户提供了两个指示为 MIN_SPLIT_WEIGHT_SIZE 和 MAX_SPLIT_WEIGHT_SIZE 的参数。MIN_SPLIT_WEIGHT_SIZE规定一个划分的允许的最小权重。MAX_SPLIT_WEIGHT_SIZE规定一个划分的最大权重。在一些情形中,可创建一个大于MAX_SPLIT_WEIGHT_SIZE的划分,但是只有在不可能将该划分分割成大于MIN_SPLIT_WEIGHT_SIZE的时候才可以如此,使得它们覆盖该分割权重的至少某一比例(由Pl指示)。—个划分的权重可以多种方式定义。在一些实施方案中,树节点的权重被定义为 所讨论的节点处和该节点下方的树节点的数量。在这些实施方案中,一个划分的权重被定义为作为该划分的根的节点的权重。在其他实施方案中,例如在RTL设计中,节点的权重也可取决于该节点和该节点下方的节点中的语句(statement)和/或构造(construct)的数量。再者,一个划分的权重被定义为作为该划分根(partition root)的节点的权重。在一些实施方案中,处理器运行计算每个树节点的权重的递归过程。在一个示例性实施方案中,划分是由下面的采用当前节点(cur_code)作为自变量的递归函数来实行的-Cur_weight = cur_code 的权重-Is_nacc =该模块是未被加速的-Is_top =该节点被用户规定为受测设备(DUT)的顶层-对cur_code的子节点中大于MIN_SPLIT_WEIGHT_SIZE的权重求和为sum_weights_in_range-如果(cur_weight> MAX_SPLIT_ffEIGHT_SIZE 且 sum_weights_in_range >Pl*cur_weight)或着 is_nacc 对于所有子节点呼叫auto_split,并且对所返回的布尔值一起进行OR运算至0R_result 中-如果(cur_weight< MAX_SPLIT_WEIGHT_SIZE 或者 0R_result)且! is_nacc且(cur_weight > SPLIT_MIN_WEIGHT_SIZE 或者 is_top)将该节点添加为分割根返回True-返回0R_result当使用该递归函数时,如果有下述情况,则分层的下一层被检查-当前节点“太重”,即其权重太大;以及-当前节点的子节点的权重(那些>MIN_SPLIT_WEIGHT_SIZE)的和为一覆盖当前节点权重的至少Pl %的值。因此,在子节点(可变成划分)不能覆盖该权重情形中,可允许超过MAX_SPLIT_WEIGHT_SIZE。因此参数MAX_SPLIT_WEIGHT_SIZE在一些情形中是一个被超出的“软(soft)”约束,而MIN_SPLIT_WEIGHT_SIZE是一个硬(hard)约束。在上文描述中,Pl是一个可用户定义的参数。在一个示例性实施方案中,Pl = 90%,但可使用任何其他合适的参数值。在替代实施方案中,可使用任何其他合适的划分处理。在一些实施方案中,使用多个编译器编译被划分的仿真任务,以使得每个编译器编译包括一个或多个子任务的一个相应的子集。不同的编译器可在不同的处理器或其他计算平台上运行,在一些实施方案中彼此并行地运行。尽管本文描述的实施方案主要解决的是设计验证应用,但是本文描述的方法和系统也可用在其他应用中。例如,上文描述的划分处理可用作其他的电子设计自动化(EDA)应用中,例如布局布线应用。另一个示例性应用是使用多个并发搜索引擎进行并发搜索。因此应理解,上文描述的实施方案通过实施例来引证,且本发明不限于上文特定示出和描述的。相反,本发明的范围包括上文描述的不同特征的组合和子组合,以及本领域 普通技术人员在阅读了前文描述后会想到的并且在现有技术中未被公开的本发明的变化和改型。本专利申请中以参引方式结合的文件被认为是本申请的一个整体部分,除非在这些结合的文件中所定义的任何术语与本说明书中明示或暗示的定义相冲突时,则仅考虑本申请文件中的定义。
权利要求
1.一种方法,包括 由控制多个协同仿真器的一个仿真器接受一个用于仿真的仿真任务; 所述多个协同仿真器中的每一个被分配执行所述仿真任务中的一个或多个相应的子任务; 通过调用每个协同仿真器执行所述分配的相应的子任务来执行所述仿真任务。
2.根据权利要求I所述的方法,其中所述仿真任务在任何给定的时间由一个仿真状态所定义,所述仿真状态由所述仿真器保持;其中每个子任务在任何给定的时间由一个相应的协同仿真状态所定义,所述协同仿真状态由被分配执行所述子任务的所述协同仿真器独立于所述仿真器所保持。
3.根据权利要求I所述的方法,其中执行所述仿真任务包括 由一个给定的协同仿真器执行一个给定的子任务,该给定的子任务包含一个赋值语句; 如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前将所述赋值语句的结果从所述给定的协同仿真器返回至所述仿真器;以及 如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果。
4.根据权利要求3所述的方法,其中返回所述结果包括调度所述仿真器在一延迟时间呼叫所述给定的协同仿真器,以接受所述赋值语句的结果。
5.根据权利要求I所述的方法,包括在一个给定的协同仿真器执行的一个给定的子任务执行完成之前,将所述仿真任务的控制从所述给定的协同仿真器返回至所述仿真器,以使得至少一个其他协同仿真器与所述给定的协同仿真器并发运行。
6.根据权利要求5所述的方法,其中返回所述控制包括调度所述仿真器在一延迟时间呼叫所述给定的协同仿真器,以接受所述给定的子任务的结果。
7.根据权利要求I所述的方法,其中执行所述仿真任务包括由所述仿真器执行所述仿真任务的至少一个子任务。
8.根据权利要求7所述的方法,其中执行所述至少一个子任务包括使用由所述仿真器执行的所述至少一个子任务同步两个或更多个子任务,所述两个或更多个子任务由两个或更多个相应的协同仿真器执行。
9.根据权利要求I所述的方法,包括将所述仿真任务表示为一个分层树结构,并通过递归遍历所述分层树结构将所述仿真任务划分为所述于任务。
10.根据权利要求I所述的方法,包括使用一个或多个编译器编译所述于任务。
11.根据权利要求10所述的方法,其中编译所述子任务包括使用两个或更多个相应的分立编译器编译两个或更多个所述子任务。
12.根据权利要求I所述的方法,其中接受所述仿真任务包括接受硬件设计的定义,且其中执行所述仿真任务包括验证所述硬件设计。
13.根据权利要求I所述的方法,包括在一个给定的协同仿真器中使用一个图形处理单元GPU执行给定的子任务的至少一部分。
14.一种方法,包括 使用一个仿真器调用一个协同仿真器,以执行一个仿真任务的一个子任务,其中所述子任务包括至少一个赋值语句;如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前将所述赋值语句的结果从所述协同仿真器返回至所述仿真器,且如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果;以及 由所述仿真器使用所述子任务的结果来执行所述仿真任务。
15.—种系统,包括 多个协同仿真器;以及 一个仿真器,所述仿真器被配置为接受一个仿真任务,以分配所述多个协同仿真器中的每一个执行所述仿真任务的一个或多个相应的子任务,并通过调用每个协同仿真器执行所述分配的相应的子任务来执行所述仿真任务。
16.根据权利要求15所述的系统,其中所述仿真器被配置为保持在任何给定的时间定义所述仿真任务的一个仿真状态,且其中每个协同仿真器被配置为独立于所述仿真器,保持在任何给定的时间定义被分配至所述协同仿真器的子任务的相应的协同仿真状态。
17.根据权利要求15所述的系统,其中一个给定的协同仿真器被配置为执行一个包含一个赋值语句的给定的子任务,如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前将所述赋值语句的结果返回至所述仿真器,且如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果。
18.根据权利要求17所述的系统,其中所述给定的协同仿真器被配置为调度所述仿真器在一延迟时间呼叫所述给定的协同仿真器,以接受所述赋值语句的结果。
19.根据权利要求15所述的系统,其中一个给定的协同仿真器被配置为在所述给定的协同仿真器执行的给定的子任务执行完成之前,将所述仿真任务的控制返回至所述仿真器,以使得至少一个其他协同仿真器与所述给定的协同仿真器并发运行。
20.根据权利要求19所述的系统,其中,在返回所述控制之后,所述给定的协同仿真器被配置为调度所述仿真器在一延迟时间呼叫所述给定的协同仿真器,以接受所述给定的子任务的结果。
21.根据权利要求15所述的系统,其中所述仿真器被配置为执行所述仿真任务的至少一个子任务。
22.根据权利要求21所述的系统,其中所述仿真器被配置为使用由所述仿真器执行的至少一个子任务同步两个或更多个子任务,所述两个或更多个子任务由两个或更多个相应的协同仿真器执行。
23.根据权利要求15所述的系统,包括一个处理器,该处理器被配置为将所述仿真任务表示为一个分层树结构,并通过递归遍历所述分层树结构将所述仿真任务划分为所述子任务。
24.根据权利要求15所述的系统,包括一个或多个被配置为编译所述子任务的编译器。
25.根据权利要求24所述的系统,其中所述一个或多个编译器包括被配置为分别编译两个或更多个子任务的两个或更多个分立的编译器。
26.根据权利要求15所述的系统,其中所述仿真任务包括硬件设计的定义,且其中所述仿真器被配置为通过验证所述硬件设计执行所述仿真任务。
27.根据权利要求15所述的系统,其中一个给定的协同仿真器包括图形处理单元GPU,该图形处理单元被配置为执行分配给所述给定的协同仿真器的一个给定的子任务的至少一部分。
28.—种系统,包括 一个协同仿真器,被配置为接受和执行一个仿真任务的一个子任务,其中所述子任务包括至少一个赋值语句,如果所述赋值语句是一个阻塞赋值,则在执行任何非阻塞赋值之前返回所述赋值语句的结果,且如果所述赋值语句是一个非阻塞赋值,则在执行所有阻塞赋值之后返回所述结果;以及 一个仿真器,被配置为调用所述协同仿真器以执行所述子任务,并使用从所述协同仿真器返回的所述子任务的结果执行所述仿真任务。
全文摘要
一种方法,包括由控制多个协同仿真器的一个仿真器接受用于仿真的仿真任务。所述多个协同仿真器的每一个被分配执行所述仿真任务的一个或多个相应子任务。所述仿真任务通过调用每个协同仿真器执行所述相应的分配的子任务来执行。
文档编号G06F9/45GK102736942SQ20121002244
公开日2012年10月17日 申请日期2012年2月1日 优先权日2011年4月12日
发明者I·凯舍, I·盖勒, S·密茨拉希, T·本-戴维, U·泰 申请人:洛克泰克科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1