Methodandapparatusforexecutingahardwaresimulationandverification...的制作方法

文档序号:6592470阅读:164来源:国知局
专利名称:Method and apparatus for executing a hardware simulation and verification ...的制作方法
技术领域
本发明总体上涉及硬件设计和验证。更具体地,本发明涉及用于执行硬件仿真和 验证解决方案的方法和装置。
背景技术
设计和验证工具的发展使计算技术的迅速发展成为可能,因为没有这样的工具将 几乎不可能设计和验证在当今的计算设备中司空见惯的复杂集成电路。由于集成电路的尺 寸和复杂性迅速地增加,非常需要找到用以改进硬件仿真和验证解决方案的性能的方法和
直ο遗憾的是,用于改进软件性能的传统技术并非总是有效的。例如,从头开始改写软 件使得其可以并行执行是不切实际的,这是由改写这种复杂软件片段的高昂成本决定的。 并行化编译器也可能无法改进性能,因为即使最精密的并行化编译器也常常无法在这种复 杂的软件片段中利用并行化机会。另外,由于Amdahl定律,仅仅对软件的小部分进行并行 化无法明显改进性能,并且如果不同的片段需要大量同步,则将软件分割成不同软件片段 可能降低性能。

发明内容
本发明的一个实施方式提供用以在多处理器系统上执行硬件仿真和验证解决方 案的系统和技术。具体而言,一个实施方式将硬件仿真和验证解决方案分割成不同模块,使 这些模块可以并行执行,而无需在模块之间进行大量通信或者同步。硬件仿真和验证解决方案可以分割为用以对信号值的变更进行仿真的仿真内 核;用以将信号值的变更存储在计算机可读存储介质上的值变更转储(VCD)模块;用以检 查功能的功能覆盖模块;用以检查信号跳转的跳转覆盖模块;用以检查复杂行为的断言引 擎;以及用以生成测试场景的测试台模块。本发明的实施方式可以在不同处理器上执行不 同模块,从而改进性能。


图1示出了根据本发明实施方式的集成电路的设计和制作中的各步骤。图2示出了根据本发明实施方式的用于仿真和验证解决方案的工作流。图3示出了根据本发明实施方式的多处理器系统。图4给出了示出根据本发明实施方式的时隙中的不同事件区域的图示。图5示出了根据本发明实施方式的可以用来执行仿真和验证系统的计算机系统。图6给出了示出根据本发明实施方式的用于在多个处理器上执行包括仿真内核 和值变更转储模块的硬件仿真和验证解决方案的过程的流程图。图7给出了示出根据本发明实施方式的用于在多个处理器上执行包括仿真内核 和功能覆盖模块的硬件解决方案和验证解决方案的过程的流程图。
图8给出了示出根据本发明实施方式的用于在多个处理器上执行包括仿真内核 和跳转覆盖模块的硬件仿真和验证解决方案的过程的流程图。图9给出了示出根据本发明实施方式的用于在多个处理器上执行包括仿真内核 和断言引擎的硬件仿真和验证解决方案的过程的流程图。图10给出了示出根据本发明一个实施方式的用于在多个处理器上执行包括仿真 内核和测试台模块的硬件仿真和验证解决方案的过程的流程图。
具体实施例方式图1示出了根据本发明实施方式的在集成电路的设计和制作中的各个阶段。该过程通常开始于产品构思(步骤100),它是使用EDA软件设计工艺来实现的 (步骤110)。一旦设计完成,通常对该设计进行流片(事件140),并且对其进行制造过程 (步骤150)以及封装和组装过程(步骤160),以产生成品芯片(结果170)。EDA软件设计过程(步骤110)包括步骤112-130,下文仅出于示例目的来描述这 些步骤,并且并非意在限制本发明。例如,实际集成电路设计可能要求设计者按照不同于以 下顺序的顺序来执行设计步骤。系统设计(步骤112)在这一步骤中,设计者描述他们想要实现的功能。设计者 还可以执行假设(what-if)规划以完善功能、检查成本等。可以在这一阶段进行硬件-软 件架构划分。可以在这一步骤使用的来自Synopsys公司的示例性EDA软件产品包括 ModeiArchitect、saber 、System studio 禾口DesignWare ,产品、逻辑设计和功能验证(步骤114)在这一阶段,编写用于系统中模块的VHDL或者 Verilog代码,并且检查设计的功能准确性。具体而言,检查设计以保证它产生正确输出。 可以在这一步骤使用的来自Synopsys公司的示例性EDA软件产品包括VCS 、Vera , DesignWare 、MageiiarAFormality 、ESP 和Leda 产品。综合与测试设计(步骤116)在此将VHDL/Verilog转译成网表。可以针对目标 技术优化网表。此外,可以设计和实现测试以检查成品芯片。可以在这一步骤使用的来自 Synopsys 公司的示例性 EDA 软件产品包括 Design Compiler 、Physical Compiler 、
TestCompi Ier、Power Compiler 、FPGA Compi Ier、TefraMAX 禾口 Design Ware 产
ρ
BFI ο网表验证(步骤118)在这一步骤中,检查网表与时序约束的相符性和与VHDL/ Verilog源码的对应性。可以在这一步骤使用的来自Synopsys公司的示例性EDA软件产品
包括 Formality 、卩1*丨11^111116@和乂〔3@产品。设计规划(步骤120)这里,构造和分析芯片的总体布图规划以用于定时和高层 布线。可以在这一步骤使用的来自Synopsys公司的示例性EDA软件产品包括Astro 和IC Compiler 产品。物理实现(步骤122)在这一步骤进行布置(电路元件的定位)和布线(电路元 件的连接)。可以在这一步骤使用的来自Synopsys公司的示例性EDA软件产品包括Astro 和 IC Compiler 产品。
分析和抽象(步骤124)在这一阶段,在晶体管级验证电路功能,这继而允许假设 完善。可以在这一步骤使用的来自Synopsys公司的示例EDA软件产品包括AstroRail 、 PrimeRail、PrimeTime 和 Star-RCXT 产品。物理验证(步骤126)在这一步骤中,检查设计以保证制造、电气问题、平版印刷 问题和电路的正确性。可以在这一步骤使用的来自Synopsys公司的示例EDA软件产品包 括 Hercules 产品。解析度增强(步骤128):这一步骤包括对布局的几何操控,从而改进设计的可制 造性。可以在这一步骤使用的来自Synopsys公司的示例性EDA软件产品包括Proteus/ Progen、ProteusAF 禾口 PSMGen 产品。掩模数据准备(步骤130)这一步骤提供用于产生掩模以生产成品芯片的“流片” 数据。可以在这一步骤使用的来自Synopsys公司的示例性EDA软件产品包括CA丁S 系 列产品。可以在一个或者多个上述步骤期间使用本发明的实施方式。具体而言,可以在逻 辑设计和功能验证步骤114期间使用本发明的一个实施方式。仿真和验证解决方案HDL(硬件描述语言)的引入变革了硬件验证,并且到20世纪90年代早期,基于 HDL的仿真器已经成为硬件设计中的重要工具。自从引入之后,HDL仿真器的性能持续改 进,并且验证技术进入了开发大量“插入式(bolt-on) ”工具以改进验证能力的阶段。然而,插入式工具方法降低了仿真和验证解决方案的整体性能,因为其导致一种 成本高昂且零碎的解决方案,该解决方案是多个方法和销售商的混杂。每个插入式工具独 立地编译或者解译其自己的语言,这引起了分析或者编译阶段期间的低效率,并且还会由 于设计中对某些硬件构造的解释差异而导致工具之间的不一致。随着半导体集成密度持 续迅速增长,很明显,需要一种用于硬件仿真和验证的统一全面解决方案。针对这一需要, Synopsys引入了VCS ,它是一种全面的硬件仿真和验证解决方案。图2示出了根据本发明实施方式的用于仿真和验证解决方案的工作流。该过程通常开始于创建对被测设计(DUT)进行描述的源文件204 (步骤202)。源 文件204可以使用标准化非专用的硬件描述语言来描述DUT。接下来,使用编译器来编译源文件以获得仿真可执行文件206 (步骤204)。仿真可 执行文件206可以是在执行时对DUT的行为进行仿真的软件应用。仿真可执行文件还可以 包括用以在仿真期间执行DUT验证的指令。例如,可以这样来配置编译器,使其生成用于在 仿真期间检查DUT不同部分的功能的指令。类似地,可以这样来配置编译器,使其生成检查 用户指定的一组信号在仿真期间跳转了多少次的指令。继而可以执行仿真可执行文件,以便对DUT进行仿真、执行交互式调试、以及生成 仿真转储文件210以用于后续分析(步骤208)。仿真转储文件210通常包含关于信号值在 仿真期间如何改变的信息。本发明的一个实施方式使用压缩技术以减小仿真转储文件的大 小。接下来,可以分析仿真转储文件(步骤212)以调试DUT。图2所示工作流用于说明目的,并非旨在于限制本发明的范围。例如,解释型仿真 器通常在其工作流中不需要编译步骤。然而,与基于解释器的方式相比,基于编译器的方式 通常能够更快地进行仿真并且使用更少的存储器,这是因为基于编译器的方式避免了基于解释器方式的额外层和低效率。另外,可以使用增量式编译来充分降低编译源文件所需的 时间,其中增量式编译将复用已编译的模块,除非从上次编译起更新了相关联的源文件。虽然全面的仿真和验证解决方案代表了相对于较早的插入式方式而言的显著改 进,但是由于集成电路的尺寸和复杂性迅速地增加,仍然需要找到用以改进硬件仿真和验 证解决方案的性能的方法和装置。直至最近,微处理器销售商已经能够通过提高时钟速度来提高性能。然而,随着半 导体密度持续增加,提高时钟速度越发困难,这是由诸如散热和同步的物理限制造成的。因 此,计算机业正在探索用于提高应用性能的其它途径,例如并行处理。具体而言,微处理器 销售商已经引入在单个芯片中包括多个处理器的多核处理器。微处理器系统图3示出了根据本发明实施方式的多处理器系统。多处理器系统可以包括可使用总线或者交换器来耦合的多个处理器。处理器通常 可以是能够执行指令从而使电路对存储于计算机可读存储介质中的数据进行操作的任何 电路。例如,微处理器系统300包括使用总线320耦合的处理器302、304和310。处理器可以包括一个或者多个核,其中每个核实质上是处理器,也即,其是能够执 行指令的电路。例如,处理器302包括一个核,处理器304包括两个核(核306和308),而处 理器310包括四个核(核312、314、316和318)。下文可互换地使用术语“处理器”和“核”。除了具有一个或者多个核之外,处理器可以包括一级或者多级高速缓存。例如,处 理器302可以使用单级高速缓存,而处理器304使用两级高速缓存。具体而言,处理器304 中的每个核具有其自己的Ll(l级)高速缓存,并且这些核共享L2 (2级)高速缓存。处理 器可以包括分离的指令高速缓存和数据高速缓存,或者可以包括存储指令和数据的单个高 速缓存。可以使用多种技术来实现处理器之间的通信。在共享存储器架构中,多个处理器 可以访问相同地址空间。因此,第一处理器可以在共享存储器位置存储数据,而第二处理器 可以从该共享存储器位置读取该数据。在其它类型的架构中,处理器可以通过总线或者交 换器来发送消息或者分组从而彼此通信。例如,第一处理器可以在分组中存储数据并且将 分组发送到第二处理器,该第二处理器继而可以使用该数据以进行进一步处理。存在用于为多处理器系统设计软件的多种技术。可以通过并发编程语言来编写应 用,其中并发编程语言允许应用开发者显式指定哪些步骤要并行执行。然而,由于改写大型 软件应用所关联的高昂成本,这一选项常常不切实际。另一选项是使用并行化编译器,其可 以自动检测可并行执行的指令序列。然而,即使最精密的并行化编译器也常常无法在复杂 的软件应用中利用并行化机会。又一选项是将软件应用分割成不同组件或者模块,这些部件或者模块可以并行执 行而无需在模块之间进行大量通信。应用级分割可能颇具挑战性,因为这要求软件开发者 具有对软件应用的内部工作的深入理解。即使在软件开发者获得深入理解之后,开发者仍 然需要找到一种用来分割软件使得并行执行它们将会改进性能的方式。具体而言,如果将 软件分割为在其之间需要大量同步的组件,则可能由于通信瓶颈而实际上降低了性能。此 外,分割解决方案必须相当易于实施,也即,其应当成本有效地修改顺序化软件代码以使其 可以在多处理器系统上执行。
本发明的实施方式是基于对如下问题创新的深入思考,S卩如何以用成本有效的方 式将硬件仿真和验证解决方案(该解决方案是很复杂的软件片段)分割成不同模块,使得 这些模块可以并行执行而无需在模块之间进行大量同步或者通信。仿真内核仿真内核通常是仿真和验证解决方案的一部分,除其它任务之外,仿真内核调度 事件队列中的仿真事件、推进仿真时间、并且随着仿真时间进展来处理所调度的事件。注 意,这些任务并非意在穷尽或是将仿真内核限于所公开的任务。在一个实施方式中,仿真内 核的部分可以存储于软件库中。在编译期间,系统可以将该库与其它代码进行链接以创建 仿真内核。仿真内核可以显露可以用来安装回调函数的回调接口。当关联事件发生时或者当 仿真处于时隙中的特定事件区域中时,可以调用回调函数。在一个实施方式中,系统可以在单个处理器上执行仿真内核。在这一实施方式中, 整个DUT中的信号值取决于在处理器上执行的仿真内核。在另一实施方式中,可以在不同 处理器上对DUT的不同部分进行仿真。注意,这一实施方式可能在不同处理器之间需要大 量通信和同步,因为DUT —部分中的信号变更可能影响DUT另一部分中的信号值。图4给出了示出根据本发明一个实施方式的时隙中的不同事件区域的图示。时隙可以划分成一组有序区域,并且每个区域可以用于处理某些类型的仿真事 件。将时隙划分成区域可以保证与特定区域相关联的一组仿真事件确保在与另一区域相 关联的另一组事件之前(或者之后)被处理。然而,可以不通过HDL的语义来指定在任何 给定区域中执行事件的顺序。备选地,HDL可以包括允许用户指定区域内的事件顺序的构 造。在一个实施方式中,时隙可以包括提前(pr印oned)区域402、活跃区域404、不活 跃区域406、NBA (无阻分配)区域408、观测区域410、反应区域412和推迟(postponed)区 域414。提前区域402出现在针对当前时隙对信号值的变更进行仿真之前。因此,提前区域 402可以用来安装以下回调函数,该回调函数需要在变量改变之前并且在针对当前时隙执 行过程之前访问仿真数据。提前区域402还可以用来对稳态数据进行采样。活跃区域404、 不活跃区域406、NBA区域408、观测区域410和反应区域412称为迭代区域。推迟区域414 出现在已经针对当前时隙对信号值的所有变更进行仿真之后。因此,推迟区域414可以用 来安装需要以下回调函数,该回调函数在所有变量已经变更状态之后并且在已经针对当前 时隙而执行了所有过程之后访问仿真数据。DUT的描述通常包括对DUT的部分(例如,组件或者电路)的功能进行描述的模 块。活跃区域404用来通过执行DUT描述中的模块来确定信号值。不活跃区域406用来执 行由于竞态条件(racecondition)而无法在活跃区域中执行的任何HDL代码。如果按照某 些编码原则来编写HDL代码,则有可能可以消除对不活跃区域406的需要。NBA区域408可以用来高效地处置仿真竞态条件。具体而言,对NBA区域408中 事件的处理是在已经传播了所有设计时钟信号并且时钟触发的过程已经执行之后、但是在 仿真时间推进之前。观测区域410是可以为不变断言赋值的区域,并且这一区域在NBA区 域408之后,因为NBA区域408中的无阻断言可能变更变量值。观测区域410还是可以为 钟控断言赋值的最后区域。
9
测试台代码用来生成用于DUT的刺激,以及检查结果以验证设计是否符合规范。 反应区域412可以用来执行包括通过/失败的断言语句在内的测试台代码。倌变更转储仿真和验证解决方案常常将信号值变更转储在文件中,以供后续分析。例如,在图 2中所示工作流中,系统生成仿真转储文件210以进行后续分析。由于信号值变更的数目可 能很大,所以一些仿真和验证解决方案利用压缩技术来减少转储文件的大小。遗憾的是,压 缩值变更数据可能需要大量计算,这可能降低仿真性能。注意,可以独立于仿真本身来执行压缩,因为压缩值变更数据并不改变DUT中的 信号状态。本发明的一个实施方式利用这一认识来并行地执行仿真内核以及对值变更数据 的压缩。具体而言,回调函数可以安装于仿真内核中,以收集信号值变更以及将值变更数据 存储在共享存储器中。接下来,可以在另一处理器上执行值变更转储模块,以压缩值变更数 据并且存储已压缩数据以供后续分析。功能覆盖功能覆盖可以用来测量验证工作的进度。在一种方式中,系统可以使用功能覆盖 模型来限定如何测量验证工作的进度。功能覆盖模型通常包括功能覆盖对象,其表示满足 验证计划的条件。在一种带约束的随机测试方法中,可以利用功能覆盖提供刺激。可以测量随机刺 激以确定是否所有重要输入条件都出现在了测试组中以及设计中。可以针对功能覆盖模型 中指定的所有验证结果来收集功能覆盖,并且可以基于测试数据来确定功能覆盖度量。功 能覆盖度量可以帮助工程师确定需要什么样的附加测试(如果需要),这些附加测试是随 机的或者可能是定向的。功能覆盖对象可以用来确定功能覆盖度量,其可以指示验证工作 的进度。在一个实施方式中,可以通过允许用户指定行为的语言来描述功能覆盖模型,并 且功能覆盖模块可以记录行为出现的次数。具体而言,覆盖模型可以包括一组覆盖群组,其 中每个覆盖群组可以包括采样事件和覆盖表达式。采样事件通常可以是任何仿真事件,例 如信号或者变量变更。覆盖表达式可以指定所采样变量的感兴趣值、非法值和忽略的值。感 兴趣值可以用来指定希望的行为,非法值可以用来指定标识DUT中的错误,而忽略的值可 以用来定义在确定功能覆盖度量时没有收集的和/或被忽略的状态。功能覆盖模型还可以 指定覆盖群组的所采样变量的交叉,这可以使功能覆盖模块能够在多个覆盖项之间进行相 关。注意,可以或多或少独立于硬件仿真来执行功能覆盖计算,因为确定功能覆盖并 未改变DUT中的信号状态。本发明的一个实施方式利用这一认识来并行地执行仿真内核和 功能覆盖模块。具体而言,可以在仿真内核中安装回调函数,以收集信号值变更,并且将值 变更数据存储在共享存储器中。接下来,可以在另一处理器上执行功能覆盖模块,以确定功 能覆盖度量并且向用户报告该度量。跳转覆盖覆盖度量可以基于其所提供的信息类型被划分成两类。控制流覆盖度量指示已经 进行的控制流程覆盖的程度,也即,在仿真期间采用的线路、路径和分支的程度。值覆盖度 量指示已经进行的值覆盖的程度,也即,在仿真期间的信号值与预期信号值相匹配的程度。
跳转覆盖度量是跟踪DUT内的信号线路是否跳转的值覆盖度量。跳转覆盖通常用 来保证DUT中的信号线路是“激活的”,即信号线路在仿真期间改变其值。跳转覆盖模型可以指定将监测哪些信号线以及将如何基于测试数据来计算一个 或者多个跳转覆盖度量。例如,跳转覆盖模型可以包括总线中的所有信号线,并且相关联的 跳转覆盖度量可以报告总线中在仿真期间跳转至少一次的信号线的百分比。备选地,跳转 覆盖度量可以包括信号线在仿真期间跳转的平均次数。给出这些跳转覆盖模型和度量示例 是出于说明目的,而非意在穷举或者将本发明限于所公开的形式。注意,可以或多或少独立于硬件仿真来执行跳转覆盖计算,因为确定跳转覆盖并 不改变DUT中的信号状态。本发明的一个实施方式利用这一认识来并行地执行仿真内核和 跳转覆盖模块。具体而言,可以在仿真内核中安装回调函数,以收集信号值变更并且将值变 更数据存储在共享存储器中。接下来,可以在另一处理器上执行跳转覆盖模块,以确定跳转 覆盖度量并且向用户报告该度量。腫断言是关于诸如信号、寄存器、事务等设计要素的语句,这些设计要素被假设为在 DUT恰当工作的情况下被赋值为“真”。检查断言可能需要在逐个循环的基础上对这些设计 要素进行访问。因此,为了加速仿真吞吐,优选地可以最小化在仿真期间访问设计要素的开 销。具体而言,尝试通过应用接口(例如,通过安装回调函数)来访问设计要素可能会明显 降低性能,因此优选地在仿真内核中支持断言。在传统方法中,断言通常是在图4所示的观测区域410中被赋值。然而,注意断言 通常使用在先前时隙中确定的信号值。因此,可以在时隙开始时对断言进行赋值。本发明 的一个实施方式利用这一认识以在独立线程中对断言进行赋值。具体而言,可以在第一核 上执行的第一线程上执行仿真内核,而在第二核上执行的第二线程中执行断言引擎。仿真 内核可以通知断言引擎新时隙已经开始。响应于接收到该通知,断言引擎可以使用在先前 时隙中确定的信号值来为断言赋值。由于断言引擎使用在先前时隙中确定的信号值,所以断言可以与仿真内核并行执 行。另外注意,在断言引擎线程与仿真内核线程之间可能只需要很少量的同步,因为在时隙 开始时和/或结束时可能足以对线程进行同步。测试台测试台模块通常用来生成用于DUT的刺激,并且检查结果以验证设计是否符合规 范。测试台可以包括多个模块,这些模块可以在不同的抽象水平上编写,并且有时可能需要 紧密同步。通常,使用支持用户指定如何生成测试场景的语言来编写测试台模型。如果仿 真内核和测试台需要紧密同步,则并行执行它们可能是无益的。然而,通过以下特定的编码 限制,有可能最小化所需的同步数量。本发明的一个实施方式利用这一认识来创建可以与 仿真内核并行执行的测试台模型。具体而言,针对测试台模型的编码限制可以包括以下限制(1)应当利用非零扭 斜(skew)对设计信号进行采样;(2)测试台代码与仿真内核代码之间不应当存在层级式引 用;(3)不应使用异步采样和事件控制;以及(4)不应在测试台代码与仿真内核代码之间共 享变量。如果遵守这些编码限制,则很有可能并行执行仿真内核与测试台模块,而无需二者 之间 大量同步。
在一个实施方式中,仿真内核和测试台模块具有其各自的事件驱动的调度器,该 调度器或多或少相互独立地执行。在时隙中的反应区域末端,可以将测试台输出事件传播 至仿真内核。由于测试台中在NBA区域中调度的事件仅对应于对设计信号的指派,所以这 些事件可以在处理了反应区域中的所有其它事件之后由仿真内核加以处置。注意,这一方 案向后兼容,因为它维持从测试台模块到仿真内核的事件传播的通常语义。另外注意,每一 时隙对仿真内核与测试台模块进行一次同步可能就足够了。图5示出了根据本发明实施方式的可以用来执行仿真和验证系统的计算机系统。计算机系统502包括处理器504、存储器506和存储设备508。计算机系统502可 以耦合到显示器514、键盘510和指示设备512。存储设备508可以存储源文件516、编译器 518和可执行文件520。处理器504可以包括一个或者多个核,和/或计算机系统502可以 包括多处理器系统。在操作期间,计算机系统502可以将编译器518加载到存储器506中。接下来,用 户可以使用编译器518来编译源文件516,从而生成可执行文件520。可执行文件520可以 包括一个或者多个文件,并且可以被存储在计算机可读存储介质(例如,存储设备508)上。 计算机系统502可以将可执行文件520加载到存储器506中,并且使用处理器502来执行 可执行文件520中存储的指令。在一个实施方式中,可执行文件520可以包括用于仿真内 核、值变更转储模块、功能覆盖模块、跳转覆盖模块、断言引擎和测试台模块的指令。在传统技术中,硬件和验证解决方案通常在单个处理器上作为单个进程来执行。 因而,用于提高硬件仿真和验证解决方案性能的传统技术着重于代码优化。与之不同,本发 明的实施方式通过以下方式来改进性能将硬件仿真和验证解决方案分割成不同组件,并 且在多处理器系统上将不同组件作为分离的进程或者线程加以执行。图6给出了示出根据本发明实施方式的用于在多个处理器上执行如下硬件仿真 和验证解决方案的过程的流程图,该解决方案包括用以对信号值变更进行仿真的仿真内核 和用以将信号值变更存储在计算机可读存储介质上的VCD模块。在操作期间,系统可以接收使用标准化非专用HDL描述DUT的源文件。接下来,系 统可以编译源文件以获得仿真内核。备选地,系统可以接收经过预编译的仿真内核。在一个实施方式中,仿真内核可以显露回调接口,该接口用来安装在特定事件发 生时调用的回调函数。在编译期间,可以安装在每个时隙中调用的回调函数。回调函数可 以包括用于收集值变更数据的指令以及用于存储值变更数据从而使得另一处理器可以访 问该值变更数据的指令。具体而言,回调函数可以使用库功能来收集值变更数据。接下来,回调函数可以将 值变更数据存储在执行值变更转储模块的另一处理器可访问的共享存储器段中。所述另一 处理器上的值变更转储模块继而可以读取值变更数据并且进行相应处理,例如,值变更转 储模块可以压缩值变更数据,并且将经过压缩的值变更数据存储在计算机可读存储介质中 以供后续分析。在编译之后,系统可以在第一处理器上执行仿真内核,从而使第一处理器生成表 示一组信号值的变更的值变更数据,以及存储值变更数据,使得不同于第一处理器的第二 处理器能够访问该值变更数据(步骤602)。
系统可以在第二处理器上执行V⑶模块,从而使第二处理器压缩值变更数据;以 及将经过压缩的值变更数据存储在计算机可读存储介质中以供后续分析(步骤604)。仿真 内核和VCD模块可以作为分离的进程或者作为分离的线程来执行。图7给出了示出根据本发明实施方式的用于在多个处理器上执行如下硬件仿真 和验证解决方案的过程的流程图,该解决方案包括用以对信号值变更进行仿真的仿真内核 和用以检查DUT的覆盖的功能覆盖模块。在操作期间,系统可以在第一处理器上执行仿真内核,从而使第一处理器生成值 变更数据,其表示在DUT的功能覆盖模型中使用的一组信号值的变更;以及存储该值变更 数据,使得不同于第一处理器的第二处理器能够访问该值变更数据(步骤702)。系统可以在第二处理器上执行功能覆盖模块,从而使第二处理器使用功能覆盖 模型和值变更数据来确定功能覆盖度量;以及向用户报告该功能覆盖度量(步骤704)。仿 真内核和功能覆盖模块可以作为分离的进程或者作为分离的线程来执行。图8给出了示出根据本发明实施方式的用于在多个处理器上执行如下硬件仿真 和验证解决方案的过程的流程图,该解决方案包括用以对信号值的变更进行仿真的仿真内 核和用以检查DUT的信号跳转的跳转覆盖模块。在操作期间,系统可以在第一处理器上执行仿真内核,从而使第一处理器生成值 变更数据,其表示在DUT的跳转覆盖模型中使用的一组信号值的变更;以及存储该值变更 数据,使得不同于第一处理器的第二处理器能够访问该值变更数据(步骤802)。系统可以在第二处理器上执行跳转覆盖模块,从而使第二处理器使用跳转覆盖 模型和值变更数据来确定跳转覆盖度量;以及向用户报告该跳转覆盖度量(步骤804)。仿 真内核和跳转覆盖模块可以作为分离的进程或者作为分离的线程来执行。图9给出了示出根据本发明一个实施方式的用于在多个处理器上执行如下硬件 仿真和验证解决方案的过程的流程图,该解决方案包括用以对信号值的变更进行仿真的仿 真内核和用以检查被测设计DUT的复杂行为的断言引擎。在操作期间,系统可以在第一处理器上执行仿真内核,从而使第一处理器在仿真 时隙开始时便立刻通知第二处理器(与第一处理器不同)上的断言引擎;在仿真时隙期间 对DUT的信号值的变更进行仿真;以及检查断言引擎是否在第二处理器上完成执行(步骤 902)。系统可以在第二处理器上执行断言引擎,从而使第二处理器响应于从仿真内核 接收到仿真时隙已经开始的通知,使用在先前时隙期间确定的信号值来为断言赋值;报告 为断言赋值的结果;以及一旦为断言进行了赋值便通知仿真内核(步骤904)。仿真内核和 断言引擎可以作为分离的进程或者作为分离的线程来执行。在一个实施方式中,系统不使用内核的回调接口来安装向断言引擎通知仿真时隙 开始的回调函数。编译器可以代之以生成用以向第二处理器上的断言引擎通知仿真时隙已 经开始的指令。具体而言,这些指令可以是仿真内核的代码的部分,并且这些指令可以在每 个仿真时隙开始时由第一处理器执行,从而使第一处理器向第二处理器上的断言引擎通知 仿真时隙已经开始。图10给出了示出根据本发明实施方式的用于在多个处理器上执行以下硬件仿真 和验证解决方案的过程的流程图,该解决方案包括用以对信号值的变更进行仿真的仿真内
13核和用以生成DUT测试场景的测试台模块。在操作期间,系统可以在第一处理器上执行仿真内核,从而使第一处理器通知第 二处理器(与第一处理器不同)上的测试台模块生成用于测试DUT的测试信号;从第二处 理器上的测试台模块接收测试信号;以及在仿真时隙期间使用该测试信号对DUT的信号值 的变更进行仿真(步骤1002)。系统可以在第二处理器上执行测试台模块,从而使第二处理器生成用于测试DUT 的测试信号并且将测试信号发送到第一处理器上的仿真内核(步骤1004)。仿真内核和测 试台模块可以作为分离的进程或者作为分离的线程来执行。在一个实施方式中,编译器可以生成用以通知第二处理器上的测试台模块生成用 于测试DUT的测试信号的指令。这些指令可以是仿真内核的代码的部分,并且这些指令可 以在仿真时隙开始之前由第一处理器执行,从而使第一处理器通知测试台模块生成用于在 仿真时隙期间测试DUT的测试信号。结论在本详细描述中所描述的数据结构和代码通常存储于计算机可读存储介质上,该 介质可以是能够存储用于由计算机系统使用的代码和/或数据的任何设备或者介质。这 包括但不限于易失性存储器、非易失性存储器、磁和光学存储设备(例如盘驱动、磁带、 ⑶(光盘)、DVD(数字万用盘或者数字视频盘))或者现在已知或者以后开发的能够存储计 算机可读介质的其它介质。另外,给出对本发明实施方式的上文描述仅仅是出于说明和描述目的。其并非意 在穷举或者将本发明限于所公开的形式。因而,多种修改和变形对于本领域技术人员而言 将是显然的。此外,上述公开内容并非旨在限制本发明。本发明的范围由所附权利要求限定。
权利要求
一种用于在多个处理器上执行硬件仿真和验证解决方案的方法,所述解决方案包括用以对信号值的变更进行仿真的仿真内核以及用以在将所述信号值的变更存储在计算机可读存储介质上的值变更转储(VCD)模块,所述方法包括在第一处理器上执行所述仿真内核,从而使所述第一处理器生成表示一组信号值的变更的值变更数据;以及存储所述值变更数据,使得不同于所述第一处理器的第二处理器能够访问所述值变更数据;以及在所述第二处理器上执行所述VCD模块,从而使所述第二处理器压缩所述值变更数据;以及将经过压缩的所述值变更数据存储在所述计算机可读存储介质中以供后续分析。
2.根据权利要求1所述的方法,其中在执行所述仿真内核之前,所述方法包括 接收描述被测设计(DUT)的源文件;以及编译所述源文件以获得所述仿真内核。
3.根据权利要求2所述的方法,其中所述仿真内核显露回调接口,所述回调接口用来安装在特定事件出现时被调用的 回调函数;其中编译所述源文件包括安装第一回调函数,其中无论何时当所述仿真内核生成所述 值变更数据,则调用所述第一回调函数;以及 其中所述第一回调函数包括 用于收集所述值变更数据的指令;以及用于存储所述值变更数据使得所述第二处理器可以访问所述值变更数据的指令。
4.根据权利要求2所述的方法,其中所述源文件使用标准化非专用硬件描述语言 (HDL)来描述所述DUT,并且其中所述仿真内核和所述VCD模块在分离的过程中执行。
5.一种用于在多个处理器上执行硬件仿真和验证解决方案的方法,所述解决方案包括 用以对信号值的变更进行仿真的仿真内核以及用以检查被测设计(DUT)的覆盖的功能覆 盖模块,所述方法包括在第一处理器上执行所述仿真内核,从而使所述第一处理器生成值变更数据,其表示在所述DUT的功能覆盖模型中使用的一组信号值的变更;以及存储所述值变更数据,使得不同于所述第一处理器的第二处理器能够访问所述值变更 数据;以及在所述第二处理器上执行所述功能覆盖模块,从而使所述第二处理器 使用所述功能覆盖模型和所述值变更数据来确定功能覆盖度量;以及 向用户报告所述功能覆盖度量。
6.根据权利要求5所述的方法,其中在执行所述仿真内核之前,所述方法包括 接收描述所述DUT的源文件;以及编译所述源文件以获得所述仿真内核。
7.根据权利要求6所述的方法,其中所述仿真内核显露回调接口,所述回调接口用来安装在特定事件出现时被调用的回调函数;其中编译所述源文件包括安装第一回调函数,其中无论何时当所述仿真内核生成所述 值变更数据,则调用所述第一回调函数;以及 其中所述第一回调函数包括 用于收集所述值变更数据的指令;以及用于存储所述值变更数据使得所述第二处理器可以访问所述值变更数据的指令。
8.根据权利要求6所述的方法,其中所述源文件使用标准化非专用硬件描述语言 (HDL)来描述所述DUT,并且其中所述仿真内核和所述功能覆盖模块在分离的过程中执行。
9.一种用于在多个处理器上执行硬件仿真和验证解决方案的方法,所述解决方案包括 用以对信号值的变更进行仿真的仿真内核以及用以检查被测设计(DUT)的信号跳转的跳 转覆盖模块,所述方法包括在第一处理器上执行所述仿真内核,从而使所述第一处理器生成值变更数据,其表示在所述DUT的跳转覆盖模型中使用的一组信号值的变更;以及存储所述值变更数据,使得不同于所述第一处理器的第二处理器能够访问所述值变更 数据;以及在所述第二处理器上执行所述跳转覆盖模块,从而使所述第二处理器 使用所述跳转覆盖模型和所述值变更数据来确定跳转覆盖度量;以及 向用户报告所述跳转覆盖度量。
10.根据权利要求9所述的方法,其中在执行所述仿真内核之前,所述方法包括 接收描述所述DUT的源文件;以及编译所述源文件以获得所述仿真内核。
11.根据权利要求10所述的方法,其中所述仿真内核显露回调接口,所述回调接口用来安装在特定事件出现时被调用的 回调函数;其中编译所述源文件包括安装第一回调函数,其中无论何时当所述仿真内核生成所述 值变更数据,则调用所述第一回调函数;以及 其中所述第一回调函数包括 用于收集所述值变更数据的指令;以及用于存储所述值变更数据使得所述第二处理器可以访问所述值变更数据的指令。
12.根据权利要求10所述的方法,其中所述源文件使用标准化非专用硬件描述语言 (HDL)来描述所述DUT,并且其中所述仿真内核和所述跳转覆盖模块在分离的过程中执行。
13.一种用于在多个处理器上执行硬件仿真和验证解决方案的方法,所述解决方案包 括用以对信号值的变更进行仿真的仿真内核以及用以检查被测设计(DUT)的复杂行为的 断言引擎,所述方法包括在第一处理器上执行所述仿真内核,从而使所述第一处理器在仿真时隙开始时便立即通知第二处理器上的所述断言引擎,其中所述第二处理器不 同于所述第一处理器;在所述仿真时隙期间对所述DUT的信号值的变更进行仿真;以及等待所述断言引擎在所述第二处理器上为所述断言赋值;以及 在所述第二处理器上执行所述断言引擎,从而使所述第二处理器 响应于从所述仿真内核接收到所述仿真时隙已经开始的通知,使用在先前时隙期间确 定的信号值来为断言赋值;报告为所述断言赋值的结果;以及 一旦已经为所述断言赋值,便通知所述仿真内核。
14.根据权利要求13所述的方法,其中在执行所述仿真内核之前,所述方法包括 接收描述所述DUT的源文件;以及编译所述源文件以获得所述仿真内核。
15.根据权利要求14所述的方法,其中编译所述源文件包括生成用以向所述第二处理 器上的所述断言引擎通知所述仿真时隙已经开始的指令。
16.根据权利要求14所述的方法,其中所述源文件使用标准化非专用硬件描述语言 (HDL)来描述所述DUT,并且其中所述仿真内核和所述断言引擎在分离的线程中执行。
17.一种用于在多个处理器上执行硬件仿真和验证解决方案的方法,所述解决方案包 括用以对信号值的变更进行仿真的仿真内核以及用以生成被测设计(DUT)的测试场景的 测试台模块,所述方法包括在第一处理器上执行所述仿真内核,从而使所述第一处理器 通知第二处理器上的所述测试台模块生成用于测试所述DUT的测试信号,其中所述第 二处理器不同于所述第一处理器;从所述第二处理器上的所述测试台模块接收所述测试信号;以及 在仿真时隙期间使用所述测试信号对所述DUT的信号值的 变更进行仿真;以及在所述第二处理器上执行所述测试台模块,从而使所述第二处理器 响应于从所述仿真内核接收用以生成测试信号的通知,生 成用于测试所述DUT的所述测试信号;以及 将所述测试信号发送到所述第一处理器上的所述仿真内核。
18.根据权利要求17所述的方法,其中在执行所述仿真内核之前,所述方法包括 接收描述所述DUT的源文件;以及编译所述源文件以获得所述仿真内核。
19.根据权利要求18所述的方法,其中编译所述源文件包括生成用以通知所述第二处 理器上的所述测试台模块生成所述测试信号的指令。
20.根据权利要求18所述的方法,其中所述源文件使用标准化非专用硬件描述语言 (HDL)来描述所述DUT,并且其中所述仿真内核和所述测试台模块在分离的线程中执行。
全文摘要
文档编号G06F17/50GK101952827SQ20098000024
公开日2011年1月19日 申请日期2009年3月23日 优先权日2008年4月30日
发明者Jain Manish, Subha S Chowdhury, Seshadri Sridhar 申请人:Synopsys Inc
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1