首页> 中国专利> 使用一个或多个自动机的系统验证

使用一个或多个自动机的系统验证

摘要

使用一个或多个自动机的系统验证。这里公开了一种方法和装置,该方法和装置用于操纵非确定自动器和非确定自动器的遍历,用于待测试设备的动态验证。

著录项

  • 公开/公告号CN101694643A

    专利类型发明专利

  • 公开/公告日2010-04-14

    原文格式PDF

  • 申请/专利权人 明导公司;

    申请/专利号CN200910168346.1

  • 申请日2004-09-30

  • 分类号G06F13/16;G06F13/18;

  • 代理机构中原信达知识产权代理有限责任公司;

  • 代理人张焕生

  • 地址 美国俄勒冈州

  • 入库时间 2023-12-17 23:40:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2012-10-10

    授权

    授权

  • 2010-05-26

    实质审查的生效 IPC(主分类):G06F13/16 申请日:20040930

    实质审查的生效

  • 2010-04-14

    公开

    公开

说明书

本申请是2006年5月11日提交的申请号为200480033189.9的专利申请的分案申请。

技术领域

本发明涉及系统验证的领域。特别,本发明涉及在待测试系统和设备的动态验证中使用基于自动机的方法。

背景技术

若干定义

“相符性评估(compliance assessment)”(见下文定义)。

“相符性评估协议(compliance assessment protocol)”(见下文定义)。

“相符性验证(compliance verification):系统说明书中所表达的规格与DUT性能之间符合程度的确定。

“确定说明的系统(deterministically specified system)”(定义见下文)。

“命令(directive)”:请求或指挥的传达,以及为了使期望的结果出现而进行的任何其他传达。本领域的技术人员熟悉各种实现命令的方法,如函数调用。

“DUT,或待测试设备”:待测试系统的实现。

“DUT计算”:动态系统验证期间的DUT行为计算(如DUT模型的仿真)。

“动态验证行程(dynamic verification run)”:测试的一次会话,即,对DUT施加相符性评估协议一次会话。

“动态验证套(dynamic verification suite)”:用在相符性验证中的动态验证行程的集合。

“接口(interface)”:系统说明书所规定的可访问行为。这可以包括仅在验证期间可用的特殊行为。系统所表现行为的整体就是它的接口,但是,为了便于说明,有时候是说系统接口的不同子集或不同子部件,好像它们是分开的。

“NDA”,或“非确定自动器(non-deterministic automaton)”(下文中定义)。

“非确定说明的系统(non-deterministically specified system)”(下文中定义)。

“序列(sequence)”:一系列验证操作及其相关联的定时信息。定时信息可按照合适的量子化周期间隔,或等价地,按照依据所考虑验证操作的任意间隔。

“系统(system)”:期望完成特定一组功能的设备或设备组。系统可以被实现成软件、硬件或软件与硬件的某种结合。就其本质而言,系统可以是按某些建模环境中的模型的形式存在,或是按某些部分的实体与另外部分的模型相结合的形式存在。系统具有定义的接口,系统通过该接口与外部世界交互,并且外部世界通过该接口与系统交互。

“测试计算(test computation)”:在动态系统验证期间所执行的不同于DUT计算的计算。

“遍历(traverse)”(在下文中定义)。

“用户(user)”:系统的相符性验证中涉及的个人或多个个人。

“验证环境(verification environment)”:在执行动态验证行程时所处的环境(如温度、湿度、清洁房间、噪声、NC-Verilog硬件描述语言仿真器、ModelSimTM硬件描述语言仿真器)。连同系统的接口,这建立了可以施加到该验证环境中的DUT以及非DUT组件的验证操作的集合。

“验证操作(verification operation)”:在一个时刻的验证动作。包括读操作和写操作的可能验证操作的集合依赖于系统的接口和验证环境。

“验证协议(verification protocol)”(下文中定义)。

概述

系统的建立通常从系统说明书(其整体或部分可以是写出来的,也可以是未写出来的)的建立开始,系统说明书用于定义系统功能的规格。这些规格说明不仅涉及所期望的系统功能,而且涉及其他的属性,如电能消耗、运行速度等。

由于许多原因,验证复杂系统操作与系统说明书中的给出的规格说明相符是困难的。特别是由于以下原因:

1.在任何时候对系统提供的输入的大小都可能是很大的。即使系统具有较少的输入端口数量,输入值的可能组合数量依然可以是很大的。例如,只有30条二进制输入线依然代表超过10亿的可能输入组合,而具有几倍于此的输入的系统也是常见的。

2.系统可以保持内部状态。这样,在特定时刻,系统的功能不仅依赖提供给系统的输入,而且依赖一直到该时刻对系统提供的所有输入。

3.上述两点的组合会导致在给定系统中可能出现的不同情况的难以想象的巨大数量。例如,上述30位输入中仅取12个的序列就表示212×30种可能的不同情况,即大约10108种可能的不同情况。即使宇宙中每个粒子都是能在每个毫微秒执行验证测试的验证系统,从宇宙起源就开始也没有足够的时间测试完这个简单例子中的所有可能的不同情况。

4.即使有限的输入序列也产生大量的不同情况,因此在有限的时间内使用今天的有限可用资源是不可能进行穷尽测试的。仅仅是这些不同情况的一小部分可实际用于验证的目的。因此,相符性验证处理的质量严重依赖于作为整个可能测试空间中样本的测试究竟有多“好”。(“好”的测试被定义成这样的测试,它能够检测出DUT和其说明书之间的可能差异。“好”的测试集是这样的测试集,它包含的测试并不根据他们所检测的差异而显著重叠,即他们表现出很小的冗余,或没有冗余)。

当搜索“好”测试或测试类,很自然地要想办法通过把整个系统接口划分成可管理的部分并构造独立用于这些部分的测试来控制任务的复杂性。这种“分而治之”的方法在其他许多领域有效,但却不适合复杂系统的相符性验证。特别是要面临以下困难。

1.复杂系统通常包括若干子部件,这些子部件可能在内部进行交互,或者是直接交互(例如,通过在完成某些任务时的活动协作)或者是间接交互(如,通过相继使用同样的共享资源)。这些子部件可以通过系统接口来展示行为,并且这些行为可同时处于活动的使用中。

2.这些子部件中某一个的活动与另一个子部件的活动的交互又增加了复杂性的另一个层面。特别,子部件的行为不仅依赖其输入流的整个历史,还依赖于其活动与系统的另外子部件活动的相对定时,这些另外子部件本身也依赖它们自己的整个输入流的历史。

3.这样,通常不可能把一部分系统接口与其他部分分开来做验证,即使当从用户的观点来看,这些部件相互之间没有任何关系。作为一个特别的例子,在不同的时候对系统的一个部件提供相同的输入可根据这时候在系统其他地方刚发生的其他事情而导致不同的响应。

4.不仅要在有关部件上施加适当的激励,而且还要利用施加到该接口的其他部件上的完整激励历史来调整该激励,在这种情况下,才会弄清楚缺陷。为了处理这类情形,要建立更复杂和精细的测试。

对用户而言,系统的行为看起来或者是确定的或者是非确定的。如果对所述用户提供的说明书具有足够的信息使得对系统说明书中包含的任何激励序列可做精确的系统响应模式的计算,则对系统的用户看来,行为就是确定的。我们把这种使系统看起来是确定的说明书称作“确定说明书”。如果对所述用户提供的说明书不具有足够的信息能使得对系统说明书中包含的激励序列做精确的系统响应模式的计算,则对系统的该用户看来,行为就是非确定的。我们把这种使系统看起来是非确定的说明书称作“非确定说明书”。

起初看来,好像更期望确定说明书,但由于以下原因,系统可能具有非确定说明书。

●系统实现的方式本身就是非确定的(如依赖量子衰减事件)。

●系统可能具有确定性,但实现很复杂,用户很难理解和操作。非确定说明书可以更简明,更容易理解和使用。

●系统可能具有确定,但实现是专有的,系统提供商不愿意公开系统的实现。

●系统是说明书的确定实现,但说明书有意写成非确定说明书,以使得可有更宽的实现范围。由于这种原因,工业标准说明书常常写成非确定说明书。

我们把具有非确定说明书的系统称作“非确定说明的系统”,或“NDS系统”。我们把具有确定说明书的系统称作“确定说明的系统”,或“DS系统”。

很大一部分现代系统是NDS系统;例如,微处理器、多线程软件系统(如Windows、Linux)、汽车控制系统、航空控制系统等。NDS系统可以暴露作为DS系统的子系统,例如特殊的应用。

从可能测试的空间中由人工选择“好”测试或“好”测试类是很困难的,原因有很多。特别是由于以下原因。

1.如上所述,可能测试的空间是巨大的,从来只能选择一小部分测试。如统计学家所熟知的,在这种情况下选择合适的样本是很困难的。当用在相符性验证时,也很难定义“统计合适”的意思。这样,就不能使用那些为其他领域建立起来的现有数学的分析方法。

2.由于所述的可能测试空间在许多方面可以变化,人类很难对可能测试的整体内容形成概念。但没有这样的概念化,就很难建立有效和持续的测试策略。

3.因此,已经使用特别的和直觉的方法。这些方法在获得有限程度的相符性评估方面可以说是取得一定成功,但通常这些方法不能提供在整个可能性空间上的合适覆盖。在这种策略下产生的测试根据预先的想法倾向于集中在“似乎需要”测试的区域。而其他的区域可能完全没有被覆盖。

4.这种概念化的困难还延伸到需要扩展设置(setup)的情况。为了建立用于特定缺陷的条件,使得能在可观察的方式下显现条件本身,即使这种条件以频繁的间隔出现在系统正常功能的范围内,所需要的复杂性质和序列的长度也超出了用户的观察能力。

5.概念化困难还延伸到要求交互的复杂性的情况。通过重用内部资源并且并行执行功能,系统可能获得性能提高。这样的技术导致复杂的内部交互,即使知道该实现的所有细节,对用户来说也不是明白易懂的。这种内部交互的复杂性还可能超出用户观察的能力,尤其是当与前述的扩展设置困难相结合的时候。

一旦检测出问题,就有必要追溯原始的根原因(root cause)。在测试的执行期间,根原因的发生可能比首先发现了异常的那一点早许多,并且是在离存在该缺陷的地方很远的系统部分观察到该缺陷的。做这种分析的一种方法是重新运行暴露该缺陷的相同序列,但有额外的检查,使得可观察DUT以前被忽视的方面。这种方法的困难是可能需要大量的重新运行。另一个困难是,为了使DUT进入可能发生根原因的状态所要求的设置在执行起来可能是非常耗时的。这两种因素可能相互结合。

在另一种方法中,对于所观察缺陷的原因,完全让用户设计假设,然后构造仅在该环境下执行的“小”测试程序。这种测试程序的构造也是相当复杂的,除了其他原因之外,这是由于不是总能够容易的指定为了使DUT进入根原因检测所要求状态而需要的设置最小量。使测试方法支持表现特定属性的序列或序列集的快速开发是非常重要的。

系统与其说明书的相符性验证可以在系统开发的各个阶段执行,或者通过使用在某些抽象级的该系统的模型,或者通过使用该系统的制造例子。在系统实际制造之前利用模型执行相符性验证很有益处,可以大量节省时间、金钱以及可得到的资源。

仅为了说明的目的,下述的讨论将集中于通过使用系统模型的相符性验证,系统模型是与实际系统实现相对的。

在使用系统模型做相符性验证的场合,验证环境可以更精确地定义成除其他各项之外还包括系统模型的表示(也即所知的目标或DUT,待测试设备)和处理该系统模型的机制(通常是仿真器或模型接口,在某些情况下可建立到系统模型本身)。在这个环境之内,在任何时刻可能在该DUT上执行的各个验证操作(合适的或不合适的)的可能数量可以非常大。可以在该DUT上执行的验证操作的不同序列的数量作为系统和序列长度的复杂性的指数函数增长。每当我们谈到从DUT读取或向其写入,我们也是指从该验证环境的任何部分读取或向其写入,包括所述的用于处理系统模型的机制以及任何其他对象。

用户从所有可能序列的范围来定义子集,对该子集,说明书定义当把序列施加到该DUT时所发生的行为。我们把这样的序列称作是“有意义”的。有意义的序列可以包括那些在DUT正常操作期间预期的序列,也包括指出错误的序列。包括两类序列是有用的,因用户希望能够不仅知道当提供正常输入时按照说明书的DUT操作,还希望知道当提供错误输入时的DUT操作。

这种子集的定义本身通常非常困难,除了其他因素,还由于不确定说明的DUT行为,其限制了什么是有意义的,什么是无意义的,以及需要保证只包含有意义的序列。

这种序列的子集就是所知的验证协议。

通常,仅仅把验证协议施加到DUT的DUT测试不足以得到有效的相符性验证。通常在测试期间要做附加的相符性验证,通常检查满足规格的DUT行为。一般来说,不失一般性,可以把相符性评估描述成步骤的序列,其每个发生在验证协议的有关步骤之间。每个相符性评估步骤把相符性评估的当前状态和DUT的当前观察状态作为其输入,并计算相符性评估的新状态,或把信息报告给用户,或者是这些的某种结合。在下文中验证协议和相符性评估的结合将称作相符性评估协议。通过把相符性评估协议施加到所述DUT来测试DUT的处理被称作动态验证。

为了满足特定的相符性验证目标,用户从相符性评估协议中指定哪些序列将用于任何一个动态验证行程。这样的目标可以包括检验DUT的特定部分或多个部分、检验系统说明书的特定子集或多个子集、在时间界限内动态验证套的完成、使用特别的资源集来执行动态验证套的能力等。用户可决定重复执行给定的动态验证行程以检查某种问题。由于某些序列的长度可以是无限的,用户可决定只使用该序列的一部分。用户还可以决定重复使用序列。

在序列选择中,用户还决定何时已进行了足够量的验证以便可宣布该DUT与其说明书相符合,以及可宣布DUT与其说明书不相符合的条件。

作为上述的验证环境的一部分,还包含相符性评估协议的表示和用于对系统模型施加相符性评估协议以及解释结果的机制。

除了所述的这些重大困难,当系统说明书不完整、不完善的时候,用户要建立相符性评估协议还有另外的困难。

在系统验证期间的任何时候都可以做说明书的改变,并且这样的改变必须通过相符性评估协议中的适当改变来反应。

另外的重要问题是从这样的实事引起的,许多需要验证的“新”系统设计不是完全新的,而是已经过验证的已有系统设计的改进版本。由于对复杂系统建立相符性评估协议既困难又成本高昂,而且耗时,所以,从成本的观点和时间对市场(time-to-market)的观点来看,按照使得其尽可能在未来的系统和类似的系统中可以重用的方式来建立用于系统的相符性评估协议。

在现有技术中,已经使用各种方法来表示相符性评估协议、指定用于特定动态验证行程的序列(多个序列)和序列(多个序列)的部分(多个部分)、维持和更新相符性评估协议的说明书、以及提供至少某种验证工作重用的措施。

一般来说,现有技术的方法可以分成本质上是纯程序性的方法和使用自动机的方法。自动机方法通常也包括某些程序性技术以执行命令式功能(imperative function)。下面要考虑这些方法中的每一种。

早期的用于验证的程序性方法中最常见的是公知的“命令式测试(directed testing)”。通常,命令式测试程序实现并测试来自相符性评估协议的单个序列。用户使用该验证环境所支持的某些命令式编程语言来手工编码。该测试程序产生某些要施加到DUT的激励,观察该DUT的响应或反应,然后重复该处理。

通过用户手工选择激励的特定模式来选取由特定命令式测试程序实现的来自相符性评估协议的序列,从生成要施加到DUT的激励。由用户负责保证DUT处于适当的状态,以接收激励(如果有),观察DUT的响应或反应(如果有),并且检查所述的响应或反应适合于所施加的激励。所有这些动作都必须由用户来手工编码。

对于测试通常的现代设计所需要的大量序列中的每个都建立命令式测试,其成本之高令人望而生畏。幸而在所期望测试的各种子集中存在若干相似性,因此在某些命令式测试之间可以共享一些程序代码。从这种观察自然会发展到建立参数化或可配置的测试程序,这种测试程序覆盖多个命令式测试。这种可配置测试程序可以决定执行哪个范围的测试、如何改变影响测试的内部参数等等。这种测试程序在任何特定动态验证行程执行期间从用户接收有关要执行测试范围的哪一方面的指示、各种参数可接收值的集合等以及其他作为其输入的部分。

把命令式测试结合到可配置测试程序中是完全通过手工来做的。用户必须设想可能测试的集合,从这些测试中选择子集,通过使冗余最小化而有效利用可用验证资源,确定这样的维度(dimension),可沿这些维度分解所选择的测试,执行分解,并把片断融合到可配置测试程序中。这种工作较之建立个别的命令式测试程序要求更高的技能和技巧,用户不仅必须能够理解各命令式测试程序在编写时的样子(因此可确定用于分解的合适片断)以及设想如何顺序调用这些片断以使得DUT经过合适的状态序列,而且要能够构造这样做的合适机制。

可配置测试程序不仅包含它所要替换的各命令式测试程序的所有功能的联合,而且要包含额外的代码以实现可配置性本身。这种额外代码加入了与在个别命令式测试程序中包含的不同种类的知识。不是面向激励的产生、响应或反应信息的获取或其检查来进行指导,而且所增加的材料与检验DUT的更高级模式有关。已经有关于应该验证什么(如应该施加那些可能的测试)和如何验证(激励的施加、响应的检查)的知识的混合。这种混合产生更复杂的测试程序并相应提高了为建立测试程序并保证其正确性的时间和劳动方面的成本。

复杂性和编程技巧要求都增加了,在付出这样代价的情况下,较之使用个别命令式测试所建立的测试序列,可配置测试程序可提供更独特的测试序列。但是,由于设计的复杂性增加,为了扩展测试的数量,需要更强的技术。最近的流行技术是约束伪随机测试(CPRT)。在这种方法中,把若干伪随机选项结合到可配置测试程序,扩展了程序可建立的可能序列的范围。一般来说,这些序列中的一些是在相符性评估协议中,而另一些不是。因此,CPRT程序通常还包含在伪随机选项上的若干约束,在操作上限制这些选项,以使得所产生的序列都在相符性评估协议中。

CPRT方法确实扩展了可配置测试程序能够建立的测试数量,但付出了仿真效率方面的重大代价。为了完全覆盖给定的序列集,通常CPRT程序要用更多的仿真周期。所花费的仿真时间量随着目标序列集的大小的增加而快速增长,通常是以N*ln(N)-N的速率,其中N是目标序列集合的大小。即使对如两三千这样相对较小的N,为了用CPRT覆盖序列集,要花费10倍的时间。为了测试复杂的现代设计,通常需要更大的序列集,其时间开销会无法承受。

在现有技术中,系统验证的程序性方法的替换方法是使用基于自动机的方法。

非确定自动机可以按不同方式来描述。例如,某些现有技术的教导使用状态(state)和转换(transition)来描述非确定自动机,某些现有技术的教导使用文法或终结符串的集合来描述非确定自动机,以及某些现有技术的教导利用图、即节点和连接来描述非确定自动机。所有这些现有技术的非确定自动机描述在数学上都是等价的,并且可利用本领域公知的技术进行相互之间的转换。

现有技术的教导表明了如何使用非确定自动机来定义在动态验证行程期间可依次执行的测试程序片(也称作“动作例程”)的序列,并因此把非确定自动机应用到系统验证的问题。例如,某些现有技术的教导使用按照关于来自状态、来自转换或来自二者结合的测试程序片断的状态与转换的组合描述的非确定自动机。例如,某些现有技术的教导使用按照关于来自终结符、来自非终结符(如果在该文法中定义)或来自二者结合的测试程序片断的文法或终结符串集合的组合描述的非确定自动机。例如,某些现有技术的教导使用按照关于来自节点、来自连接或来自二者结合的测试程序片断的图(即节点和连接)的组合描述的非确定自动机。现有技术按各种方式实现对程序片断的参照,如指针、查找表项等。所有这些现有技术的组合描述(在所述的组合描述中包括对测试程序片断的参照和所指的测试程序片断本身)在数学上是等价的,可利用本领域公知的技术进行相互之间的转换。某些现有技术把通过这样的组合描述所说明的实体称作“扩展的非确定自动机”,并把测试程序片断看作是“自动机扩展”。另外的现有技术教导把通过组合描述说明的实体简单称作“非确定自动机”,把测试程序片断看作是该自动机的一部分。为了清楚和简洁,我们采用后一种方式,并使用术语“非确定自动机”来指通过所述组合描述说明的实体。“非确定自动器(non-deterministic automaton)”是“非确定自动机”的单个形式。为了简明,我们有时候使用缩写“NDA”来指非确定自动器。在数学上,不带有测试程序片断的非确定自动机的集合是带有非负数量的测试程序片断的非确定自动机的集合的子集,因该数量可以是零。

由于非确定自动机可以按数学上等价的几种形式来描述,为了简明,每当我们就这些不同形式谈及某个方面,我们将选择其中任何一种,本领域的技术人员应该理解利用其他方式描述的非确定自动机在这方面的应用。而且,现有技术还教导确定自动机是非确定自动机集合的适当子集,因此,无论何时谈及非确定自动机时也包括确定自动机。

现有技术中那些验证DS系统和NDS系统的确定子集的技术中发展了用于测试的自动器方法。主要是单线程软件应用的领域。通常,在这种现有技术中,使用自动器来帮助跟踪待测试软件应用程序的状态。

在许多现有技术的自动机应用中,要构造表示NDA文法的图(“NDA图”),这常常通过程序来自动建立NDA图,该程序以扩展BNF型描述作为输入。遍历该图以产生终结符序列。使用该终结符序列有效地把对应于这些终结符的测试程序片断按顺序连缀在一起,以组成用于动态验证行程的相符性评估协议的特定应用程序。

在现有技术中,可以按各种方式来进行遍历。“遍历”包括任何处理NDA的方法,这些方法按照在NDA的说明中定义的顺序来处理NDA的多个组成部分。

通过使用自动器方法,可以使用适中数量的执行特定基本操作的测试程序片断来构造测试程序整个范围的说明。从该特定范围可以通过一般的测试生成程序来执行任何个别测试的生成,该程序以表示相符性评估协议的非确定自动机作为其输入,并根据特定的遍历策略执行相应NDA图的遍历。所生成测试的施加可以由一般的测试施加程序来执行,该程序按照所述遍历确定的次序来执行相应的的测试程序片断。通常,改变该测试程序范围的说明,不要求改变所述的测试生成程序和测试施加程序(在某些情况下可组合成单个的程序)。

通常,现有技术的自动器方法较之严格的程序性方法有几个优点。这些优点可与在编译程序开发中得到的优点相类比,在编译程序开发中,例如,把递归下降的句法分析器的手工编制转移到通过自动的句法分析器生成器(例如,yacc或Bison)根据基于文法的语言说明来生成。

现有技术的自动器方法的一个优点是把相符性评估协议(通过非确定自动器来表示)从用于给定动态验证行程的特定各序列的选择(由该非确定自动器是如何处理或遍历来表示)中分离出来。这样,不同的人员可工作在问题的不同部分,改进了测试程序生成处理的开发、交流、评论和管理等各个方面。另外,在没有了包含在测试程序片断中的杂乱的细节的情况下,可以容易地查看相符性评估协议的范围。另外的重要优点是自动器文法本身可直接与系统说明相关,而不必分离出遍历代码。这提供了特定动态验证行程获得覆盖的更有意义度量的基础。

相对照地,程序性方法在操作上限定相符性评估协议,即通过构成测试程序的特定代码来定义相符性评估协议。一般来说,在这样的测试程序中,在(a)产生并施加激励、获取DUT的响应或反应并检查适合性结果的代码和(b)实现所施加激励的实际选择的代码之间没有区别。这两者混在一起,要独立地处理两类知识,即使不是不可能,也是很困难的。对于遍历策略困难尤其大,因在程序性方法中该策略通常隐含在测试程序是如何编码的过程中。用户的意图很难理解,也不能容易地理解和自动修改策略,以获得与最初编写的意图不同的目标,例如,另外的覆盖目标。可测量的覆盖不大有用,因为它集中在测试程序代码的线路或路径上,而不是系统说明书中给定的规格上。另外,序列选择是人工的,又遇到了(上述的)人工选择“好”测试的情况中有关的困难。

基于自动机方法的另外优点是,对给定的说明书覆盖水平,能够产生更简明的相符性评估协议的说明。这样,通常建立它们所需要的时间就短,并且容易修改、维护、更新、扩充和重用。由于这些因素,它们中的错误(bug)也应该更少。在程序性方法中用户必须手工建立的代码总量(以及复杂度)对于在给定时间量中用户可获得的覆盖量造成了严重的限制。

基于自动器方法相对于程序性方法的优点随着用自动器文法代替测试程序片断来表示验证协议的范围的扩大程度而变化。对于给定的相符性评估协议,用文法表示的验证协议的范围越大,基于自动机方法可实现的优点就越多。相对照地,用测试程序片断表示的验证协议的范围越大,就越接近具有所有上述缺点的程序性方法。

现有技术的自动器方法已经应用于测试系统,如单线程软件程序,其中非确定说明的行为或者不存在或者高度局部化。在这样的验证应用中,验证协议范围的大部分都可以用自动器文法来表示,而不需要动态验证行程期间的动态约束终结符生成序列的能力(等价于NDA图遍历的动态约束)。但是,当现有技术的方法应用到更复杂的系统,例如,基于多线程微处理器的计算机芯片,其中非确定说明的行为不是高度局部化的,用户被迫把验证协议范围表示的大部分从自动器文法改变到测试程序片断。这样,测试程序片断变得更大更复杂,用基于自动器的方法代替程序性方法的好处就丧失了。

我们可以看到,现有技术的自动器方法相对程序性方法有几个优点,但在可用自动器文法表示验证协议范围的程度上有严重局限。这种局限使得用于验证的自动器方法不能用于许多复杂系统的相符性验证。

对于程序性方法,在测试的概念化、开发、更新和维护方面需要大量的时间和费用。这些开销常常比建立系统本身的设计所需要的开销还要大许多。使用程序性方法,由于前述的测试选择问题,测试概念化尤其困难。利用这种方法开发的测试程序是大型的软件。因此必然面临在开发、更新和维护大型复杂软件应用程序中所公知的各种困难。

对于程序性方法,要减少根原因的观察到的异常或缺陷,在时间和资源上的开销非常大。为了减少为再现出现异常的情形所需要时间量,用户通常要试图使设置(set-up)序列最小化。但是,由于前述的在处理大型复杂软件方法的困难,在程序性方法之下,要确定如何适当地完成这些,尤其是要正确地编辑测试程序以达到这样的目的是需要很大的成本的。

对于程序性方法,在产品开发过程的早期建立测试会在时间和资源上有很高的成本。由于大的测试程序通常需要验证,尽可能早地开始测试程序的构造是有益的。但是,在产品开发的早期,经常改变系统说明书是很常见的。由于上述的处理大型软件所面临的困难,正确识别和修正受这种改变影响的测试程序具有很高的成本。

对于程序性方法,由于上述的处理大型复杂软件所面临的困难,要求测试的开发者具有相当高的软件开发技能。

对于程序性方法,当测试程序被用于验证目标系统的同时,在测试程序中通常也会发现大量的缺陷。在现有技术中已经观察到在测试软件中缺陷的数量通常至少与在目标系统本身发现的缺陷数量一样多。查找和修改这些缺陷要耗费大量的时间和资源。这是程序性方法要求建立大量复杂软件以实现测试所带来的自然结果。如本领域普通技术人员所公知的,复杂软件中缺陷的发生率与所编写代码的行数密切相关。

当要把新的测试序列添加到已有测试序列的集合时,对该新测试序列的第一级价值度量是看其是否与该集合中已有的任何序列相同,即看其是否要检验任何有所不同的内容。一个测试序列如果在至少某些方面没有什么不同之处,则不值得添加到该集合中。次一级价值度量是该新的测试序列究竟有何不同,即究竟覆盖了系统说明书的多少不同方面。从这一概念出发,我们可以认为给定测试序列集合的覆盖宽度就是其跨度(span)。假定通常不可能对系统行为的每一个可能的方面都做检验,这样,通过建立具有尽可能大跨度的特别测试序列使验证成果尽可能多地覆盖系统说明书的空间就是有价值的。但是,由于前述的测试选择问题,在使用程序性方法时,这是很困难的。

同其他的大型软件项目一样,程序性方法测试的建立者在编写测试程序时具有特定的目标:完成程序,避免缺陷,使快速执行,等等。当用户必须同各种的验证过程的财产保管人(客户、设计者、同事、管理者等)交流时,这时候的目标就与上述的目标不同。在这些时候,对用户而言,重要的是进行沟通,使得可理解由该测试所表示的工作的复杂体。在这些情况下,需要做分层、抽象、细节的渐进式公开等等。对于大型复杂软件项目,这两组目标通常不兼容。在程序性方法中,面临同样的困难。

现有技术的基于自动器的方法不能动态改变自动器的遍历或自动器本身,以便能处理在验证期间DUT所表现的各种非确定说明的行为。对许多复杂系统,该问题严重限制了验证协议范围可以用自动器文法表示的宽广程度。这使得现有技术的用于验证的自动器方法不能用于许多复杂系统的相符性验证。

附图说明

图1示出了概述。

图2示出了相符性验证的阶段。

图3示出了包括DVR线程集的动态验证行程中的线程。

图4示出了动态验证行程中线程的第一例子。

图5示出了动态验证行程中线程的第二例子。

图6示出了动态验证行程启动的步骤。

图7示出NDA遍历机制复位事件的处理步骤。

图8示出调用$Resume_NDA任务的处理步骤。

图9示出了调用WAIT_FOR(Wakeup Handle)的处理步骤。

图10示出NDA遍历的步骤。

图11示出伪随机遍历策略中的步骤。

图12示出通过伪随机遍历策略的重复控制对象的处理步骤。

图13示出了强制遍历策略中的步骤。

图14示出了通过强制遍历策略的终结符对象的处理步骤。

图15示出了通过强制遍历策略的替换集合对象的处理步骤。

图16示出通过强制遍历策略的重复控制对象的处理步骤。

图17示出了跳转遍历策略中的步骤。

图18示出了通过跳转遍历策略的终结符对象的处理步骤。

图19示出了通过跳转遍历策略的替换集对象的处理步骤。

图20示出了通过跳转遍历策略的重复控制对象的处理步骤。

图21示出在遍历期间的自动机操纵和遍历操纵。

图22示出在动态验证行程期间的资源管理。

图23示出在动态验证行程期间的自动器同步。

图24示出图构造例程的例子。

图25示出图24所示的图构造例程所产生的图。

图26示出了图24所示的图构造例程所产生的图以及简化的变换。

图27示出了适于用作实施主题实施例的计算装置的计算机系统。

具体实施方式

在下面的说明中,将描述本发明一个和多个实施例的各个方面。但是,很明显,利用所描述各方面的仅仅一些或全部也可以实施本发明的另外实施例。为了便于说明,以使得能够对本发明提供全面的理解,这里陈述了特定的数字、材料和配置。但是,很显然,没有这些特定的细节,也可以实施本发明的其他实施例。在另外的实例中,略去或简化了公知的特性,以使得本发明的叙述更清楚。

部分的说明是通过数字系统所执行的操作来体现的,使用诸如数据、表、提示、确定等术语,这与本领域的技术人员向同行转达其工作要点时所采用的方式是一致的。如本领域技术人员所熟知的,这些数值可采用电、磁或光信号的形式,可通过数字系统的机械、电和光部件来存储、传递、组合以及做其他的操作。数字系统这一术语包括单独的、附带的或嵌入的通用以及专用的数据处理机器、系统等。

按照理解本发明最有益的方式把各种操作依次描述成多离散操作,但是,描述的次序应该理解成隐含这些操作是具有必要次序依赖的。特别,这些操作不需要按所表述的次序来执行,这些操作中选择出的一些可以并行执行。

某些DUT,如用C程序设计语言编写的可执行行为模型,可以直接用于动态验证行程。其他的DUT,如用Verilog语言编写的硬件模型,通过计算其行为的仿真器而用于动态验证行程。又其他的DUT,如物理设备,通过软件接口用于动态验证行程。如本领域中说明书所通用的,在下面的说明中,在需要时,仿真器或DUT软件接口的使用是隐含的,而不是明确陈述的。例如,短语“向DUT发送激励”,在可执行行为模型的情况下是指直接向该DUT发送激励,但在Verilog DUT的情况下是指向计算该DUT的所述行为的仿真器发送激励,而在物理设备DUT的情况下是指向DUT软件接口发送激励。

另外,本说明中反复使用短语“主题实施例(subject embodiment)”。每次使用该短语时,是表示在包含Tesla 1.2.4的某个实施例集合中各实施例的任何一个。后来再使用该短语“主题实施例”,可能涉及也可能不涉及相同的实施例集合,但每个这样的集合都包含Tesla 1.2.4。

概述

在图1中示出了主题实施例的概述。

主题实施例包括方法和装置,使得用户可通过指定由一个非确定自动器(图21中的2104)或多个非确定自动机组成的非确定自动机的集合(“NDA集合”)114,来指定相符性评估协议106(如在相符性评估协议设计阶段102)。每个NDA 2104可以包含对一个或多个动作例程(图21中的2110)的说明,动作例程例如是测试程序片断,其与NDA文法中的终结符相关联。在主题实施例中,动作例程可以规定任何期望的一系列动作,例如对用于动态验证112的验证环境中的DUT118和/或继承对象(legacy object)116(外部存储器模型)的输入、DUT和/或继承对象的可观察状态的检查、产生相符性结果120的相符性评估计算等。为了便于主题实施例中的NDA 2104的说明,用户可使用非终结符(在某些实施例中称作“符号”)来表达所述NDA中指定的终结符和非终结符序列,因此使得用户可分层指定所述NDA。为了进一步便于主题实施例中NDA的说明,用户还可在任何序列中使用“替换表达式”以指定终结符和非终结符的替换序列,这将引起主题实施例的NDA遍历机制(图21中的2114)在每当到达其替换实施例时选择并遍历(在动态验证112期间)集合的一个替换成员序列。用户可以对替换表达式中的任何替换赋予权值,并且当在NDA遍历期间(图10中1002)到达它们的替换表达式的时候,这些权值会影响选择这些替换的可能性。特别,零权值会使选择可能性为零,这为了相关遍历的目的会从所述NDA中删除该替换。

主题实施例包括NDA遍历机制2114,用于在动态验证阶段110中的动态验证行程(图21中2100)期间(即动态验证112的会话期间)遍历每个NDA 2104,因此选择其终结符序列中的一个来使用。通常,在NDA遍历期间每当到达终结符,则执行相应动作例程中的动作。随着遍历NDA集合,动作例程执行的序列实现相符性评估协议106的一个测试。

主题实施例还包括机制,用于在测试计算2102内操纵NDA 2104及其遍历期间的NDA遍历1002,如图21所示。

●主题实施例包括机制,用于在所述NDA的NDA遍历1002期间(即在其开始之后和其结束之前)从动作例程2110修改NDA 2104。所述机制的一个使得动作例程可发出NDA图修改命令2116来改变替换表达式中替换的权值。按这种方式,对相关的遍历,可通过把它们的权值从正值改变成零而把各替换从NDA中删除,或通过把它们的权值从零改变成正值而把替换添加到NDA。所述机制的另外一个使动作例程发出NDA图修改命令2116,以改变终结符对象指向哪一个动作例程2110。可以根据所期望的计算发出NDA图修改命令2116。所述计算可包括基于可观察的DUT 118状态历史的任何方面的计算,因此使得用户可以在响应DUT行为的动态验证行程2100期间指定NDA修改其本身,不论所述行为是不是非确定指定的。

●主题实施例包括机制,用于在所述NDA的NDA遍历1002期间(即在其开始之后和其结束之前)通过由动作例程2110修改相应的NDA遍历机制2114来修改NDA 2104的NDA遍历1002。所述机制使得动作例程可发出NDA遍历机制修改命令2118来改变NDA遍历机制当前使用的遍历策略(见下面有关遍历策略的讨论)。例如,遍历策略可以从伪随机遍历策略改变到跳转遍历策略。可以根据所期望的计算发出NDA图修改命令2116。所述计算可包括基于可观察的DUT 118状态历史的任何方面的计算,因此使得用户可以在响应DUT行为的动态验证行程2100期间指定修改NDA遍历机制2114,不论所述行为是不是非确定指定的。

●主题实施例包括机制,用于在所述遍历期间(即在其开始之后和其结束之前)对NDA 2104的NDA遍历1002修改NDA遍历机制2114上的遍历约束的集合。所述机制使得动作例程可发出“遍历集合约束”修改命令2120。例如,动作例程可以发出命令,通过添加要求NDA遍历机制2114在经过任何其他终结符之前要经过特定终结符的约束来改变遍历约束的集合。这样,通过把在NDA图2108中定义的终结符序列的遍历限制到此时与该相符性评估协议相一致的那些,从而可以对DUT的动态行为做出反应。可以根据所期望的计算发出“遍历约束集合”修改命令2120。所述计算可包括基于可观察的DUT 118状态历史的任何方面的计算,因此使得用户可以在响应DUT的行为的动态验证行程2100期间指定修改遍历约束的集合2112,不论所述行为是不是非确定指定的。

主题实施例包括资源管理机制,使得NDA 2104对任何需要独占使用资源的计算可保证任何资源的独占使用,从而可以正确遵循相符性评估协议。资源可表示任何东西,但通常用于指那些在动态验证行程2100期间有限供应的东西,如计算机存储器、带宽等。在某些应用中,资源是纯概念性的;这样的资源可用于在由自动机集合的各成员所执行的各计算之间强制串行要求或并行限制。通常每个资源具有一组特性。特性可以是资源的任何属性,如它的地址范围,它读数据的能力等。如同资源,特性也可以是纯概念性的。

在图22中示出了说明主题实施例中资源管理的例子。第一非确定自动器2228向资源管理器发出第一资源请求2220,指定第一资源需求集合2222(如“读/写存储器”类型的资源,具有至少1Mb的空间),以满足所述自动器准备执行的计算(在该例中是第一计算)的需求。当接收到该第一资源请求2220(操作2218),资源管理器2202使用哈希表查找和本领域公知的其他机制来搜索资源集合中满足第一资源需求集合2222的资源。由于特性1(2208)、特性2(2210)以及资源2206的其他特性满足所述的需求,资源管理器2202在第一资源2206上设置“使用中”特性,因此保留它用于第一非确定自动器2228的独占使用。资源管理器然后向第一非确定自动器2228返回指向第一资源2206的指针,以此响应第一资源请求2220(操作2224)。在接收该响应之后,第一非确定自动器2228开始执行所述的第一计算。随后,第二非确定自动器2240向资源管理器2202发出第二资源请求2236,指定第二资源需求集合2238,以满足所述自动器准备执行的计算(在该例中是第二计算)的需求。当接收了该第二资源请求2236(操作2230),资源管理器2202发现第一资源2206除了它已经处于独占使用状态之外可满足第二资源需求集合2238,所以不允许第二非确定自动器2240使用该资源。而是继续搜索并查找满足第二资源需求集合2238的第二资源2212。由于特性1(2214)、特性2(2216)以及第二资源2212的其他特性满足所述需求,资源管理器2202在第二资源2212上设置“使用中”特性,因此保留它用于第二非确定自动器2240的独占使用。该资源管理器然后向第二非确定自动器2240返回指向第二资源2212的指针,以此响应第二资源请求2236(操作2234)。在接收到该响应之后,第二非确定自动器2240开始执行所述第二计算。随后,第一非确定自动器2228完成所述第一计算的执行。第一非确定自动器2228通知资源管理器2202不再请求第一资源2206的独占使用,因此释放它(操作2226)。资源管理器2202清除第一资源2206上的“使用中”特性,因此使它可用于其他的使用。随后,第二非确定自动器2240完成第二计算的执行。第二非确定自动器2240通知资源管理器2202不再请求第二资源2212的独占使用,因此释放它(操作2232)。资源管理器2202清除第二资源2212上的“使用中”特性,因此使它可用于其他使用。各种其他的资源请求和响应方式也是可以的。例如,这常常发生资源太少,不能满足要被遍历的自动机集合所做的资源请求。在这种情况下,资源管理器2202将利用“当前没有可用的匹配资源”来响应自动器的请求。收到对资源请求的这种响应的自动器有几种选择。所述自动器可等待适合的资源变为可用,或者所述自动器可执行替换的计算,该计算不要求稀缺资源的独占使用(直到这样的资源变得可用)。

利用资源管理机制,可以在各种验证应用中重用自动机,从而具有很好的成本效益。在现有技术中,当一起成批重用各测试程序来用于各种系统的验证时,资源冲突是很严重的问题,但是通过主题实施例使用自动机就可以防止这种资源冲突。利用该实施例,对具有很大差异资源的不同系统的验证,可以不加修改地一起成批重用以前编写的各自动机。在各动态验证行程2100的开始,可以很容易地向资源管理器2202指定各系统的独特资源限制,因此建立针对特定系统的资源集合2204,由此可保证资源,并且可如上述那样释放资源。

操作流

在主题实施例中,相符性验证是通过包含如下步骤的过程来完成的,如图2所示,这些步骤中的任何一个可以执行一次或多次,作为迭代求精过程的一部分。

1、相符性评估协议设计阶段102

2、编译阶段108

3、动态验证阶段110

相符性评估协议设计阶段

在主题实施例中,相符性评估协议设计阶段102包括下述操作,其中任何操作可执行一次或多次,如作为整个系统验证过程(其本身可以是迭代求精过程)中的嵌套的迭代求精过程的一部分。

1、用户分析待测试系统的说明书(系统说明书104)以及相符性验证的目标。

2、用户建立一组验证测试台(testbench)。每个验证测试台包括:待测试系统的实例(即DUT 118),由主题实施例生成的任何期望的验证接口模块的实例(下面说明),以及任何其他期望验证实体的实例,如继承对象116(使用现有技术方法准备的时钟生成器、激励生成器或结果检查器等)。

3、用户建立一个或多个NDA以及验证接口说明(VID,这在下面说明),以规定相符性评估协议的各部分。

4、用户建立资源说明函数,以规定要记录在资源集合2204中的资源集合及其特性。

在主题实施例中,NDA图(图21中的2108)可包括几种类型的对象。

1、终结符对象,其每个具有名字,并且可指向(即包含对其的参照)NDA遍历1002期间每当到达该终结符对象时要调用的动作例程2110。终结符对象不指向图中任何其他对象。

2、非终结符对象,其每个具有名字,并且指向NDA遍历1002期间每当到达该非终结符时实现待遍历子图的表达式对象

3、表达式对象是终结符对象、非终结符对象或任何下面类型的对象。

a)序列对象,其每个包含一列指针,指向NDA遍历1002期间每当到达该序列对象时要按次序顺序遍历的表达式对象。

b)替换集合对象(alternative set object),其每个包含一列指针,指向各替换对象,在NDA遍历1002期间每当到达该替换集合对象时,替换对象的一个被选择并被遍历。每个替换对象包含权值以及指针,该指针指向NDA遍历1002期间每当到达该替换对象时要遍历的表达式对象。

c)重复对象,其每个包含指针,指向NDA遍历1002期间每当到达该重复对象时要被相继遍历零次或多次的表达式对象。每个重复对象还包含该表达式对象要被遍历的最小次数。每个重复对象还包含该表达式对象要被遍历的最大次数。所述最大可以是“无限”,即表示对该表达式对象的遍历次数没有上限的特殊值。

在NDA 2104中,指定非终结符对象中的一个作为起始非终结符。

在主题实施例的相符性评估协议设计阶段,用户编写NDA图定义程序模块(用C++),其构成包含其连接的组件对象,由此来规定用于每个NDA 2104的NDA图2108,并选定起始非终结符。按这种方式提供图说明的技术可包括向用户提供类定义头文件以及重载C++算符。

说明用户如何在主题实施例中建立NDA图2108的例子在图24中的ConstructGraph()函数2402中给出。所产生的图2502的视图出现在图25中。非终结符(图24中的符号)“S1”2502包含指向序列2504的指针,该序列由指向终结符(图24中的动作)“a”2518的指针、所跟随的指向重复2520的指针组成。重复2520包含指向序列2522的指针。序列2522包含指向终结符“b”2524的指针、所跟随的指向替换集合2526的指针、所跟随的指向终结符“g”2528的指针。替换集合2526包含指向替换2514的指针和指向替换2516的指针。替换2514包含指向非终结符“S2”2506的指针。替换2516包含指向非终结符“S3”2510的指针。非终结符“S2”2506包含指向序列2508的指针。序列2508包含指向终结符“c”2530的指针、所跟随的指向终结符“e”2532的指针。非终结符“S3”2510包含指向重复2512的指针。重复2512包含指向序列2534的指针。序列2534包含指向终结符“d”2536的指针、所跟随的指向终结符“f”2538的指针。使用本领域公知的技术,实施例可以把图2502转换成其他的图,例如,为了说明和交流的目的,可转换成图26中的图2602。

在主题实施例的相符性评估协议设计阶段,用户通过编写函数(如用C++)来指定动作例程2110。这些函数可包括任何软件代码,并且特别可包括为了得到下述内容的函数调用。

1、从DUT 118或验证环境的另外部分读取。所获得的信息可用于任何期望的目的。这些信息的一种典型使用是用于执行DUT行为正确性检查。这些信息的另一种典型使用是用于确定应该执行动作例程代码的哪一部分(即分支)。

2、向DUT 118或验证环境的其他部分写入。

3、使NDA 2104与DUT 118或验证环境的其他部分同步,使得例如当DUT处于适当状态时从该DUT读取或向该DUT写入。同步机制包括下述类型的同步命令(图23的2308):

a)WAIT_FOR(event handle),其使得其上运行该动作例程的线程被挂起,直到对应于event handle的事件发生。所述事件是同步条件的例子(图23中2320)。

b)WAIT_FOR(duration),其使得在其上运行该动作例程的线程被挂起由duration指定的仿真时间量。指定时段的仿真时间的完结是同步条件2320的例子。

c)WAIT_FOR(wakeup handle),其使得检查当前NDA实例的待决唤醒计数器。下述的计数器检查和可能的递减必须作为原子动作来完成,以避免可能由同时发生的动作而引入的错误。如果所述待决唤醒计数器大于零,所述待决唤醒计数器减1,并且该动作例程继续。否则,在其上运行该动作例程的线程被挂起,直到该待决唤醒计数器超过零,在这一点执行下述动作:该待决唤醒计数器减1,挂起该DUT线程306,以及恢复在其上运行该动作例程的线程。

d)Target-NDA-Instance->WAKEUP(),其使得目标NDA实例的待决唤醒计数器加1。

4、如上所述利用NDA图修改命令2116来修改NDA。

5、如上所述利用NDA遍历机制修改命令2118来修改NDA遍历机制2114。例如,当NDA遍历机制2114使用伪随机遍历策略,调用Skip(target-terminal)函数会引起NDA遍历机制2114临时改变而去使用跳转遍历策略,以便到达特定的目标终结符(target-terminal)对象,而不调用在到达该特定终结符对象之前到达的任何其他终结符对象的动作例程2110。

6、如上所述利用“遍历约束集合”修改命令2120来约束NDA 2104后续的NDA遍历1002。例如,调用Force(target-terminal)函数将要求NDA遍历机制2114在遍历任何其他终结符对象之前遍历特定的目标终结符对象。还有一个例子,对AdjustLoopLimit函数的调用将要求NDA遍历机制2114在当其所包含的表达式对象的特定数量的附加遍历完成后从其所包含表达式对象的重复遍历停止重复对象。

7、如上所述,通过向资源管理器2202指定一组资源需求,请求资源的独占使用。

8、如上所述,通过通知资源管理器不再要求特定资源的独占使用来释放资源的独占使用。

9、读取或写入数据对象。每个NDA实例具有用户指定的数据对象。数据的通常使用是在NDA实例的各动作例程2110之间传递信息,以使得一系列动作例程能够合作执行计算。数据对象的另外使用是在那些需要以某种方式合作的单独NDA实例的动作例程之间传递信息。

10、利用NDA的名字和验证接口模块的实例名来查找特定的NDA实例。使用该查找函数的一个理由是为了调用Specified-NDA-Instance->WAKEUP()。使用该查找函数的另一个理由是为了能够读取和写入特定的NDA实例数据对象。使用该查找函数的又另一个理由是为了使一个NDA 2104的动作例程2110可向第二NDA 2104发出NDA图修改命令2116。使用该查找函数的又另一个理由是为了使一个NDA2104的动作例程2110可向遍历第二NDA 2104的NDA遍历机制2114发出NDA遍历机制修改命令。使用该查找函数的又另一个理由是为了使一个NDA 2104的动作例程2110发出“遍历约束集合”修改命令2120,以修改用于第二NDA 2104的NDA遍历1002的NDA遍历机制上的遍历约束集合2112。

11、结束当前的动态验证行程2100。如果DUT 118正在由具有结束功能的仿真器执行,主题实施例将调用它。

12、中断当前动态验证行程2100并使得用户可交互地输入指挥命令。如果DUT 118正在由具有交互用户界面的仿真器执行,则主题实施例使它变成活动的。

在主题实施例的相符性评估协议设计阶段,用户对每个NDA 2104指定NDA用户初始化函数。该函数可以包含任何软件代码(如用C++编写的)。通常,NDA用户初始化函数根据相符性评估协议调用主题实施例函数把每个终结符对象的动作例程指针设置到指向合适的动作例程。

在主题实施例的相符性评估协议的设计阶段,用户建立一个或多个验证接口说明(VID)。每个VID指定用于一个或多个NDA的验证接口,并且可包括下述信息。

1、输入和输出引脚(pin)定义。

2、实例参数定义,这可用于定制如启动时和保持时的行为。

3、该VID所包含各NDA的标识,即VID对这些NDA提供接口。

4、对该VID中的每个NDA 2104,包含编译的动作例程和编译的用于NDA的初始化函数的共享库的标识。

5、内部信号句柄定义,其用法的一个例子是使得动作例程2110读取或驱动任何期望的DUT 118内部线路或寄存器。

6、事件定义,其把事件句柄与事件结合,其中所述事件利用验证环境所支持语言的事件表达式来指定。事件定义还可以包含所述语言中的级别表达式(level expression),在这种情况下,认为该事件仅当事件表达式被触发并且该级别表达式为真时才发生。可以使用事件句柄的一种方式是当与DUT 118或验证环境的另外部分同步时在动作例程2110的WAIT_FOR函数调用中(即同步命令2308)。

7、对该VID中的每个NDA 2104,NDA遍历机制复位事件的标识。

8、局部变量定义,其导致在对应于该VID的验证接口模块中的局部变量的说明。

9、时钟定义,包括高周期(high period)长度、低周期(low period)长度、选择开始事件和选择结束事件。

10、时段定义,其把时段句柄与表示仿真时间量的表达式的值结合。

11、唤醒定义,指定用于动作例程2110的唤醒句柄。可使用唤醒句柄的一种方式是当同步多个NDA时WAIT_FOR函数调用动作例程中同步命令2308。

在主题实施例的相符性评估协议设计阶段,用户可建立资源说明函数。该函数可包括任何软件代码(如用C++编写的)。通常如果请求任何资源,资源说明函数调用主题实施例函数来构造资源对象,并指定所述资源对象的特性。主题实施例自动把所述资源对象标记成“可用”并把它们添加到资源集合2204中。

在主题实施例中,资源对象可利用预定特性来构造,该预定特性适合许多应用,包括下述:

●主/从特性。

●整数设备类型(integer device-type)特性,可用于指定用户定义的类似设备中的成员关系,

●地址范围特性,

●“可读”特性,

●“可写”特性,

●“可直接加载”特性,可用于指定可通过直接数据加载机制把数据写入设备中,

●未初始化特性

●“是存储器”特性,

●“是FIFO”特性,这可用于指定该资源是不可寻址的,

●“是便笺本“特性,这可用于指定该资源仅可由CPU存取,

●“具有外部地址”特性,这可用于指定该资源可由外部主机寻址,以及

●忙/闲特性,由主题实施例使用以标记该资源是已经保留用于独占使用,还是当前可用。

资源对象还可以有用户指定的附加特性。

编译阶段

在主题实施例中,编译阶段包括下述操作,其中任何操作可执行一次或多次,如作为迭代求精过程的部分。

1、主题实施例读取每个VID并生成相应的验证接口模块(在动态验证阶段110期间),其提供该VID所包含的各NDA与该该DUT 118之间的接口,如果必要,提供该VID中的各NDA与验证环境的其他部分的接口。该验证接口模块还可以包括局部变量声明和时钟生成。该验证接口模块还包含WAIT_FOR同步命令函数支持代码。

2、主题实施例对每个NDA 2104编译各动作例程2110和NDA初始化函数,并把所产生的对象模块存储在包含该NDA的VID中指定的共享库中。

3、主题实施例对每个NDA 2104编译NDA图定义程序模块,把所产生的对象模块与来自实施例的共享库链接,然后执行所产生的程序,以生成二进制NDA图文件。该二进制NDA图文件包含NDA图2108的二进制表示,可快速加载到动态验证行程2100中。

4、主题实施例编译资源说明函数,并把它添加到由VID列出的共享库中,其对应的的验证接口模块在该验证测试台中被实例化。

动态验证阶段

在主题实施例中,动态验证阶段110包括一个或多个动态验证行程。为了说明的目的,描述通过NC-VerilogTM使用的主题实施例的动态验证阶段,NC-VerilogTM是Cadence Desigh System公司的产品。利用其他仿真器工作的另外实施例也是可以的,并由这里的教导很容易构造。

动态验证行程中的线程

在主题实施例中,在动态验证行程2100期间使用多个线程,如图3中所示的例子所说明的。通常,DUT 118用一个线程306来运行,下面称之为DUT线程。如果在动态验证行程2100中对DUT需要仿真器,该仿真器用DUT线程306运行(否则,DUT接口或DUT本身用DUT线程306运行)。对验证接口模块的每个实例化,对相应VID所包含的每个NDA 2104,动态生成NDA实例线程308/314;该线程用于处理相应的包括NDA遍历1002和动作例程执行的NDA实例310/312。由DUT线程306和NDA实例线程308/314组成的线程集合在下文中被称作DVR线程集合302。控制线程的执行,使得在任何时刻只有该DVR线程集合中的一个成员在执行验证任务,并且挂起其他的成员。要执行的DVR线程的第一成员是DUT线程306。DUT线程的执行偶尔被挂起,并允许一个NDA实例线程308/314执行。所述NDA实例线程后来被挂起并恢复DUT线程306的执行。在图4和图5中的垂直时间线(timeline)上示出了线程交互的各种例子(在这些图中,执行的线程用实线示出,挂起的线程用虚线示出)。对这些实施例,由于在任何时刻只有DVR线程集合302中的一个成员可以是活动的,在每个NDA 2104中的动作例程不需要是线程安全的(thread safe),并且任何其他的设计成单线程验证环境的验证软件(如许多可执行DUT和DUT仿真器那样)都不需要是线程安全的(例如,不需要使用互斥锁来保证两个NDA之间共享的数据存取,或NDA与DUT或DUT仿真器之间的数据存取)。

在主题实施例中,如图23中所示,在第一计算机任务2302中被处理的NDA 2104(如第一NDA实例线程308)可与DUT 118和/或第二计算机任务2324(这可以是处理不同NDA的第二NDA实例线程314)同步。利用同步命令2308的执行1312来开始同步,由此指定2318同步条件2320(如DUT“就绪”信号从逻辑高改变到逻辑低)。随之第一计算机任务2302被挂起2314。随后,DUT 118的活动、第二计算机任务2324的活动、或者二者结合导致同步条件的发生2322(如“就绪”信号上的逻辑低)。然后,在同步命令2308之后紧接着的时间点做第一计算机任务2302的恢复2316。按这种方式,NDA 2104可与DUT和/或该验证环境中的任何其他对象或对象集合同步。注意同步命令2308可以出现在动作例程2304中的任何地方。特别,它可以出现在该动作例程中的非同步测试计算语句(如果有的话)之前,在该动作例程中的非同步测试计算语句(如果有的话)之后,或者在该动作例程中的任何两个非同步测试计算语句(如果有的话)之间,例如在可选的第一非同步测试计算语句2306之后并在可选第二非同步测试计算语句2310之前(非同步测试计算语句是与同步命令不同的任何测试计算语句)。

动态验证行程

在使用NC-VerilogTM的主题实施例中,每个动态验证行程2100包括下述操作,如图6所示。

1、用户选择验证测试台(testbench)和用于伪随机遍历策略的种子(操作604)。用户建立动态验证行程初始化文件,该文件指定所述种子,并且还列出每个VID文件名和由它生成的验证接口模块的名字(操作606)。

2、用户在验证测试台上调用NC-VerilogTM仿真器(操作608),利用动态验证行程初始化文件名和主题实施例的动态验证阶段用于NC-VerilogTM的共享对象实现的名字来传递。

3、用DUT线程306执行的NC-VerilogTM,加载动态验证阶段用于NC-VerilogTM的共享对象实现(操作610),并调用其初始化函数(操作612)。该函数注册用在验证接口模块中的Verilog任务,包括$Resume_NDA任务。该函数还读取动态验证行程初始化文件,利用伪随机策略种子来初始化伪随机数生成器,并使用VID文件/验证接口模块名对应的信息在存储器中生成VID文件查找数据结构。该函数还调用资源说明函数。

4、对每个验证接口模块的实例,NC-VerilogTM调用用于模块定义中的$Resume_NDA任务的检查函数(操作614、616和618)。该检查函数从该仿真器获取该实例的名字和该模块的名字,并使用该信息从VID文件查找数据结构获取相应的VID文件名。该检查函数然后读取VID以获得其包含的NDA列表。对每个NDA 2104,该检查函数调用用于NDA的NDA用户初始化函数。

5、NC-VerilogTM开始仿真(操作620)。

6、当发生NDA遍历机制复位事件,如果相应的NDA实例当前正在被遍历,则调用NDA遍历机制结束函数,其停止遍历。在每种情况下,都调用$Resume_NDA任务。这通过图7中的操作704、706和708来说明。

7、当调用$Resume_NDA任务,如果相应的NDA实例没有在被遍历,则调用NDA遍历机制初始化函数,其启动新的NDA实例线程并挂起DUT线程306。如果相应的NDA实例在被遍历,则恢复相应的NDA实例线程并挂起DUT线程。在每种情况下,通常NDA遍历1002继续,直到遇到WAIT_FOR同步命令23408。这通过图8中的操作804、806、808、810和812说明。

8、每当任何动作例程2110执行WAIT_FOR(event handle)同步命令函数调用,则挂起其中运行该动作例程的NDA实例线程,恢复DUT线程306,执行从$Resume_NDA任务的返回,并且NC-VerilogTM恢复。然后在相应的Verilog接口模块中生成的Verilog代码等待,直到在该仿真中发生对应于该事件句柄的事件,在这一点再次调用$Resume_NDA。

9、每当任何动作例程2110执行WAIT_FOR(duration)同步命令函数调用,则挂起其中运行该动作例程的NDA实例线程,恢复DUT线程306,执行从$Resume_NDA任务的返回,并且NC-VerilogTM恢复。然后,在相应的Verilog接口模块中生成的Verilog代码等待,直到仿真时间经过了duration的量,在这一点调用$Resume_NDA。

10、每当任何动作例程2110执行WAIT_FOR(wakeup handle)同步命令函数调用,则检查当前NDA实例的待决唤醒计数器(操作904)。如果所述的待决唤醒计数器大于零,所述待决唤醒计数器减1(操作918)并且该动作例程继续。否则,恢复DUT线程306(操作906),并挂起其上运行该动作例程的线程(操作908)直到所述待决唤醒计数器超过零910,在这一点执行下述操作:所述待决唤醒计数器减1(操作912),挂起DUT线程306(操作914),并恢复其上运行该动作例程的线程(操作916)。这在图9中说明。

在主题实施例的动态验证阶段110,下述三个函数是可用的。

1、函数TerminalCanBeReached(终结符对象指针,NDA图对象指针)响应下述问题返回布尔值(即,对是(yes)返回真,对否(no)返回假):“是否存在从由该NDA图对象指针所指向的NDA图对象开始的NDA子图的遍历,以使得到达该终结符对象指针所指向的终结符对象?”

2、函数TerminalCanBeFirst(终结符对象指针,NDA图对象指针)响应下述问题返回布尔值:“是否存在从由该NDA图对象指针所指向的NDA图对象开始的NDA子图的遍历,以使得该终结符对象指针所指向的终结符对象是所到达的第一个终结符对象?”

3、函数TerminalsCanBeAvoided(NDA图对象指针)响应下述问题返回布尔值:“是否存在从由该NDA图对象指针所指向的NDA图对象开始的NDA子图的遍历,以使得没有到达终结符对象?”

NDA遍历机制

在主题实施例的动态验证阶段110,NDA遍历机制2114按如下所述操作。当调用NDA遍历机制初始化函数,则NDA遍历1002开始。在初始化期间挂起DUT线程306并建立新的NDA实例线程用以处理该NDA 2104,包括遍历的执行和动作例程2110的执行。NDA遍历机制2114使用遍历策略来执行大多数遍历工作。本发明允许任意数量的遍历策略,但主题实施例提供三种(见下面说明):(a)伪随机遍历策略,(b)强制遍历策略,其用于主题实施例以实现强制遍历约束,以及(c)跳转遍历策略。NDA遍历机制2114具有下压栈(策略PDS),用于保存指向遍历策略的指针。在初始化期间,NDA遍历机制2114把指向伪随机遍历策略的指针压入该策略PDS,使得它可成为默认遍历策略。NDA遍历机制2114还具有下压栈(对象PDS),用于保存指向各NDA图对象和控制对象的指针。在初始化期间,NDA遍历机制2114把指向NDA的起始非终结符的指针压入对象PDS,以使得该遍历从此处开始。在初始化之后,每当执行所述NDA实例线程,则NDA遍历机制重复执行下述两个操作过程,直到对象PDS为空(1006)、相关的复位事件发生(1004)或者动态验证行程停止(1008)。这在图10中说明。

1、NDA遍历机制2114从对象PDS弹出对象指针(当前对象指针)(操作1010)。

2、NDA遍历机制2114把当前对象指针的处理交给当前遍历策略(即,由策略PDS顶部的遍历策略指针所指向的遍历策略)(操作1012)。

在遍历1002期间,如果对象PDS变为空,或发生相关的复位事件,则调用NDA遍历机制结束函数(操作1014)。在结束期间,调用NDA的结束函数(如果用户指定),因此提供机制来清除因执行动作例程2110而建立的任何数据结构。还是在结束期间,清除对象PDS和遍历PDS。还在结束期间,撤消NDA实例线程。

伪随机遍历策略

在主题实施例的动态验证阶段110,伪随机遍历策略(PRTS)按如所述下方式处理当前对象指针。这在图11中说明。PRTS的目的是按伪随机方式遍历该NDA 2104,以使得产生多种多样的测试。

1、获取当前对象指针(操作1104)。

2、如果该当前对象指针指向终结符对象,则PRTS使用存储在该终结符对象中的动作例程指针(如果有)来调用相应的动作例程,然后等待所述动作例程返回(操作1106、1120和1122)。

3、如果该当前对象指针指向非终结符对象,则PRTS把指向存储在该非终结符对象中的表达式对象的指针压入对象PDS(操作1108和1124)。

4、如果该当前对象指针指向序列对象,则PRTS把该序列对象的表达式对象指针列表中的每个表达式对象指针按逆序压入对象PDS(即,在该序列尾部的表达式对象指针被首先压入到对象PDS,并且在该序列起始处的表达式对象指针被最后压入对象PDS)(操作1110和1126)。

5、如果该当前对象指针指向替换集合对象,则PRTS在其替换对象指针列表中做加权伪随机选择,以选定一个替换对象指针,并且把所选择的替换对象指针压入到对象PDS。用于加权伪随机选择处理的权值取自通过该替换集合对象的替换对象指针列表中的指针所指向的替换对象。这种PRTS的加权伪随机选择方法不考虑任何带有零权值的替换对象的选择(操作1112、1128和1130)。

6、如果该当前对象指针指向替换对象,则PRTS把指向存储在该替换对象中的表达式对象的指针压入对象PDS(操作1114和1132)。

7、如果该当前对象指针指向重复对象,则PRTS建立包含下述数据成员的重复控制对象(操作1116、1134和1136)。

a)指向该重复对象的指针。

b)重复计数器,其初始化成零。

c)重复目标,其可以是有限的数或是无限的(即大于重复计算器任何可能值的数值)。按下述方式初始化该重复目标。如果该重复对象的最大值是有限的值,PTRS把重复目标设置成该重复对象的最小值和该重复对象的最大值之间(含该最大值)的伪随机整数。如果该重复对象的最大值是无限的,把该重复目标初始化成无限。

在建立重复控制对象之后,PRTS把指向该对象的指针压入对象PDS。

8、如果该当前对象指针指向重复控制对象,则处理该重复控制对象(操作1118和1138)。在主题实施例中,PRTS执行下述过程,如图12所示。

a)PRTS把该重复控制对象的重复计数器与该重复控制对象的重复目标做比较。如果因该重复控制对象的重复计数器已经达到该重复控制对象的重复目标而认为该重复完成(操作1204中的检查),则PRTS删除该重复控制对象(操作1214)并跳过下面的操作7(b)-7(d)。

b)如果该重复控制对象的重复计数器还没有达到该重复控制对象的重复目标(操作1204中的检查),则PRTS通过对该重复控制对象的重复计数器加1来更新该重复控制对象(操作1206)。

c)进一步,PRTS把指向该重复控制对象的指针压入对象PDS(操作1208)。

d)再进一步,PRTS把包含在由重复控制对象所指向的重复对象中的表达式指针压入对象PDS(操作1210)。

强制遍历策略

在主题实施例的动态验证阶段110中,强制遍历策略(FTS)按如下所述方式来处理当前对象指针,如图13所示。FTS对象具有指向终结符对象的指针,已知为强制目标终结符指针。FTS的目的是下一个要遍历的终结符对象是由强制目标终结符指针所指向的那一个。

1、获取当前对象指针(操作1304)。

2、如果该当前对象指针指向终结符对象,则处理该终结符对象(操作1306和1320)。FTS把该终结符对象指针与该强制目标终结符指针做比较(操作1404)。如果这两个指针不同,则通知用户做了非法的强制(操作1416)。否则,FTS从策略PDS中弹出指向其FTS对象的指针(操作1406),然后删除该FTS对象(操作1408),然后使用存储在该终结符对象中的动作例程指针(如果有)来调用相应的动作例程(操作1410),并且然后等待所述动作例程返回(操作1412)。这在图14中说明。

3、如果该当前对象指针指向非终结符对象,FTS把指向存储在该非终结符对象中的表达式对象的指针压入对象PDS(操作1308和1322)。

4、如果该当前对象指针指向序列对象,FTS把该序列对象的表达式对象指针列表中的每个表达式对象指针按逆序压入对象PDS(即,在该序列尾部的表达式对象指针被首先压入到对象PDS,并且在该序列起始处的表达式对象指针被最后压入对象PDS)(操作1310和1324)。

5、如果该当前对象指针指向替换集合对象,则处理该替换集合对象(操作1312和1326)。FTS按下述来处理该当前对象指针。这通过图15中的操作1504、1506、1508、1510、1512、1514、1516、1518、1522和1524来说明。FTS调用TerminalCanBeFirst(强制目标终结符指针,当前对象指针)。为了说明的目的,该函数返回值在这里被记为FRV1。

如果该FRV1为真,FTS执行下述三个操作。

a)对该替换集合的替换对象指针列表中的每个替换对象指针,FTS调用TerminalCanBeFirst(强制目标终结符指针,替换对象指针),利用该结果形成TerminalCanBeFirst函数对其返回真值的替换对象指针的集合。

b)FTS形成在操作4(a)中所形成集合的两个子集:subset_1是指向具有非零权值的替换对象的替换对象指针的子集;subset_2是指向具有零权值的替换对象的替换对象指针的子集。

c)如果subset_1非空,FTS在subset_1中做加权伪随机选择,选定一个替换对象指针,并把该替换对象指针压入对象PDS(在加权伪随机选择处理中使用的权值取自subset_1中指针所指向的替换对象)。如果subset_1为空,FTS在subset_2中做非加权伪随机选择,选定一个替换对象指针,并把该替换对象指针压入对象PDS。

如果FRV1为假,FTS调用TerminalsCanBeAvoided(当前对象指针)。如果该函数的返回值为假,通知用户做了非法强制。

6、如果该当前对象指针指向替换对象,则处理该替换对象(操作1314和1328)。FTS把指向存储在该替换对象中的表达式对象的指针压入对象PDS中。

7、如果该当前对象指针指向重复对象,则处理该重复对象(操作1316、1330和1332)。FTS建立包含下述数据成员的重复控制对象。

a)指向该重复对象的指针。

b)重复计数器,其初始化成零。

c)重复目标,其可以是有限的数或是无限的(即大于重复计算器任何可能值的数值)。按下述方式初始化该重复目标。如果该重复对象的最大值是有限的值,FTS把重复目标设置成该重复对象的最小值和该重复对象的最大值之间(含该最大值)的伪随机整数。如果该重复对象的最大值是无限的,把该重复目标初始化成无限。

d)在建立重复控制对象之后,FTS把指向该对象的指针压入对象PDS。

8、如果该当前对象指针指向重复控制对象,则处理该重复控制对象(操作1318和1334)。FTS按下述来处理该当前对象指针,如图16中操作1604、1606、1608、1610、1612、1616、1618、1620和1622所示。

a)FTS把该重复控制对象的重复计数器与该重复控制对象所指向的重复对象中所包含的最大值做比较。如果因该重复控制对象的重复计数器已经达到由该重复控制对象所指向的重复对象中包含的最大值而认为该重复完成,则FTS删除该重复控制对象并跳过下面的操作7(b)-7(d)。

b)FTS调用TerminalCanBeFirst(强制目标终结符指针,当前对象指针)。如果该函数的返回值为真,FTS通过把该重复控制对象的重复计数器加1来更新该重复控制对象,然后把指向该重复控制对象的指针压入对象PDS,然后把该重复控制对象的表达式指针压入对象PDS,并且然后跳过下面的操作7(c)-7(d)。

c)FTS调用TerminalsCanBeAvoided(当前对象指针)。如果该函数的返回值为真,FTS删除该重复控制对象并跳过下面的操作7(d)。

d)FTS把该重复控制对象的重复计数器与该重复控制对象所指向的重复对象中所包含的最小值做比较。如果该重复控制对象的重复计数器已经达到该重复控制对象所指向的重复对象中所包含的最小值,则FTS删除该重复控制对象。否则,把做了非法强制通知给用户。

跳转遍历策略

在主题实施例的动态验证阶段110中,跳转遍历策略(STS)按下述方式来处理当前对象指针。这在图17中说明。STS对象具有指向终结符对象的指针,已知为跳转目标终结符指针。STS的目的是到达所述跳转目标终结符指针所指向的终结符对象,同时避免调用在达到该跳转目标终结符指针所指向的该终结符之前所遍历的任何其他终结符对象的动作例程。

1、获取当前对象指针(操作1704)。

2、如果该当前对象指针指向终结符对象,则处理该终结符对象(操作1706和1720)。STS把该终结符对象指针与所述跳转目标终结符指针做比较。如果这两个指针相同,STS从策略PDS中弹出指向其STS对象的指针,然后删除该STS对象,然后使用存储在该终结符对象中的动作例程指针(如果有)来调用相应的动作例程,并且然后等待所述动作例程完成。这通过图18中的操作1804、1806、1808、1810和1812来说明。

3、如果该当前对象指针指向非终结符对象,STS把指向存储在该非终结符对象中的表达式对象的指针压入对象PDS(操作1708和1722)。

4、如果该当前对象指针指向序列对象,STS把该序列对象的表达式对象指针列表中的每个表达式对象指针按逆序压入对象PDS(即,在该序列尾部的表达式对象指针被首先压入到对象PDS,并且在该序列起始处的表达式对象指针被最后压入对象PDS)(操作1710和1724)。

5、如果该当前对象指针指向替换集合对象,则处理该替换集合对象(操作1712和1726)。STS按下述来处理该当前对象指针。这通过图19中的操作1904、1906、1908、1910、1912、1914、1916和1918来说明。STS调用TerminalCanBeReached(跳转目标终结符指针,当前对象指针)。如果该函数返回真,STS执行下述三个操作。

a)对该替换集合的替换对象指针列表中的每个替换对象指针,STS调用TerminalCanBeReached(跳转目标终结符指针,替换对象指针),利用该结果形成TerminalCanBeReached函数对其返回真值的替换对象指针的集合。

b)STS形成在操作4(a)中所形成集合的两个子集:subset_1是指向具有非零权值的替换对象的替换对象指针的子集;subset_2是指向具有零权值的替换对象的替换对象指针的子集。

c)如果subset_1非空,STS在subset_1中做加权伪随机选择,选定一个替换对象指针,并把该替换对象指针压入对象PDS(在加权伪随机选择处理中使用的权值取自subset_1中指针所指向的替换对象)。如果subset_1为空,STS在subset_2中做非加权伪随机选择,选定一个替换对象指针,并把该替换对象指针压入对象PDS。

6、如果该当前对象指针指向替换对象,则STS把指向存储在该替换对象中的表达式对象的指针压入对象PDS中(操作1714和1728)。

7、如果该当前对象指针指向重复对象,则STS建立包含下述数据成员的重复控制对象(操作1716、1730和1732)。

a)指向该重复对象的指针。

b)重复计数器,其初始化成零。

c)重复目标,其可以是有限的数或是无限的(即大于重复计算器任何可能值的数值)。按下述方式初始化该重复目标。如果该重复对象的最大值是有限的值,STS把重复目标设置成该重复对象的最小值和该重复对象的最大值之间(含该最大值)的伪随机整数。如果该重复对象的最大值是无限的,把该重复目标初始化成无限。

在建立重复控制对象之后,STS把指向该对象的指针压入对象PDS。

8、如果该当前对象指针指向重复控制对象,则处理该重复控制对象(操作1718和1734)。STS按下述来处理该当前对象指针,如图20中操作2004、2006、2008、2010、2012和1616所示。

a)STS把该重复控制对象的重复计数器与该重复控制对象所指向的重复对象中所包含的最大值做比较。如果因该重复控制对象的重复计数器已经达到由该重复控制对象所指向的重复对象中包含的最大值而认为该重复完成,则STS删除该重复控制对象并跳过下面的操作7(b)。

b)STS调用TerminalCanBeReached(跳转目标终结符指针,当前对象指针)。如果该函数的返回值为假,STS删除该重复控制对象。否则,STS通过把该重复控制对象的重复计数器加1来更新该重复控制对象,然后把指向该重复控制对象的指针压入对象PDS,然后把该重复控制对象的表达式指针压入对象PDS。

NDA遍历机制控制

主题实施例包括下述三个函数,可由动作例程2110来调用,以控制NDA遍历机制2114。

1、当调用函数Force(强制目标终结符名),则建立新的强制遍历策略(FTS)对象,其包含指向该强制目标终结符的强制目标终结符指针。把指向新的FTS对象的指针压入策略PDS中。

2、当调用函数Skip(跳转目标终结符名),则建立新的跳转遍历策略(STS)对象,其包含指向该跳转目标终结符的跳转目标终结符指针。把指向新的STS对象的指针压入策略PDS中。

3、当调用函数AdjustLoopLimit(循环计数,循环深度),从顶部开始按顺序搜索对象PDS。只要一到达对应于该循环深度所表示深度的重复控制对象指针(其中0表示在搜索中所到达的第一个重复控制对象指针),则该搜索停止。如果在对象PDS中的重复控制对象指针不是至少与该循环深度值所要求的一样多,则产生报错。通过将其重复目标改变成与其重复计数器加上所给定的该循环计数相同的值,来修改该重复控制对象指针所指向的重复控制对象。

设备

图27示出了适合用作实施本发明主题实施例的计算装置的例子计算机系统。该计算系统可以按单个、按一对或按多个构成的组来使用。在第一种情况,可采用该计算系统利用所有编程命令来实施本发明,而在后者的情况下,每个系统可被赋予选定部分的编程命令来实施本发明的一个或多个选择的方面。当使用多个系统,这些系统可通过局域网和/或广域网直接相互耦合,所述网络可包括一个或多个公共网络,包括因特网。

如图所示,计算机系统2700包括一个或多个处理器2702和系统存储器2704。另外,计算机系统2700包括:海量存储装置2706(如磁盘、硬盘、CDROM等)、输入/输出装置2708(如键盘、鼠标控件等)以及通信接口2710(如到待测试系统的接口、网络接口卡、调制解调器等)。这些元件通过系统总线2712相互耦合,系统总线2712代表一个多或多个总线。在多总线的情况下,它们可通过一个或多个总线桥接器(未示出)来桥接。

这些元件中的每个执行本领域公知的传统功能。特别,系统存储器2704和海量存储器2706用于全部或部分地存储实现本发明的系统验证系统2714的编程命令的工作副本和持久副本。编程命令的持久副本可以通过发布介质(未示出)或通过通信接口2710(从发布服务器(未示出))加载到工厂内或现场内的海量存储器2706。这些元件2702至2712的构成是公知的,因而不再进一步说明。

结言

上述详细的说明书已经公开了利用处理NDA系统行为复杂性的新颖NDA技术来实现系统验证的实施例。我们公开的信息足以能够实施和使用本发明,而不需要进一步的创造和过多的实验。很显然,利用这里公开的原理,还可有本发明的其他实现方式,并且,本发明不仅可用于系统验证,还可用于需要处理NDA系统复杂性的任何环境。

尽管上述的详细说明包含有许多细节,但不应该认为这是对本发明范围的限制,而只是本发明的示例性实施例。许多其他的改型是可以的。

例如,相符性评估协议设计阶段可以通过用于获取验证信息的替换方法来代替、删节或补充,如从数据库加载验证模块,或从系统说明书提取验证信息。

例如,编译阶段可以通过由动作例程2110表示的提供功能性的替换方法来代替、删节或补充,例如解释指令而不是编译它们,或由替换数据库的表示功能性的模板参考。

例如,用VID表示的信息可以按某种替换方式或多个方式来表示,如图形信息获取系统、用户写入模块或由系统说明书的生成。

例如,按动态验证行程初始化文件表示的信息可以按某种替换方式或多种方式来表示,如验证测试台中的自动器,或调用硬件仿真器时指定的选项。

例如,待验证的系统可以表示成物理设备,如微处理器、自动控制系统或航空控制系统。

例如,DUT 118可以包括诸如数据库管理和/或存取系统的多线程软件系统,诸如工业过程控制操作程序的实时软件系统,或通用软件操作系统。

例如,如果在动态验证行程2100中通过仿真器使用DUT 118,该仿真器可以是多线程的。

例如,验证环境可包括用软件、硬件竞争器或加速器、用于连接到物理设备的测试接口机制、嵌入式程序执行环境和/或设备、或多个这种机制的混合或组合所实现的仿真器。

例如,在DUT 118上执行的验证操作不必限于读写0和1,而可以包括任意的数据表示,包括多状态逻辑、整数、实数和浮点数。

例如,在DUT 118上执行的验证操作不必限于软件操作,而可以包括物理动作,如阀的打开和关闭,诸如用于温度、压力、湿度等的传感器的状态和/或值的读取,或物理动作的触发。

例如,NDA 2104可以不必用显式的自动器形式来表示,而是可以用某种充分等价的形式来表示,如一个或多个图、表等。

例如,NDA 2104可以不必是带有终结符、非终结符等的文法型,而是可以用节点或状态、弧或转换等来表示。

例如,NDA 2104可以具有嵌入到其中的、用于扩展图表示的附加信息,如影响循环展开的控制表达式。

例如,NDA 2104可以具有嵌入到其中的、可传递给动作例程2110的附加信息,如NDA遍历1002当前状态的表示。

例如,NDA构造原语的集合可以由所提供的替换、序列等来扩展,以包括另外的原语,如单发事项(single-occurrence-of-item)或常规表达式算符。

例如,可以考虑NDA构造原语集合排除所提供原语集合中的项,因利用其余的项的重新组合仍然可导出等价的表达能力。

例如,动作例程2110可以不与终结符相关联,而是与节点、状态、弧、转换等所提到的替换NDA表示相关联。

例如,不仅可以利用所述的机制来修改NDA 2104,还可以提供机制来向该NDA添加弧或从其删除弧、向该NDA添加节点或状态或从其删除节点或状态、或添加或删除或改变动作例程和/或连接动作例程的点,由此来修改NDA 2104。

例如,待选择替换的标识可以通过用户提供的调用函数的结果来表示,而不是使用固定的加权系数。该函数可具有对其可用的任何范围的信息,用于驱动它的计算。该函数可因每个替换、替换集合或NDA2104的不同而不同。

例如,可以提供伪随机、强制和跳转之外的其他遍历策略,如基于覆盖的策略或可能在用户控制下的确定性策略。

例如,替换的选择不仅可以受单遍历策略的影响,还可以受组合多遍历策略结果的方法的影响。可以有许多组合方法,如基于优先级的、加权平均的、或多数投票的。

例如,可通过替换的手段输入NDA 2104或其部分,如表示自动器的图形用户接口、基于文本的文法文件、不同于C++的编程语言中的构造方法,或从规范验证说明书和/或语言的翻译。

例如,除了所述的WAIT_FOR同步命令,还可以通过如分支与合并(fork and join)构造、旗语方法、中断信令或投票等方法来同步NDA2104与DUT 118。

例如,NDA遍历1002不仅可以通过上述的机制来约束,而且还可以通过请求待遍历的后续终结符的任意集合或待遍历的后续终结符的序列或序列集合来约束。

例如,NDA遍历1002可以根据用户函数提供的“优良性”度量结果来选择。

例如,NDA遍历机制2114可以具有利用嵌入在NDA 2104中的另外知识来施加的遍历约束。

例如,可以不使用TerminalCanBeReached、TerminalCanBeFirst和TerminalsCanBeAvoided函数,而是例如通过具有回溯或处理NDA2104的投机选择以添加允许的选择信息来完成从替换集合中的替换选择。

例如,可以不使用重复控制对象,而例如通过把循环体展开成直线实现,或通过利用嵌套函数调用的分解实现来完成循环处理。

例如,可以不使用对象PDS,而是例如通过随遍历的进展向NDA添加历史信息,或把NDA转换成隐式或显式包含NDA图信息的硬件、软件或混合机来完成NDA 2104的NDA遍历1002。

例如,可以不使用策略PDS,而是利用优先级队列或控制的替换流,如策略的嵌套执行来完成遍历策略的构造。

例如,遍历策略可以不是显式表达的,而是例如实现成NDA遍历机制2114的隐含属性。

例如,可以由函数调用、进程间通信调用、跳转、长跳转或任何其他可指定软件执行控制流的机制来实现命令。

例如,不仅可通过线程,而且还可以通过单独的进程、轻量进程或任何其他的提供环境的执行机制或其他的保持计算状态的手段来完成各种计算任务的执行。

例如,各种计算任务的执行不仅可发生在单处理器环境,而且可跨越多处理器或共享存储器或其他通信信息的处理元件,可跨越按网络或其他通信信息配置的多个单独机器等。

例如,除了全局的资源池(即资源集合2204),还可以有可用的局部或受限存取的资源池。

例如,资源集合2204可以有在动态验证112期间添加给它的资源或多个资源。

例如,资源集合2204可以有在动态验证112期间从它删除的资源或多个资源。

例如,给定资源种类的数量可以在动态验证112期间增加或减少。

例如,在动态验证112期间,资源或多个资源的特性可以改变。

例如,在动态验证112期间,资源或多个资源可以添加特性或删除特性。

例如,在一个时刻,或者可以按“全部或没有”的主张,或者可以按子集,来请求资源的集合。

例如,如果当请求时,资源或多个资源不可用,请求者可以排队等待,直到它们变得可用。

例如,资源请求者的排队可以按优先级来做,或根据其他的请求排序基础,以及按先后顺序。

例如,可以强制资源拥有者释放所述资源,如果其他请求者这样要求的话。

例如,可以分层组织资源,其中,可以请求一部分资源,而不是全部资源。

例如,提到了用C++的编程,但还可以用如C、Java、Pascal、ADA等来编程。

例如,提到了与硬件描述语言仿真器NC-VerilogTM的交互。也可以使用其他的硬件描述语言仿真器,如ModelSimTM、VCSTM等。

例如,提到了与硬件描述语言仿真器的交互,但与其他种类的仿真器的交互也是可以的,如行为仿真器、指令集合仿真器、门级仿真器等。

上述所有都是这种情况,在每个方面所说明的细节都是示例性的,而不是限制性的,这里所公开的本发明的范围不是由这些细节来确定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号