专利名称:硬件设计的混合式并发及串行逻辑仿真的制作方法
技术领域:
本发明涉及逻辑仿真,且尤其涉及包括串行仿真引擎和并发仿真引擎的集成逻辑仿真器。相关技术逻辑仿真是电子电路的设计流程中的必要步骤。逻辑仿真通常借助于被称为逻辑仿真器的电子设计自动化(EDA)软件工具来执行,该逻辑仿真器处理通常以硬件描述语言(HDL)代码的形式提供的硬件设计。在将硬件设计交付给生产实际电子电路的物理实现阶段之前,硬件设计者执行大量的逻辑仿真来验证硬件设计遵循其规范。在典型的硬件设计流程中,伴随着设计过程一起执行功能验证过程以便使得生产出不遵循其规范的电路的风险最小化。逻辑仿真通常生成用户有兴趣观察的一组电路信号的波形作为其结果。用户可以分析并可视化所生成的波形以验证该硬件设计正确地工作。逻辑仿真器也支持对具有嵌入式断言的硬件设计的仿真,嵌入式断言使用电路信号的值来检测导致电路故障的条件。逻辑仿真器在仿真电路的同时评估此类断言,并将其违例报告给用户。基于这些违例报告,用户可以发现和修复硬件设计中的设计错误。发明概述提供了一种仿真通过硬件描述语言(HDL)规定的设计的方法。在该方法中,可运行集成逻辑仿真器。该集成逻辑仿真器可包括串行仿真引擎和并发仿真引擎。串行仿真引擎每次可执行一个仿真,而并发仿真引擎可执行多个并发仿真。使用计算机,可基于由HDL的执行模型定义的事件类来同步串行仿真引擎和并发仿真引擎的仿真。该设计可划分成由该集成逻辑仿真器执行的两组模块。第一组模块可在串行仿真引擎上执行,而第二组模块可在并发仿真引擎上执行。在一个实施例中,该划分基于串行仿真引擎的能力和/或并发仿真引擎的能力来进行以达成期望水平的仿真性能。在另一实施例中,该划分可由用户手动执行。该串行仿真引擎或并发仿真引擎中任一者可被指定为该集成逻辑仿真器的主仿真引擎,其中另一个仿真引擎则被指定为副仿真引擎。在一个实施例中,该串行仿真引擎是主仿真引擎而该并发仿真引擎是副仿真引擎。在另一个实施例中,该并发仿真引擎是主仿真引擎而该串行仿真引擎是副仿真引擎。主仿真引擎在同步点调用副仿真引擎。在一个实施例中,这些同步点在由HDL的执行模型定义的队列评估之前。在另一个实施例中,这些同步点在由HDL的执行模型定义的队列评估之后。注意,进行设计划分可将设计层级纳入考虑。例如,在一个实施例中,第一模块正由副仿真引擎仿真意味着该设计层级内在该第一模块之下的更深处实例化的所有子模块也由该副仿真引擎来仿真。在另一实施例中,若(由副仿真引擎仿真的)第一模块实例化第二模块,则该第二模块可由主仿真引擎来仿真。根据该方法,可将诸副仿真引擎模块中的某些变量标识为用于与主仿真引擎通信的接口变量。这些接口变量的值可被存储在串行仿真引擎和并发仿真引擎两者中。可于在副仿真引擎中评估事件之前在同步点将接口变量值传递至副仿真引擎。在此传递期间,这些接口变量值可从主仿真弓I擎存储表示转译成副仿真弓I擎存储表示。在一个实施例中,仅发生改变的接口变量值在同步点被传递。
也可于在副仿真引擎中评估事件之后在同步点将接口变量值传递至主仿真引擎。在此传递期间,接口变量值可从副仿真引擎存储表示转译成主仿真引擎存储表示。在一个实施例中,仅发生改变的接口变量值在同步点被传递。注意,执行模型中的同步点可通过行业标准应用编程接口来建立。示例性行业标准应用编程接口包括但不限于编程语言接口(PLI)和验证规程接口(VPI)。在另一实施例中,同步点可通过专用接口来建立。值得注意的是,副仿真引擎模块可由主仿真引擎中的桩模块表示。该桩模块包括用于相应的副仿真引擎模块的接口变量。桩模块不包括相应的副仿真引擎模块的HDL。提供了另一种仿真以HDL描述的设计的方法。在该方法中,该设计的模块可被划分成用于由串行仿真引擎仿真的诸第一模块和用于由并发仿真引擎仿真的诸第二模块。可基于与HDL的执行模型一致的事件类来区分诸第一和第二模块的仿真优先级。使用计算机,串行仿真引擎和并发仿真引擎的仿真可针对每一事件类来同步。同步可包括在串行仿真引擎与并发仿真引擎之间传递经更新的接口变量值,由诸第二模块将其与诸第一模块的至少一子集共享。该传递可包括转译经更新的接口变量值的表不。每个第二模块可在串行仿真引擎中被表示为一桩模块,其中该桩模块是诸第一模块之一。并发仿真引擎中的接口变量的诸值可存储在字中,其中这些值与该桩模块在串行仿真引擎中的多个实例相关联。同步可进一步包括在串行仿真引擎中完成一事件类的评估,并随后将经更新的接口变量值传递至并发仿真引擎以评估该相同的事件类。同步还可再包括在并发仿真引擎中完成这一事件类的评估,并随后将经更新的接口变量值传递至串行仿真引擎以(I)在并发仿真引擎生成了该类中的新事件时评估该相同的事件类,或(2)根据HDL的执行模型评估下一事件类(若存在)。在一个实施例中,HDL是Verilog且这一事件类是活跃事件、非活跃事件、以及非阻塞性赋值更新事件之一。在一个实施例中,同步可包括基于由HDL指定的事件类的优先级使用串行仿真引擎和并发仿真引擎前行通过所有事件类。附图
简述
图I示出Verilog HDL执行模型中的队列评估的子集。图2解说嵌入式模块的端口变量,其用作该模块的接口变量。图3A和3B分别解说用于常规顶层模块(top_module)和包括桩模块(stubmodule)的顶层模块的示例性HDL。图4A和4B分别解说常规顶层模块和包括桩模块的顶层模块的框图。图5A和5B分别解说串行仿真引擎和并发仿真引擎中的接口变量值的示例性存储表不。图6A解说用于针对活跃事件队列评估在串行仿真引擎与并发仿真引擎之间进行转译和同步的示例性动作。图6B解说用于针对多个事件队列评估在串行仿真引擎与并发仿真引擎之间进行 转译和同步的示例性动作,这些事件队列基于由Verilog HDL执行模型指定的队列类型。图6C解说用于针对多个事件队列评估在串行仿真引擎与并发仿真引擎之间进行转译和同步的示例性动作,这些事件队列基于由VHDL执行模型指定的队列类型。图7解说用于串行仿真引擎和并发仿真引擎的数据存储。值得注意的是,用于并发仿真引擎的字存储允许一条被执行指令仿真多个逻辑功能并生成与串行仿真引擎中的多个逻辑实例相对应的多个输出。图8解说如由串行和并发仿真引擎实现的各个模块的框图。值得注意的是,串行仿真引擎中的模块包括将责任传递给并发仿真引擎的桩模块,而并发仿真引擎中的模块包括将责任传递给串行仿真引擎的桩模块。图9解说包括集成逻辑仿真器的示例性数字ASIC设计流程的简化表示。附图的详细描述常规逻辑仿真器在本文称为“串行仿真引擎”的技术中每次执行一个仿真。为了达成足够的性能,串行仿真引擎被设计成尽可能快地执行每个仿真。于2009年9月24日提交并通过援引纳入于此的题为“Concurrent Simulation Of Hardware Designs WithBehavioral Characteristics (对具有行为特性的硬件设计进行并发仿真)”的待决美国专利申请12/586,724描述了用于高效地执行硬件设计的并发仿真的技术,其在本文被称为“并发仿真引擎”。并发仿真引擎通过一次执行若干仿真来达成性能。取决于串行和并发仿真引擎的实现以及正被仿真的硬件设计的具体特性,可能希望使用串行仿真引擎来执行该硬件设计的某些部分并使用并发仿真引擎来执行该硬件设计的某些其他部分。以下描述用于将并发仿真引擎和串行仿真引擎集成到单个集成逻辑仿真器中的基于软件的技术。从此集成得到的逻辑仿真器在下文称为“集成逻辑仿真器”。注意,逻辑仿真器实现如由硬件描述语言(HDL)规定的特定执行模型。出于描述集成逻辑仿真器的目的,将使用Verilog HDL0然而,集成逻辑仿真器可应用于其他HDL以及与那些HDL相关联的执行模型。Verilog HDL根据潜在的离散事件执行模型来解读。定义从其执行事件的若干事件队列。事件⑴随着仿真前行而生成,⑵被放在特定队列上,⑶在仿真期间在如由执行模型所规定的特定时间点从该队列移除,以及(4)被执行。执行事件进而可生成附加事件,这些附加事件被放在队列上供以后执行。涉及事件的该序列继续,直至不再生成事件,此时仿真终止。
通常,要仿真的硬件设计以Verilog HDL表达为多个模块。Verilog模块与实际的硬件子组件之间往往存在对应关系,但不一定需要如此(例如,Verilog模块可表示并非由单个硬件子组件实现的抽象功能或行为)。Verilog模块被安排成层级,其中模块的实例被称为“嵌入”在另一模块中。例如,用于微处理器的模块可被分解成各种算术模块、逻辑模块、控制模块、以及存储模块。在该微处理器模块内,存在每个组成模块的以层级来组织的嵌入式实例。每个实例化的Verilog模块根据Verilog HDL执行模型的规范来生成供逻辑仿真器执行的事件。Verilog HDL逻辑仿真器无论是仅使用串行仿真引擎、仅使用并发仿真引擎、还是使用串行仿真引擎与并发仿真引擎的组合(后者即为本文描述的集成逻辑仿真器)来实现的,都应当遵循该执行模型。例如,图I示出由Verilog HDL执行模型规定的队列的子集。该Verilog HDL执行模型要求来自逻辑仿真器的活跃事件队列的所有活跃事件101在来自该逻辑仿真器的 非活跃事件队列的任何非活跃事件102执行之前执行。一旦活跃和非活跃事件队列耗尽,就执行来自非阻塞性赋值(non-blocking assignment即NBA)更新事件队列的NBA更新事件103。注意,Verilog HDL执行模型中还存在除图I中所示的那些队列以外的其他队列,其具有用于随着仿真前行使得从一个队列前进至另一个队列的确立的规则。在使用串行仿真引擎和并发仿真引擎两者的集成逻辑仿真器中,描述硬件设计的HDL程序可被划分成两组模块。一组模块由串行仿真引擎执行而另一组模块由并发仿真引擎执行。在集成逻辑仿真器中从一个队列前进至另一个队列必须跨串行仿真引擎和并发仿真引擎进行协调,以使得该集成逻辑仿真器不会违背Verilog HDL执行模型(例如,在串行仿真引擎或并发仿真引擎任一者中仍有活跃事件和非活跃事件要执行时不执行NBA更新事件)。Verilog模块通过输入/输出端口变量来彼此交互。Verilog模块还可通过称为跨模块引用的设施直接读写其他模块实例中的内部变量(其机理是本领域技术人员已知的且因此本文不再描述)。在模块间交互中使用的这些内部变量可被标识并称为模块的“接口
变量”。图2示出具有两个模块的简单常规设计加法器模块202以及将加法器模块202实例化的顶层模块201。顶层模块201中的变量与嵌入式加法器模块202中的变量之间的连接是通过加法器端口变量进行的。这些端口变量是该设计中的接口变量。如图2中所示,顶层模块201的接口变量“elk (时钟)”、“inputl (输入I)”和“input2 (输入2)”映射成加法器模块202的接口变量“clk”、“a”和“b”。因此,例如,当变量“输入I”改变时,变量“a”也改变。类似地,加法器模块202的接口变量“out (输出)”映射成顶层模块201的接口变量“sum (和)”。值得注意的是,当指派给串行仿真引擎的模块与指派给并发仿真引擎的模块对接时,该串行仿真引擎模块可与用作该并发仿真引擎模块的占位符的桩模块交互。该桩模块可包含该嵌入式模块的所有接口变量。回到图2中所示的设计,该顶层模块可被指派给串行仿真引擎并且该加法器模块可被指派给并发仿真引擎。在该情形中,串行仿真并非看到加法器模块RTL,而是替地看到该加法器的桩模块。图3A解说了设计200 (图2)的常规HDL 300,而图3B解说了在用集成逻辑仿真器来仿真时由串行仿真引擎看到的HDL 310。注意,加法器模块(adder_module)的接口变量保留在HDL 310中(也称为桩模块),但该加法器模块的功能方面(即“alWayS@(p0Sedge_elk) ”和“out=a+b”)不再存在于串行仿真引擎中。值得注意的是,如参照图4A和4B描述的,该加法器模块的功能方面代替地在并发仿真引擎中定义。图4A和4B解说顶层模块和嵌入式模块的示例性划分。具体而言,图4A解说了图2中所示的设计的常规逻辑仿真器视图。在该情形中,所有模块(即,顶层模块201和加法器模块202)都由串行仿真引擎401来仿真。作为对比,图4B解说了在使并发仿真引擎402负责嵌入式加法器模块202时的划分。在这种情形中,实际的加法器模块HDL可由并发仿真引擎402来仿真,而串行仿真引擎401可与该嵌入式加法器模块的桩模块202A交互。在图4B中所示的配置中,串行仿真引擎401可将其自己的存储403分配给每个接口变量(示出了一个接口变量)。可对用作桩模块202A的输入的接口变量中写入值,并且从用作桩模块202A的输出的接口变量读取值。同样,并发仿真引擎402可将其自己的存储404分配给每个接口变量(示出了一个接口变量)。可从用作并发仿真引擎模块(即,加法器·模块202)的输入的接口变量读取值,并且可对用作加法器模块202的输出的接口变量中写入值。如以上指出的,加法器模块202中的接口变量的值改变将反映在桩模块202A中,由此确保顶层模块201的正确运作。类似地,桩模块202A中的接口变量的值改变将反映在加法器模块202中以确保其正确运作。注意,不是接口变量的那些变量存储在串行仿真引擎401或并发仿真引擎402任一者中但不同时存储在这两者中。换言之,集成逻辑仿真器中的串行仿真引擎401和并发仿真引擎402之间的共享状态限于接口变量。值得注意的是,串行仿真引擎和并发仿真引擎可利用不同的表示法来存储变量值。在一个实施例中,串行仿真引擎可使用其中为变量存储多个值,其中每个仿真一个值的表示。例如,参考图5A中所示的串行仿真引擎500,考虑8位变量V的变量值表示,其具有关于以下4个不同仿真的值仿真O、仿真I、仿真2和仿真3。变量V的每个仿真存储8位。作为对比,参考图5B中所示的并发仿真引擎510,这4个仿真的值存储在多个4位字中。具体而言,分配了 8个这样的字,变量V中的每一位一个字(S卩,V
-V [7])。图5A和5B中的框501和502分别解说了在串行仿真引擎500和并发仿真引擎510中单个位跨多个仿真的值是如何组织的(参见例如位A、B、C和D)。由于存在接口变量的两个副本,即串行仿真引擎中一个副本以及并发仿真引擎中一个副本,因此这两个副本在更新时必须保持同步,以使得该集成逻辑仿真器保持整个仿真状态的一致视图。在一些实施例中,接口变量值在队列评估开始和结束时被同步。同步这些接口变量值要求在用于存储变量值的串行仿真引擎表示(参见例如图5A)与并发仿真引擎表示(参见例如图5B)之间进行转译。图6A解说在Verilog HDL执行模型中基于活跃事件队列在串行仿真引擎600A与并发仿真引擎600B之间的示例性同步。注意,每个仿真引擎具有其自己的活跃事件队列。即,串行仿真引擎600A具有活跃事件601而并发仿真引擎具有活跃事件611。在一个实施例中,当串行仿真引擎600A中的活跃事件队列中不再有活跃事件601时,就到了与并发仿真引擎600B同步的时间。在步骤630,用于并发仿真引擎模块的端口接口变量值从串行仿真引擎600A传递至转译和同步功能620。该转译和同步功能620包括从由串行仿真引擎600A使用的存储表示转译成由并发仿真引擎600B使用的存储表示(例如,从图5A中所示的存储表示转译成图5B中所示的存储表示)。在步骤631,在并发仿真引擎600B中基于经转译的传递来的端口接口变量值执行活跃事件611。在步骤632,并发仿真引擎模块的端口接口变量值经由转译和同步功能620传递至串行仿真引擎600A。在该方向上,转译和同步功能620包括从由并发仿真引擎600B使用的存储表示转译成由串行仿真引擎600A使用的存储表示。注意,转译和同步功能620构成胶合逻辑640的一部分。该胶合逻辑提供编译时功能和运行时功能两者。编译时功能包括确保当串行仿真引擎600A被给予用于所有模块的源代码时,为并发仿真引擎600B提供指派给它的模块的定义,同时为串行仿真引擎600A提供相同模块的桩定义。运行时功能包括确保一旦仿真器开始运行并生成事件,就提供串行与并发仿真引擎之间的接口变量转换。运行时功能还包括确保串行仿真引擎600A与并发仿真引擎600B两者中的仿真的正确同步,以使得串行仿真引擎600A中的各队列的执行遵循Verilog HDL执行模型。因此,转译和同步功能620构成胶合逻辑640的运行时功能的一部分。注意,在并发仿真引擎600B中执行活跃事件611可能会在串行仿真引擎600A中生成附加的活跃事件601,这由步骤633指示(使用转译和同步功能620来同步)。这些新事件随后按照Verilog HDL执行模型来执行,并且随后使用转译和同步功能620来重复步骤630、631、632和633。当串行仿真引擎600A中没有活跃事件601时(基于由并发仿真弓丨擎600B生成的附加活跃事件或串行仿真引擎600A中已在排队的活跃事件),则可根据Verilog HDL执行模型执行来自串行仿真引擎600A的非活跃事件队列的非活跃事件602。参照图6A中的活跃队列描述的同步可扩展到Verilog HDL执行模型中的其他队列评估。例如,图6B解说了示例性扩展,包括串行仿真引擎600A和并发仿真引擎600B的活跃事件队列(活跃事件601和611)、非活跃事件队列(非活跃事件602和612)、以及NBA更新事件队列(NBA更新事件603和613)。分别使用转译和同步功能620、621和622 (它们构成胶合逻辑640的一部分)来同步串行仿真引擎600A和并发仿真引擎600B之间的活跃、非活跃以及NBA更新队列。在串行仿真引擎600A中评估了队列之后,接口变量值被传递至并发仿真引擎600B。随后从并发仿真引擎600B中的相应队列执行这些事件。包含事件执行的结果的接口变量值随后传递回串行仿真引擎600A,串行仿真引擎600A进而根据Verilog HDL执行模型逐队列前行。注意,如图6B中指示的,在串行仿真引擎600A或并发仿真引擎600B任一者中执行的任何事件可生成更高或更低优先级的一个或更多个事件。一般而言,每当并发仿真引擎600B生成任何新事件时,转译和同步功能会得到通知,其中该新事件随后被放在串行仿真引擎600A的恰适队列中。注意,以上描述了基于Verilog HDL的示例性队列,包括活跃事件、非活跃事件、以及NBA更新事件。然而,集成逻辑仿真器可有利地应用于其他HDL以及与那些HDL相关联的执行模型。因此,一般而言,集成逻辑仿真器可与由具体HDL提供的所有事件类协作。而且,每种具体HDL可具有不同的队列转变规则,其可由集成逻辑仿真器兑现。 例如,图6C解说了 VHDL (超高速集成电路(VHSIC)HDL)模型中的示例性队列的仿真执行次序。注意,在VHDL模型中,执行次序前行通过信号更新事件、函数求值事件、以及进程评估事件,其中控制也在此方向上流动直至到达进程执行的结束,此时控制返回到信号更新。如上所述,可使用胶合逻辑640 (其包括转译和同步功能620、621和622)来促进串行仿真引擎600A与并发仿真引擎600B之间的每次执行转变。考虑以下示例,其中在集成逻辑仿真器中执行相关的活跃事件和NBA更新事件。这些事件来自3个赋值(其中Verilog赋值包括将计算出的变量值写到存储器位置)由串行仿真引擎仿真的模块中的两个赋值以及来自由并发仿真引擎仿真的模块的一个赋值。串行仿真引擎//活跃事件。alwaysi(posedge CLK)A=B+1;//NBA更新事件。
alwaysi(posedge CLK)C〈=D;并发仿真引擎//活跃事件。alwaysi (A)B=A+2;在以上示例中,当CLK在正边沿(posedge)触发时,生成两个事件。一个事件被放在串行仿真引擎活跃事件队列中,而另一个事件被放在串行仿真引擎NBA更新事件队列中。根据关于图6B描述的优先级序列,根据Verilog HDL执行模型,活跃事件首先执行,此后串行仿真活跃事件队列为空。该空状态导致集成逻辑仿真器根据参照图6A描述的4步骤过程与并发仿真引擎同步。具体而言,变量A的值从串行仿真引擎传递至并发仿真引擎。在并发仿真引擎中执行活跃事件。变量B的经更新值从并发仿真引擎传递至串行仿真引擎。由于在并发仿真中执行的活跃事件,在串行仿真引擎中在前行至下一队列评估之前可能有附加工作要做(即,新的活跃事件)。因此,该过程返回至串行仿真引擎中的活跃事件队列。此时,串行仿真引擎中不再有活跃事件要执行。而且,串行仿真引擎和并发仿真引擎中皆没有非活跃事件(后一点是在以图6A中概述的方式在非活跃事件队列上与并发仿真引擎同步之后确定的),这意味着串行仿真可执行待决NBA更新事件,其写入变量C。在一个实施例中,在队列评估点仅同步经修改的接口变量(或者替换地,仅同步接口变量中经修改的位)以减少需要完成的工作量。在其他实施例中,在队列评估点仅同步具有经修改的接口变量的仿真。队列评估点可发生在一个仿真弓丨擎中的具体队列中的所有事件均已完成时。在一个实施例中,队列评估点可触发同步,即,胶合逻辑将任何经更新的接口变量传递至相应的队列以供在另一个仿真引擎中执行。然而,在其他实施例中,一个或更多个接口变量中的改变可触发同步。因此,同步可(全部或部分地)在队列评估之前发生、在队列评估之后发生、或在队列评估之前以及队列评估之后发生。图7解说了由串行仿真引擎700A仿真的顶层模块701、以及由并发仿真引擎700B仿真的加法器模块712。在该实施例中,顶层模块701包括多个桩加法器模块702A、702B、702C和702D。值得注意的是,串行仿真引擎700A中的所有桩加法器模块实例702A-702D可以是仅由并发仿真引擎700B中的一个加法器模块实例712来定义的。有利地,这方面为集成逻辑仿真器提供了显著的杠杆作用。具体而言,串行仿真器引擎700A中的每个桩模块可具有用于每个接口变量的单独存储,而并发仿真引擎700B中的相应模块可具有能够存储多个值的一个字,由此允许该字存储与多个桩模块相关联的接口变量值。例如,在图7中,桩加法器模块702A-702D可具有分别用于每个接口变量的存储703A-703D。作为对比,并发仿真引擎700B中的加法器模块712仅需要一个字713来存储来自每个桩加法器模块702A-702D的那些接口变量。假定存储在存储703A-703D中的这些值是一位值(例如,elk值), 则字713的每一位可对应于由具体桩模块所存储的值(S卩,703A^703A^、703703B\ 7030703C,、703D^703D’)。因此,若串行仿真引擎700A中的存储
703C中的接口变量值在事件执行期间已改变,则该值将在同步期间被传递至并发仿真引擎700B中的位703C’。注意,该传递包括与参照图5A和5B描述的相同的转译。还要注意,其他实施例可具有存储在串行仿真引擎700A中的多位值,其可作为多位值被传递至并发仿真引擎700B的一个字的各位置。该存储配置允许并发仿真引擎700B在加法器模块712中用多个(即,4个)值执行多个(即,4个)并发仿真。有利地,用于逻辑仿真的许多计算机具有扩展字值,例如,32位、64位或128位的寄存器。因此,集成逻辑仿真器的并发仿真引擎可对存储在一个字中的相当大量的数据并发地应用相同操作。在以上描述的实施例中,在是由串行仿真引擎在同步点调用并发仿真引擎这一意义上,串行仿真引擎可以是集成逻辑仿真器的主仿真引擎。在其他实施例中,相反配置也是可能的,即,其中并发仿真引擎是主仿真引擎,其根据Verilog HDL执行模型逐队列前进并在恰适的同步点调用串行仿真引擎。在一个实施例中,执行模型中的同步点可通过行业标准应用编程接口来建立,诸如编程语言接口(PLI)或验证规程接口(VPI ),其用于实现对Verilog仿真的用户定义扩展。在另一实施例中,执行模型中的同步点可通过一个或更多个专用接口来建立。在一个实施例中,为确定哪些模块可被实例化为桩模块(以及使其相关联的并发仿真在并发仿真引擎中执行)对设计进行的划分可由用户手动执行。在另一实施例中,该划分可由仿真工具基于潜在可能的实例的数目自动地执行(即,实例数目越大,并发仿真引擎可达成的杠杆作用就越大)。在又一实施例中,划分可基于串行仿真引擎的能力和/或并发仿真引擎的能力来进行以达成期望水平的仿真性能。例如,若模块通过PLI (编程语言接口)作出对用户定义的C函数的大量调入,则该模块可能更适合由串行仿真引擎执行,因为用户定义的函数多半可能编写成没有利用并发仿真引擎的值表示的能力。注意,对设计进行划分可将设计层级纳入考虑。例如,在一个实施例中,第一模块正由副仿真引擎仿真意味着该设计层级内在该第一模块之下的更深处实例化的所有子模块也由该副仿真引擎来仿真。在另一实施例中,若(由副仿真引擎仿真的)第一模块实例化第二模块,则该第二模块可由主仿真引擎来仿真。如上所述,主仿真引擎可以是串行仿真引擎,而副仿真引擎可以是并发仿真引擎(以及反之)。
例如,以下代码提供了集成逻辑仿真器中固有的灵活性的示例性情形。
Il 原始 Verilog
module top niodule;ree elk;
kD'
reg [7:0] input I;reg [7:0] input2;wire [7:0] sum;wire |7:0] product;
adder—and—mult am(.clk(clk),
.a(input l),
.b(input2),
.sum(sum),
.product(product));
endmodule
module adder—and—mult(clk, a, b, sum, product);input elk;input [7:0] a;input [7:0] b;output [7:0] sum ;output [7:0] product;
always @(posedge elk) sum = a + b;multiplier mult(.clk(clk),
.a(a),
b(b),
.product(prodiict));
endmodule
module inultiplier(clk, a, b, product); input elk; input [7:0] a; input [7:0] b; output [7:0] product;
always w)(posedge elk) product = a i! b; endmodule
// Verilog +由串行仿真引擎仿真的桩模块。
//将由串行仿真引擎仿真。module 卿—module;reg elk;
reg j^7:0] in pul I;
reg [7:0] input2;
wire [7:0] sum;
wire [7:0] product;
adder_and_muit ain(.clk(clk),
.a( input I),
.b(input:2),
sum(sum),
.product(product));
endmodule
//将由并发仿真引擎仿真。module adder—and—mult(clk, a5 b,sum, product);input elk;input [7:0] a;input [7:0] b;output [7:0] sum;output [7:0] product;
multiplier mult(.clk(clk),
.a(a),
b(b),
;product(product));
endmodule
Il将由串行仿真引擎仿真。module multiplier(clk5 a, b, product);input elk;input [7:0] a;input [7:0] b;output [7:0] product;
always @(posedge elk) product = a * b;endmodule注意,图8解说了表示以上代码的框图。在该实施例中,使串行仿真引擎811负责顶层模块801,顶层模块801包括桩加法器和乘法器(adder_and_mult)模块802A。使并发仿真引擎812负责嵌入式加法器和乘法器模块802。在这种情形中,实际的加法器HDL可由并发仿真引擎802来仿真,并且并发仿真引擎812可与嵌入式乘法器模块的桩模块803A交互。在该实施例中,加法器和乘法器模块802包括桩乘法器模块803A,其与串行仿真引擎811中的乘法器模块803交互。换言之,在设计层级内在一模块之下的更深处实例化的任何子模块(任何导向成执行来自桩模块的仿真的模块)可被结构化为由串行仿真引擎811或并发仿真引擎812中的任一者来完成。注意,一般而言,串行仿真引擎811与并发仿真引擎812之间的这种仿真责任传递可执行任何次数并且可被结构化以优化系统资源。注意,尽管以上将并发仿真引擎描述为执行嵌入在顶层模块中的加法器模块的事件,但集成逻辑仿真可等同地应用于其他类型的顶层/嵌入式模块。例如,另一嵌入式模块可包括被测试设备(DUT),其可在串行仿真引擎被表示为桩模块。在这种情形中,顶层模块可包括测试台。图9示出包括集成逻辑仿真器的示例性数字ASIC设计流程的简化表示。在高层,该过程始于产品理念(步骤900)并且在EDA软件设计过程中实现(步骤910)。当设计最终定稿时,其可被下线流片(tape-out)(事件940)。在下线流片之后,发生制造过程(步骤950)和封装及组装过程(步骤960),最终得到完工的芯片(结果970)。EDA软件设计过程(步骤910)实际包括数个步骤912-930,出于简单起见这些步骤以线性方式示出。在实际ASIC设计过程中,特定设计可能不得不回退历经各步骤直到通过某些测试。类似地,在任何实际的设计过程中,这些步骤可能以不同次序和组合发生。本说明书因此借助于上下文和一般化解释来提供,而不是作为用于特定ASIC的具体或推荐的设计流程来提供的。现在将提供EDA软件设计过程(步骤910)的组成步骤的简要描述系统设计(步骤912):设计人员描述他们想要实现的功能性,他们可执行假设情景(what-if)规划以精炼功能性、核查成本等等。在此阶段可进行硬件-软件架构划分。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括Model Architect、Saber、System Studio、以及Design Ware 产品。逻辑设计和功能验证(步骤914):在该阶段,编写用于系统中的模块的VHDL或Verilog代码并且检查该设计的功能准确性。更具体地,检查该设计以确保其产生正确的输出。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括VCS、VERA、DesignWare 、Magellan、Formality、ESP以及LEDA产品。在一个实施例中,以上描述的集成逻辑仿真器可在逻辑设计和功能验证步骤914期间实现。合成及测试设计(步骤916):这里,VHDL/Verilog被转译成网表。可针对目标技术对该网表进行优化。另外,发生对测试的设计和实现以准许对完工的芯片进行检查。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括Design Compiler 、PowerCompiler、DFTMAX, TetraMAX、以及DesignWare 产品。网表验证(步骤918):在此步骤,检查网表对时序约束的顺应性以及与VHDL/Verilog源代码的对应性。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括 Frmality、PrimeTime> 以及 VCS 产品。设计规划(步骤920):这里,构造芯片的整体平面布置图并分析其时序和顶层走线。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括Astro和IC Compiler (编译器)产品。物理实现(步骤922):在此步骤发生布局(电路元件的定位)和走线(这些电路元件的连接)。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括Astro和ICCompiler 产品。分析和提取(步骤924):在此步骤,在晶体管级验证电路功能,这进而准许假设情景(what-if)精炼。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括AstroRail、PrimeRail、Primetime、以及 Star RC/XT 产品。物理验证(步骤926):在该步骤,执行各种检查功能以确保以下各项的正确性制造、电气问题、光刻问题和电路。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括Hercules产品。分辨率增强(步骤928):此步骤涉及对版图的几何学操纵以改善设计的可制造性。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括Proteus、ProteusAF以及PSMGen产品。掩模数据制备(步骤930):该步骤提供“下线流片”数据以产生供光刻使用以生产出完工的芯片的掩模。在此步骤可使用的来自Synopsys公司的示例性EDA软件产品包括CATS (R)产品系。以上描述的集成逻辑仿真器可使用在可编程系统上执行的一个或更多个计算机程序来运行,该可编程系统包括至少一个耦合成从数据存储系统接收数据和指令以及将数据和指令传送至该数据存储系统的可编程处理器、至少一个输入设备和至少一个输出设备。每一个计算机程序都可以用高级过程或面向对象编程语言、或者在需要时用汇编或机器语言来实现;并且在任何情况下,该语言都可以是经编译或经解释的语言。合适的处理器包括例如通用和专用微处理器以及其它类型的微控制器。一般而言,处理器将从只读存储器和/或随机存取存储器接收指令和数据。一般而言,计算机将包括用于存储数据文件的一个或更多个大容量存储设备;这类设备包括诸如内置硬盘和可移动盘等磁盘、磁光盘和光盘。适于有形地实施计算机程序指令和数据的存储设备包括所有形式的非易失存储器,例如包括半导体存储设备,诸如EPR0M、EEPR0M和闪存设备;磁盘,诸如内置硬盘或可移动盘;磁光盘;以及⑶ROM盘。上述各项中的任一个可由专用集成电路(ASIC)补充或被结合在ASIC中。以上连同解说本发明原理的附图一起提供了对本发明一个或更多个实施例的详细描述。虽然结合此类实施例来描述了本发明,但本发明不限于任何实施例。本发明的范围仅由权利要求来限定,且本发明涵盖众多替换、修改和等效方案。在本描述中阐述了众多具体细节以提供对本发明的透彻理解。提供这些细节是为了作为示例,且本发明可在没有这些具体细节中的一些或全部的情况下根据权利要求来实践。出于清楚起见,并未详细描述本发明相关技术领域中已知的技术素材以免不必要地湮没本发明。·
权利要求
1.一种仿真通过硬件描述语言(HDL)规定的设计的方法,所述方法包括 运行集成逻辑仿真器,所述集成逻辑仿真器包括串行仿真引擎和并发仿真引擎; 使用所述串行仿真引擎执行仿真,所述串行仿真引擎每次执行一个仿真; 使用所述并发仿真引擎执行仿真,所述并发仿真引擎执行多个并发仿真;以及 基于由所述HDL的执行模型定义的事件类来同步所述串行仿真引擎和所述并发仿真引擎的仿真。
2.如权利要求I所述的方法,其特征在于,还包括将所述设计划分成由所述集成逻辑仿真器执行的两组模块,所述两组模块包括用于在所述串行仿真引擎上评估的第一组模块和用于在所述并发仿真引擎上评估的第二组模块。
3.如权利要求2所述的方法,其特征在于,执行所述划分时将所述设计的设计层级纳入考虑。
4.如权利要求3所述的方法,其特征在于,当第一模块由所述并发仿真引擎仿真时,则所述设计层级内在所述第一模块之下的更深处实例化的任何子模块也由所述并发仿真引擎来仿真。
5.如权利要求3所述的方法,其特征在于,当由第一仿真引擎仿真的第一模块实例化第二模块时,则所述第二模块由第二仿真引擎来仿真,其中所述第二模块实例化由所述第一仿真引擎仿真的第三模块,并且其中所述第一和第二仿真引擎是以下一者(I)分别为所述串行和并发仿真引擎;以及(2)分别为所述并发和串行仿真引擎。
6.如权利要求3所述的方法,其特征在于,还包括将所述串行仿真引擎和所述并发仿真引擎之一指定为所述集成逻辑仿真器的主仿真引擎,并将另一个仿真引擎指定为所述集成逻辑仿真器的副仿真引擎,其中所述主仿真引擎在同步点调用所述副仿真引擎。
7.如权利要求6所述的方法,其特征在于,所述同步点在由所述HDL的所述执行模型定义的队列评估之前。
8.如权利要求6所述的方法,其特征在于,所述同步点在由所述HDL的执行模型定义的队列评估之后。
9.如权利要求6所述的方法,其特征在于,还包括将副仿真引擎模块中的某些变量标识为用于与所述主仿真引擎通信的接口变量。
10.如权利要求9所述的方法,其特征在于,还包括将所述接口变量的值存储在所述串行仿真引擎和所述并发仿真引擎中。
11.如权利要求9所述的方法,其特征在于,还包括于在所述副仿真引擎中评估事件之前在所述同步点将接口变量值传递至所述副仿真引擎。
12.如权利要求9所述的方法,其特征在于,还包括于在所述副仿真引擎中评估事件之后在所述同步点将接口变量值传递至所述主仿真弓I擎。
13.如权利要求12所述的方法,其特征在于,副仿真引擎模块由所述主仿真引擎中的桩模块表不。
14.一种存储用于仿真通过硬件描述语言(HDL)规定的设计的计算机可执行指令的计算机可读介质,所述计算机可执行指令在由计算机执行时执行以下步骤,包括 运行集成逻辑仿真器,所述集成逻辑仿真器包括串行仿真引擎和并发仿真引擎; 使用所述串行仿真引擎执行仿真,所述串行仿真引擎每次执行一个仿真;使用所述并发仿真引擎执行仿真,所述并发仿真引擎执行多个并发仿真;以及 基于由所述HDL的执行模型定义的事件类来同步所述串行仿真引擎和所述并发仿真引擎的仿真。
15.如权利要求14所述的计算机可读介质,其特征在于,还包括将所述设计划分成由所述集成逻辑仿真器执行的两组模块,所述两组模块包括用于在所述串行仿真引擎上评估的第一组模块和用于在所述并发仿真引擎上评估的第二组模块。
16.如权利要求15所述的计算机可读介质,其特征在于,执行所述划分时将所述设计的设计层级纳入考虑。
17.如权利要求16所述的计算机可读介质,其特征在于,当第一模块由所述并发仿真引擎仿真时,则所述设计层级内在所述第一模块之下的更深处实例化的任何子模块也由所述并发仿真引擎来仿真。
18.如权利要求16所述的计算机可读介质,其特征在于,当由第一仿真引擎仿真的第一模块实例化第二模块时,所述第二模块由第二仿真引擎来仿真,其中所述第二模块实例化由所述第一仿真引擎仿真的第三模块,并且其中所述第一和第二仿真引擎是以下一者(I)分别为所述串行和并发仿真引擎;以及(2)分别为所述并发和串行仿真引擎。
19.如权利要求15所述的计算机可读介质,其特征在于,还包括将所述串行仿真引擎和所述并发仿真引擎之一指定为所述集成逻辑仿真器的主仿真引擎,并将另一个仿真引擎指定为所述集成逻辑仿真器的副仿真引擎,其中所述主仿真引擎在同步点调用所述副仿真引擎。
20.如权利要求19所述的计算机可读介质,其特征在于,所述同步点在由所述HDL的所述执行模型定义的队列评估之前。
21.如权利要求19所述的计算机可读介质,其特征在于,所述同步点在由所述HDL的执行模型定义的队列评估之后。
22.如权利要求19所述的计算机可读介质,其特征在于,还包括将副仿真引擎模块中的某些变量标识为用于与所述主仿真引擎通信的接口变量。
23.如权利要求19所述的计算机可读介质,其特征在于,所述执行模型中的所述同步点是通过行业标准应用编程接口来建立的。
全文摘要
提供了一种仿真以HDL描述的设计的方法。在该方法中,该设计的模块可被划分成用于由串行仿真引擎仿真的诸第一模块和用于由并发仿真引擎仿真的诸第二模块。可基于与HDL的执行模型一致的事件类来区分诸第一和第二模块的仿真优先级。串行和并发仿真引擎的仿真可针对每一事件类来同步。同步可包括在串行仿真引擎与并发仿真引擎之间传递经更新的接口变量值,由诸第二模块将其与诸第一模块的至少一子集共享。该传递可包括转译经更新的接口变量值的表示。
文档编号G06F9/455GK102782651SQ201180012415
公开日2012年11月14日 申请日期2011年3月4日 优先权日2010年3月4日
发明者C·巴赛尔, G·P·萨吉斯, K·惠斯南特 申请人:辛奥普希斯股份有限公司