一种设计代码中替换单元的验证方法、装置和设备与流程

文档序号:13804700阅读:179来源:国知局
一种设计代码中替换单元的验证方法、装置和设备与流程

本发明涉及仿真验证技术领域,尤其涉及一种设计代码中替换单元的验证方法、装置和设备。



背景技术:

目前,针对开发人员在对设计代码进行更新换代时,通常会存在对代码中的部分代码进行替换的操作,例如,在实现功能相同的情况下,利用适用高频时钟的代码替换适用低频时钟的代码,在执行替换操作后,还需要验证替换后的代码的功能是否与替换前的代码的功能一致,因为只有在一致时才能表明简单的代码的正确性,因此,当对设计代码中的部分代码进行替换时,对替换部分的代码是否影响原设计代码的功能进行验证,以及验证替换部分的代码是否能够实现预期的功能是非常必要的。

此外,现有技术中在对替换后的代码进行验证时,通常是对替换后的整个设计代码进行验证,可能只会验证到替换单元的部分功能,这种验证方法针对性较差及覆盖不够全面;此外,现有的验证环境,由于环境组件庞大,测试用例数量多而且复杂,对替换后的整个设计代码进行验证时,耗时较多。

因此,如何有效减少验证工作量,提高验证效率是亟待解决的技术问题之一。



技术实现要素:

本发明实施例提供一种设计代码中替换单元的验证方法、装置和设备,用以解决现有技术中验证替换单元的工作量高和验证效率低的问题。

第一方面,本发明实施例提供一种设计代码中替换单元的验证方法,包括:

获取设计代码层级结构中的替换单元,并确定所述替换单元对应的自测试代码,所述自测试代码用于验证所述替换单元;

如果确定出所述设计代码层级结构中替换单元的数量不超过预设阈值,则确定所述设计代码层级结构中包含所述替换单元的模块名称的上一层单元,并将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件;否则将所述设计代码和所述自测试代码执行编译处理得到可执行文件;

利用所述可执行文件进行仿真验证,并根据所述自测试代码确定所述替换单元的验证结果。

第二方面,本发明实施例提供一种设计代码中替换单元的验证装置,包括:

获取模块,用于获取设计代码层级结构中的替换单元,并确定所述替换单元对应的自测试代码,所述自测试代码用于验证所述替换单元;

编译处理模块,用于如果确定出所述设计代码层级结构中替换单元的数量不超过预设阈值,则确定所述设计代码层级结构中包含所述替换单元的模块名称的上一层单元,并将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件;否则将所述设计代码和所述自测试代码执行编译处理得到可执行文件;

确定模块,用于利用所述可执行文件进行仿真验证,并根据所述自测试代码确定所述替换单元的验证结果。

第三方面,本发明实施例提供一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令用于执行本申请提供的设计代码中替换单元的验证方法。

第四方面,本发明实施例提供一种电子设备,包括:

至少一个处理器;以及

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

所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本申请提供的设计代码中替换单元的验证方法。

本发明有益效果:

本发明实施例提供的设计代码中替换单元的验证方法、装置和设备,首先获取设计代码层级结构中的替换单元,并确定所述替换单元对应的自测试代码;如果确定出所述设计代码层级结构中替换单元的数量不超过预设阈值,则确定所述设计代码层级结构中包含所述替换单元的模块名称的上一层单元,并将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件;否则将所述设计代码和所述自测试代码执行编译处理得到可执行文件;并利用所述可执行文件进行仿真验证,并根据所述自测试代码确定所述替换单元的验证结果。采用本发明提供的方法,利用自测试代码对所述替换单元进行验证,避免了现有技术中通过对替换后的整个设计代码进行验证来验证替换单元所带来的验证不全面且验证效率低的问题,此外,本发明提供的验证方法,由于提出的自测试代码是针对所述替换单元和所述替换单元的上一层单元进行设计的,编译时虽然需要编译从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码,但相对于编译整个替换后的设计代码来说,能够减少编译时间;此外,在验证时无需人工编写或准备测试用例,自测试代码会自动生成验证所述替换单元所需的测试用例,有效降低了验证人员的工作量,同时还有效缩减了验证替换单元的验证时间。

进一步地,由于所述自测试代码是用于验证所述替换单元的,也就是说在仿真验证时自测试代码中的各个组件只是针对替换单元编写测试代码,而不是针对替换后的整个设计代码编写测试代码,测试代码设计相对简单,有效降低了验证人员的编写代码的工作量,且由于测试代码只是针对替换单元编写,还可以加快验证替换单元的验证速度。

进一步地,本发明实施例将从属于所述上一层单元的所有层级中的单元执行编译处理,也就是说可能会对替换单元的同一层单元以及同一层单元包含的下一层单元也执行编译处理,虽然编译了一些对验证替换单元无关的代码,但无需验证人员从上一层单元中人为筛选屏蔽这些单元的实例化代码段,通过自测试代码可以断开替换单元与同一层单元之间的连线,避免了以上人为操作造成的验证工作不准确情况的发生,此外也无需验证人员在编写自测试代码时,考虑如何屏蔽同一层单元,有效降低了验证人员的工作量。

再者,当确定出所述设计代码层级结构中替换单元的数量超过预设阈值,也就是替换单元数量较多的情况下,虽然对整个设计代码和所述自测试代码执行了编译处理,但相比于现有技术中对设计代码和所有验证代码执行编译处理外,由于自测试代码只是针对替换单元编写的,同样会缩短编译所占用的时间,同时验证人员也无需理清楚替换单元的同一层单元,有效避免了人工筛选设计代码中数量较多的替换单元的同一层单元所造成的失误,同时也有效减轻了验证人员的工作负担。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1a为本发明实施例一提供的设计代码中替换单元的验证方法的流程示意图;

图1b为本发明实施例一提供的自测试代码的原理示意图;

图1c-1为本发明实施例一提供的替换后的设计代码dut包含的4个单元的连接示意图;

图1c-2为本发明实施例一提供的仿真编译后替换后的设计代码dut包含的替换单元与自测试代码之间的连接关系的示意图之一;

图1d-1为本发明实施例一提供的替换后的设计代码dut1包含的4个单元的连接示意图;

图1d-2为本发明实施例一提供的仿真编译后替换后的设计代码dut1包含的替换单元与自测试代码之间的连接关系的示意图;

图1e为本发明实施例一提供的仿真编译后替换后的设计代码dut包含的替换单元与自测试代码直接的连接关系的示意图之二;

图2a为本发明实施例一提供的设计代码a1的层级结构的结构示意图;

图2b为本发明实施例一提供的替换单元数量较多的设计代码层级结构的结构示意图;

图3为本发明实施例二提供的设计代码中替换单元的验证装置的结构示意图;

图4为本发明实施例四提供的实施设计代码中替换单元的验证方法的电子设备的硬件结构示意图。

具体实施方式

本发明实施例提供一种设计代码中替换单元的验证方法、装置和设备,用以解决现有技术中验证替换单元的工作量高和验证效率低的问题。

通常情况下,设计代码分层设计,设计代码分层设计后形成设计代码层级结构,层级结构中的一个节点,可以称为一个单元。一个单元,可以为功能单元如ip核,还可以为存储单元如所有ram等。设计代码文件可以将多个单元的代码或一个单元的代码存储在一个文件中,一个设计代码文件可以包括同一层的各个单元的代码,也可以包括不同层的单元的代码,也可以是只包括一个单元的代码,也可以包括相互之间没有连接关系的单元的代码。

如果对层级结构中某个单元进行替换,则会对以该单元为最高层级的所有子层级及更低层级的单元进行替换。本发明实施例中将设计代码形成的层级结构中需要替换的一个节点称之为替换单元。

本发明实施例提供的设计代码中替换单元的验证方法可以应用于仿真验证环境中,即由验证人员采用本发明提供的方法对替换单元的功能进行验证。

需要说明的是,本发明实施例中自测试代码包含的指示组件、激励信号生成组件、输出信号采集组件和检查组件,以及参考模型组件,这些组件实质上也是代码,只是为了便于区分自测试代码中各个部分的功能进行命名的,并没有其他实际含义。

以下结合说明书附图对本发明的优选实施例进行说明,应当理解,此处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。

实施例一

如图1a所示,为本发明实施例一提供的设计代码中替换单元的验证方法的流程示意图,可以包括以下步骤:

s11、获取设计代码层级结构中的替换单元,并确定所述替换单元对应的自测试代码。

其中,所述自测试代码用于验证所述替换单元。

具体实施时,在获取设计代码层级结构中的替换单元时,一方面可以由开发人员交付验证人员替换文件列表,验证人员由此获取设计代码层级结构中的替换单元。

需要说明的是,设计代码是由大量代码文件构成,由于开发人员设计代码时不会将所有代码均写在一个文件中,如果都写到一个文件中后期维护查找比较复杂。因此采用分层级设计代码时,可以将设计代码划分多个层级,由此可以产生多个不同层级的单元。这样一来后期便于维护,同样在此基础上开发人员利用替换单元替换某一个代码文件中的代码时,查找比较方便。

此外,在利用替换单元替换设计代码中的代码时,替换前后模块名称及其实例化的名称不变,且替换前后模块包含的输入信号名称和输出信号名称不变,只是对该模块实现的功能进行调整。

具体实施时,在实际开发过程中,存在一些经常被替换的代码,相应的存在相应的替换单元,为此验证人员预先为这些替换单元编写自测试代码。由于在同一个设计代码中模块名称对应的单元是唯一的,因此,可以利用模块名称和自测试代码的宏定义名称来建立替换单元与自测试代码之间的对应关系,在确定出设计代码层级结构中存在替换单元时,可以根据所述替换单元的模块名称从所述对应关系中找到与所述替换单元模块名称对应的自测试代码的宏定义名称,该宏定义名称相当于打开或屏蔽其对应的自测试代码的开关,当定位到该宏定义名称时,也就自然查找到所述宏定义名称对应的自测试代码。

具体地,可以在本地建立一个列表,所述列表用于存储模块名称与自测试代码宏定义名称之间的对应关系,则在执行步骤s11时,即在获知设计代码层级结构中存在替换单元时,确定所述替换单元对应的自测试代码的宏定义名称,具体包括:确定所述替换单元的模块名称,并从本地存储的模块名称与自测试代码的宏定义名称之间的对应关系,确定所述替换单元的模块名称对应的自测试代码的宏定义名称。需要说明的是,由于替换单元可能存在功能相近的情况,具体在验证时只需要编写一段自测试代码即可验证这些功能相近的多个替换单元,因此所述列表中可以有多个模块名称对应同一个自测试代码的宏定义名称的情况。

s12、判断所述设计代码层级结构中替换单元的数量是否超过预设阈值,如果否,则执行步骤s13;否则执行步骤s15。

较佳地,所述预设阈值可以但不限于为10。

s13、确定所述设计代码层级结构中包含所述替换单元的模块名称的上一层单元。

具体实施时,由于设计代码文件是分层级编写的,所述替换单元通常都存在包含所述替换单元的模块名称的上一层单元,而且所述上一层单元常用于编写替换单元与其同一层单元之间的连接关系,也就是说上一层单元用于实例化所述替换单元及其同一层单元。在实际应用中只有将替换单元进行实例化后,替换单元才会发挥作用。因此,在对所述替换单元进行验证时,需要确定包含所述替换单元的模块名称的上一层单元。

需要说明的是,目前编写的设计代码一般都是分层级进行编写的,设计代码不只有一级而是分为不同层级的代码文件,也就是说替换单元一般都会存在包含所述替换单元的模块名称的上一层单元。

s14、将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件。

具体实施时,当所述设计代码层级结构中替换单元的数量不超过预设阈值时,也就是说替换单元相对较少情况下,验证人员只需付出较少的工作量即可轻松找到各个替换单元的上一层单元和各个替换单元的同一层单元,以及各个同一层单元包含的下一层单元等等。在此情况下对替换单元验证时,可以将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件。

也就是说在执行编译处理时,需要确定从属于所述替换单元的上一层单元的所有层级中的单元,例如:当所述上一层单元中除了包含所述替换单元的模块名称,还包含其他模块名称的且与所述替换单元处于同一层的同一层单元,且所述替换单元还包括下一层单元的模块名称,以及与所述替换单元处于同一层的同一层单元也包含下一层单元的模块名称,则执行编译处理时,需要对所述上一层单元、所述替换单元、所述替换单元的同一层单元、所述替换单元的下一层单元和所述同一层单元的下一层单元执行编译处理。依次类推,如果下一层单元还包括下下一层单元的模块名称,则还需对下下一层单元执行编译处理等等。相对于现有技术中针对替换后的整个设计代码和所有验证代码执行编译处理来说,本发明执行编译处理的只是将从属于所述上一层单元的所有层级中的代码和自测试代码执行编译处理,编译时间是大大缩减的;此外,由于仿真验证所耗费的时间在验证过程中占主要部分,采用本发明提供的验证替换单元的方法,由于自测试代码只是对替换单元进行仿真验证而不是针对整个替换后的设计代码,需要仿真的单元也大大缩减,从而可以有效缩短仿真验证时间。

例如,设计代码层级结构如图2a所示,具有层级结构的设计代码划分了四个层级,a1为顶层级、a21为第二层级、a31和a32为第三层级、k41、k42和k43为第四层级。具体实施时,当a32为替换单元时,则在确定出替换单元a32的自测试代码后,确定出当前设计代码中只有一个替换单元,即替换单元的数量不超过预设阈值时,先确定出设计代码a1层级结构中包含所述替换单元a32的模块名称的上一层单元为a21,则将从属于所述上一层单元a21的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理,首先确定从属于所述上一层单元a21的所有层级中的单元包括:所述替换单元a32、所述替换单元的同一层单元a31、所述替换单元a32的下一层单元a42和a43、所述同一层单元a31的下一层单元a41,则执行编译处理的单元包括:所述替换单元a32、所述替换单元的同一层单元a31、所述替换单元a32的下一层单元a42和a43、所述同一层单元a31的下一层单元a41、上一层单元a21、所述自测试代码。如果所述下一层单元a42还包括下下一层单元,则还需要将下下一层单元执行编译处理。

具体实施时,为了更好地理解本发明中在执行编译处理时需要将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码共同执行编译处理,本发明上一层单元实现求和功能为例进行说明。上一层单元中代码为:

modulesum1(inputa,inputb,outputc)

unit1u1(.n1(a),.n2(b),.sum(c))

endmodule

由上述代码可知,该层单元中只是对模块unit1进行了实例化,实例化名称为u1,同时描述了u1的输入输出与u1的上一层级的模块sum1的输入输出的连接关系,u1的实际功能在替换单元unit1中编写,例如,unit1的代码为:

moduleunit1(inputn1,inputn2,outputsum)

sum=n1+n2;

endmodule

具体实施时,由于sum1已经编写好输入a和b,及输出c与u1的参数n1、n2和sum的连接关系,也就是说sum1所处层级只编写连线关系,具体实现求和功能的代码在替换单元unit1的文件中编写,因此,为了对unit1,即替换单元进行实例化,需要将sum1和unit1这两个层级均执行编译处理。在对替换单元unit1进行验证时,还需要对替换单元unit1的自测试代码执行编译,由此才能发挥自测试代码的验证功能。

较佳地,所述上一层单元中除了包含所述替换单元的模块实例化外,还可能包含与所述替换单元处于同一层的其它模块名称的实例化,在执行编译时,可以只编译所述替换单元、所述上一层单元和所述自测试代码,但需要从所述上一层单元中剔除掉除所述替换单元以外的其它单元,此操作需要人工的参与,可能会带来屏蔽不准确等问题。同时在编写自测试代码时还需要考虑如何屏蔽同一层单元,费时费力。尤其对于一些芯片,可能上一层单元中包含几十~几百个模块,如果让验证人员逐个筛选,不仅繁琐而且易出错。此外,对于验证人员来说,要做到尽量少的修改设计代码。因此,本发明提出在执行编译处理时,除了编译替换单元和上一层单元外,还需要编译与所述替换单元处于同一层的其它模块名称对应的同一层单元。这样一来虽然对同一层单元执行了编译处理,但所述自测试代码只是针对所述替换单元进行编写的,同一层单元虽然执行了编译,但相比于现有技术对所述替换后的整个设计代码和所有验证代码执行编译处理,其编译时间是缩减的,而且不会影响所述替换单元验证结果的准确性;此外,将所述同一层单元执行编译处理,无需验证人员从上一层单元中手动剔除这些单元,避免了剔除不准确情况的发生;此外,也无需验证人员在编写自测试代码时考虑如何屏蔽同一层单元,有效降低了验证人员的工作量。通过本发明提供的自测试代码可以断开替换单元与同一层单元之间的连线,因此即使编译了同一层单元也不会影响替换单元验证结果的准确性。

较佳地,在确定出所述替换单元的自测试代码以及确定出包含所述替换单元的模块名称的上一层单元后,可以将所述自测试代码添加至所述上一层单元中,然后将添加了自测试代码的上一层单元和从属于所述上一层单元的所有层级中的单元执行编译处理,由此可以得到可执行文件。

较佳地,所述自测试代码为利用宏定义的方式编写得到的。

具体地,所述自测试代码包含宏定义名称和测试区域,其中,所述宏定义名称可以单独存储在一个文件中,以及所述测试区域包括测试代码和布线代码,在这种情况下,所述自测试代码可以分两个文件,分别为:宏定义名称所在的文件和所述测试区域对应的文件。

较佳地,所述测试区域中的测试代码也可以单独存储在一个文件中,其文件名可以与宏定义名称一致,在这种情况下相当于所述自测试代码分三个文件,分别为宏定义名称所在的文件、测试代码文件和布线代码文件。此外,在此情况下查找测试代码文件的方法与查找宏定义名称的方法一致,也可以根据预先建立的替换单元的模块名称与宏定义名称的对应关系,查找到模块名称对应的测试代码文件。

具体实施时,在将自测试代码中宏定义名称存储到独立的文件中时,可以将多个自测试代码包含的宏定义名称存储到一个单独的文件中。例如,n个自测试代码包含的宏定义名称存储到一个独立的文件中时,其格式可参考表1所示:

表1

具体在执行编译处理时,首先找到自测试代码中的宏定义名称“、define……”,如果找到的宏定义名称前没有“//”,则表明需要利用该宏定义名称定为到相应的测试区域,并执行测试区域所能实现的功能。当找到的宏定义名称前有“//”,则表明无需利用该宏定义名称定为到相应的测试区域,也就不需要执行测试区域的功能。

进一步地,本发明将宏定义名称单独存储在一个文件中,这样一来便于验证人员对宏定义名称进行统一管理,宏定义名称前无论是否有注释“//”,都不影响上一层单元中代码的修改,只需对宏定义名称进行变动。具体地,所述自测试代码为利用宏定义的方式编写的,当所述测试区域中的测试代码没有以独立文件形式存储时,其自测试代码如下所示:

具体实施时,以将所述测试区域均添加至所述上一层单元中为例进行说明,所述自测试代码只有仿真验证过程中有效,当将所述测试区域写到所述替换单元的上一层单元中时,在仿真验证结束后,为了保证设计代码正常执行,需要在宏定义名称“`define……”前边加上“//”,即需要找到存储该自测试代码的宏定义名称的文件,然后将上述自测试代码的宏定义名称“`defineself_test”修改成“//`defineself_test”,由此在除仿真验证场合外,均不执行自测试代码,也就是说不影响设计代码的功能实现。

具体实施时,在执行步骤s14时,即将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件,具体包括:

当所述测试代码没有单独存储在一个文件中时,在步骤s11确定出所述替换单元的自测试代码后,可以将所述自测试代码中的测试区域添加至所述上一层单元中,并将所述添加了测试区域的上一层单元和从属于所述上一层单元的所有层级中的单元执行编译处理得到可执行文件。

或者,当自测试代码中测试区域包含的测试代码单独存储在一个文件中时,在步骤s11中确定出所述替换单元对应的自测试代码后,只需将所述测试区域中的除测试代码以外的代码添加至所述上一层单元中,然后将以独立文件形式存储的测试代码、添加了所述测试区域中的除测试代码以外的代码的上一层单元和从属于所述上一层单元的所有层级中的单元添加到编译任务列表中,然后共同执行编译处理得到可执行文件,无需将所述测试代码添加至所述上一层单元,在编译时只需选中需要编译的文件执行编译即可,并将独立存储的宏定义名称设置成全局可见形式后即可在编译时实现自测试代码的功能。

具体地,本发明中的自测试代码可以不添加到所述替换单元的上一层单元中,直接以独立文件形式参与编译,但这样一来多一个文件,而且不方便第三方管理。因此,为了便于管理,本发明将自测试代码添加至所述替换单元的上一层单元中,一方面,替换单元的上一层单元用于编写替换单元与同一层单元之间的布线连接,也即上一层单元用于对替换单元进行实例化,例如上述sum1求和例子,替换单元为unti1,只有将unit1进行实例化之后,才能发挥unit1的求和功能,替换单元unit1类似于c语言中的函数,而实例化u1则类似于c语言中的函数调用。与替换单元的实例化在上一层单元中类似,只有将自测试代码添加在上一层单元中,才能对自测试代码例化,进而实现自测试代码的功能。此外,上一层单元通常用于实例化和布线,相对替换单元本身的逻辑,上一层单元的逻辑要简单的多,且代码结构清晰,比较适合存放自测试代码。再者,自测试代码是针对替换单元编写的,设计比较简单,存放在上一层单元中也不妨碍上一层单元的理解。

具体实施时,可以按照下述方法将独立存储的宏定义名称设置成全局可见的形式:

方法一:可以将自测试代码包含的宏定义名称所在的文件加入到编译列表中同添加了测试区域的上一层单元、从属于上一层单元的所有层级中的单元执行编译处理。

具体地,当将宏定义名称所在的文件加入到编译列表执行编译处理时,需要将不需要编译的宏定义名称前加“//”。

方法二:将所述自测试代码包含的宏定义名称从存储宏定义名称的文件中提取出来,然后将提取出来的宏定义名称加到编译指令中。

具体地,在将宏定义名称加入编译指令之前,需要把宏定义名称通过脚本转换为符合编译软件或编译工具能够识别的格式,然后再将执行格式转换后的宏定义名称加入到编译指令中。

s15、将所述设计代码和所述自测试代码执行编译处理得到可执行文件。

具体实施时,在步骤s12判断结果为是时,即所述替换单元数量超过预设阈值时,参考图2b所示。图2b中存在多个替换单元,已超过预设阈值,如果直接采用步骤s13提供的方法,虽然可以实现对替换单元的验证,但需要验证人员理清楚各个替换单元的同一层单元及同一层单元的下一层单元,数量较多,这对验证人员来说比较困难。因此,为了避免验证人员在替换单元较多的情况下理清楚替换单元、上一层单元和同一层单元所对应的文件列表所带来的工作量较大且准确度低的情况的发生,本发明步骤s15中采用对整个设计代码和所述替换单元的自测试代码进行编译处理,验证人员无需筛选文件列表,降低了验证人员的工作量。

具体实施时,当所述自测试代码中测试区域包含的测试代码没有以单独的文件形式存在时,则在执行步骤s15时,具体包括:针对每一替换单元,确定设计代码层级结构中包含该替换单元的模块名称的上一层单元,然后将该替换单元的自测试代码中的测试区域添加至所述上一层单元中,并将添加了所有替换单元的测试区域的整个设计代码执行编译处理得到可执行文件。

较佳地,当所述测试区域中的测试代码以独立的文件形式存在时,则执行步骤s15时,具体包括:针对每一替换单元,在确定出设计代码层级结构中包含该替换单元的模块名称的上一层单元后,将所述测试区域中除测试代码以外的代码添加至该替换单元的上一层单元中,并将添加了所述测试区域中除测试代码以外的代码的整个设计代码执行编译处理得到可执行文件。

具体实施时,步骤s15中将自测试代码添加至替换单元的上一层单元中的原因与步骤s14中一样,不再赘述。

在步骤s14或s15得到可行性文件后,在执行步骤s16之前,先对自测试代码的功能进行描述,以下详细介绍之。后续介绍所述自测试代码时,所述自测试代码只包含两个文件,一个是宏定义名称所在的文件,一个是测试区域所在的文件,所述测试区域中的测试代码没有以独立的文件形式存在。

本发明提供的步骤s15编译方法,是针对设计代码中替换单元数量非常多的,而且层级关系比较复杂的情况下,例如,批量替换ram,一个soc设计中的ram往往有数百个,如果再利用步骤s14提供的方法,需要验证人员去筛选文件然后执行编译,比较耗费验证人员的时间,也容易出失误。这种情况,就不筛选文件列表来编译了,而是把设计代码所有的文件都进行编译。

此外,原有的验证环境是针对整个soc或者ip核进行验证的,它们所关注的验证点更偏向顶层/高层,通常它们不可能对每个ram有完整的验证,而且现有技术对替换单元进行验证时,编译的是全部设计文件+原有验证文件。而本发明步骤s15执行编译的是全部设计文件+自测试代码,自测试代码相对原有验证(环境)文件,量少且针对性好。因此能够提高编译和仿真的速度,同时增加验证的严谨性。

综上可知,采用本发明步骤s15执行编译处理得到可执行文件时,虽然将整个设计代码和自测试代码执行了编译处理,但与现有技术对整个设计代码和所有验证代码执行编译处理相比,由于自测试代码只是针对替换单元进行编写的,而现有技术中的所有验证代码是针对整个设计代码进行编写的,由此可得自测试代码编译所耗费的时间远小于编译所有验证代码所耗费的时间,也就是说即使对整个设计代码和自测试代码执行编译,相当于现有技术来说,本发明步骤s15所需的编译时间也是缩减的。此外,在利用步骤s15得到的可执行文件对替换单元进行验证时,由于自测试代码只是针对替换单元进行编写的,其验证结果的准确性相当于现有技术来说也是大大提高的。

较佳地,所述自测试代码包含指示组件、激励信号生成组件、输出信号采集组件和检查组件;以及

所述指示组件用于指示切断所述替换单元与所述替换单元的同一层单元之间的连接关系,并指示将所述激励信号生成组件与所述替换单元的输入端连接,指示将所述替换单元的输出端与所述输出信号采集组件连接,以及指示将所述检查组件分别与所述激励信号生成组件和所述输出信号采集组件连接。

具体实施时,由于该替换单元一般都存在上一层单元,且上一层单元写明了所述替换单元与所述替换单元的同一层单元的连线关系,为了实现利用自测试代码验证所述替换单元,需要利用自测试代码首先断开所述替换单元与其他单元或模块的连线,因此需要在找到上一层单元后,一方面在确定出所述替换单元的自测试代码后,可以将所述自测试代码包含的测试区域添加到包含所述替换单元的模块名称的上一层单元中,以使后续执行编译处理时,能够利用测试区域的功能断开所述替换单元与其他单元或模块之间的布线连接。例如,当前的设计代码文件分两个层级,顶级为dut文件,下一层级有四个子文件,u1,u2,u3和ru,其中ru为替换单元,则需要将ru的自测试代码中的测试区域写到dut文件中,在执行编译时,测试区域可以断开将ru与u1、u2、u3之间的连接关系。

具体实施时,所述自测试代码的原理示意图可以参考图1b所示,图1b中自测试代码包含指示组件,记为ind,激励信号生成组件,可以记为stm;输出信号采集组件,记为mon,以及还包含检查组件,记为checker。需要说明的是,本发明中描述的自测试代码包含指示组件、激励信号生成组件、输出信号采集组件以及检查组件可以理解为:自测试代码中的宏定义名称相当于指示组件,测试区域包含激励信号生成组件、输出信号采集组件以及检查组件。

具体实施时,在将所述自测试代码执行编译处理后,所述自测试代码中的ind可以断开替换单元与同一层单元之间的连接,然后将所述自测试代码中的stm的输出连接至所述替换单元的输入端,以及将所述自测试代码中的mon的一端连接至所述替换单元的输出端,实现从所述替换单元采集输出结果。例如某一设计代码dut包含4个单元,dut为顶层级,用于编写4个单元之间的连接关系;而第一单元unit1、第二单元unit2、第三单元unit3和第四单元unit4,这四个单元处于一个层级,即均处于第二层级,其中替换单元replacedunit替换了第四单元unit4,则替换后的设计代码dut中各个单元的连接关系如图1c-1所示,由于replacedunit处于第二层级中,因此在执行编译处理时,需要将顶层级dut单元、unit1、unit2、unit3和replacedunit及replacedunit对应的自测试代码均执行编译处理,即:可以将自测试代码的测试区域添加至dut中,然后与unit1、unit2、unit3和replacedunit共同执行编译处理,连接关系如图1c-2所示。由于自测试代码中指示组件是用于指示断开replacedunit与第二单元和第三单元的连接关系,以及指示stm和mon与replacedunit建立连接关系,故没有在图1c-2中展示指示组件。在没有将自测试代码执行编译处理时,替换单元replacedunit与第二单元和第三单元正常情况下是连接在一起的,在将所述自测试代码执行编译处理后,自测试代码可以断开所述替换单元与同一层单元之间的连线关系,即:所述自测试代码中的指示组件切断了所述replacedunit与unit2和unit3之间的连接关系,然后将stm的输出端与replacedunit的输入端连接,并将replacedunit的输出端与mon的输入端连接,由此使得mon可以采集replacedunit的输出结果;以及图1c-2中checker分别连接了stm的输入端和mon的输出端。由该段描述可知,采用本发明提供的方法,虽然编译时对所述替换单元的同一层单元执行了编译处理,但本发明提供的自测试代码可以断开替换单元与同一层单元之间的布线连接,因此即使编译了同一层单元也不会影响替换单元验证结果的准确性。

较佳地,另一设计代码dut1,划分了三个层级,顶层级、第一层级和第二层级,参考图1d-1所示,而替换单元replacedunit处于第二层级,第一单元unit1、第二单元unit2和第三单元unit3处于第一层级,其中,第三单元unit3包含replacedunit的模块名称;顶层级dut1文件用于描述unit1~unit3之间的连线关系。由于替换单元replacedunit的模块名称包含在第一层级中的第三单元unit3中,因此在采用本发明提供的方法执行编译处理时,只需将unit3和自测试代码,以及replacedunit执行编译处理即可,unit1和unit2无需执行编译处理,即:可以将自测试代码添加至所述unit3中连同replacedunit执行编译处理,连线关系参考图1d-2所示。同样,自测试代码中的指示组件也没有显示在图1d-2中,但编译处理后,所述自测试代码中的指示组件同样能够断开replacedunit与unit3之间的连线关系,然后将stm的输出端与replacedunit的输入端连接,并将replacedunit的输出端与mon的输入端连接,在仿真验证时使得mon可以采集replacedunit的输出结果;此外,由于checker分别连接了replacedunit的输入端和mon的输出端,因此可以利用checker的输出结果对replacedunit的功能进行验证。

进一步地,在图1d-1中如果unit3还包括其它单元的模块名称,则在执行编译处理时,还需要将unit3包含的与所述替换单元处于同一层的同一层单元共同执行编译处理。

需要说明的是,自测试代码在步骤s14和步骤s15中的功能是一样的,上述两个例子在步骤s14和步骤s15中均适用,在此不再单独说明。

s16、利用所述可执行文件进行仿真验证,并根据所述自测试代码确定所述替换单元的验证结果。

较佳地,所述检查组件用于对激励信号生成组件生成的激励信号和输出信号采集组件从所述替换单元采集到的输出结果进行比较;

结合图1c-2所示,由于checker分别与stm和mon相连,则可以使得checker将输入至replacedunit的激励信号与mon从replacedunit采集到的基于输入的激励信号输出的输出结果进行比较,基于比较结果可以得到replacedunit的验证结果。

具体实施时,根据所述自测试代码确定所述替换单元的验证结果,具体包括:

如果确定出所述采集到的输出结果与所述激励信号之间的关系符合替换单元的功能,则确定所述替换单元的验证结果为验证通过;如果确定出所述采集到的输出结果与所述激励信号之间的关系不符合所述替换单元的功能,则确定所述替换单元的验证结果为验证不通过。

具体实施时,在验证所述替换单元的功能时,参考图1c-2所示,stm将产生的激励信号一方面输入至replacedunit,replacedunit根据自身代码的功能基于输入的激励信号输出相应的输出结果,该输出结果被输出信号采集组件mon采集到并传送至检查组件checker;另一方面stm还将产生的激励信号传输至检查组件checker,由此检查组件能够根据接收到的激励信号与接收到的输出结果,确定所述替换单元replacedunit的验证结果。本发明中由于编译时只对替换单元、所述自测试代码和上一层单元进行编译,因此,在仿真验证时自测试代码中的各个组件只需要针对替换单元编写测试代码即可,而不是针对替换后的整个设计代码编写测试代码,测试代码设计相对简单,有效降低了验证人员的编写代码的工作量,且由于测试代码只是针对替换单元编写,还可以加快验证替换单元的验证速度。例如,本发明中只需要针对替换单元编写激励信号生成组件stm,而不是针对替换后的整个设计代码编写激励信号生成组件,使得针对替换单元编写的激励信号生成组件更加简单且针对性较强。

具体地,还以dut设计代码为例,替换前的unit4能够实现数据校验功能,在利用replacedunit替换unit4后,需要判断replacedunit是否能实现数据校验功能,则checker在接收到激励信号和所述replacedunit的输出结果后,则根据输入的激励信号和输出结果来判断replacedunit是否具有数据校验功能,如果是,则说明replacedunit验证通过,否则验证不通过。也就是说本发明实施例在确定所述替换单元的验证结果为验证通过时,则需要确定出所述激励信号与所述输出结果之间的关系能够满足所述替换单元的功能,反之,如果确定出所述采集到的输出结果与所述激励信号之间的关系不符合所述替换单元的功能,则确定所述替换单元的验证结果为验证不通过。较佳地,所述替换单元的功能可以但不限于同所述被替换单元的功能一致。例如,如果根据所述检查组件的仿真结果确定出所述激励信号与所述输出结果之间的关系满足所述被替换单元的功能,则可以确定所述替换单元的功能与被替换单元的功能一致。反之则确定所述替换单元的功能与被替换单元的功能不一致。

为了更好地理解本发明,以replacedunit为一块普通的ram为例进行说明,stm会生成针对该ram所有地址的写入数据,例如该ram大约为1024*64bit,则地址应该是从0~1023,也就是说stm为ram的每一地址都写入64比特的数据,如果ram能够实现存储功能,则mon从ram中可以采集到所有地址存储的数据,由于检查组件checker还能够获取stm生成的1024个64比特的数据,因此,checker比对每一个地址stm产生的数据与mon从ram读取的数据是否一致,如果一致则表明ram的功能验证通过,反之,验证不通过。本实施例中stm向ram中每一地址写入的64比特数据即为激励信号。

较佳地,对于一些输入激励信号,验证人员无法快速预测出替换单元的输出结果的情况,例如替换单元中涉及算法处理的,如果所述自测试代码只包含stm、checker和mon,则需要对验证人员的验证经验提出较高的要求。为了使得经验不足的新手也能够快速实现对替换单元的验证,本发明对所述自测试代码进行了调整,即所述自测试代码还可以包括参考模型组件,可以记为referencemodel,参考图1e所示:

所述指示组件还用于指示将所述参考模型组件分别与所述激励信号生成组件和所述检查组件连接;以及

所述检查组件用于对所述参考模型组件的输出结果和输出信号采集组件从所述替换单元采集到的输出结果进行比较;以及

在此基础上执行步骤s15时,根据所述自测试代码确定所述替换单元的验证结果,具体包括:

如果确定出所述采集到的输出结果与所述参考模型组件的输出结果一致,则确定所述替换单元的验证结果为验证通过;如果确定出所述采集到的输出结果与所述参考模型组件的输出结果不一致,则确定所述替换单元的验证结果为验证不通过。

具体实施时,当所述自测试代码中包含参考模型组件时,所述参考模型组件实现的功能与所述替换单元的功能一样,但编写的代码与所述替换单元不同,也就是说利用简单的高级语言编写与所述替换单元功能相同的代码。因此当所述自测试代码中包含所述参考模型组件时,结合图1e所示,在自测试代码中添加了参考模型组件referencemodel时,stm产生并输出的激励信号一方面输入至referencemodel,然后将referencemodel的输出结果传输至checker;另一方stm产生并输出的激励信号还传输至replacedunit中,mon同样将replacedunit的输出结果传输至检查组件checker中,由于referencemodel的功能与替换单元的功能一样,因此,基于checker的仿真验证结果,如果确定出referencemodel输出的结果与mon采集到的结果即replacedunit的输出结果一致,则确定所述替换单元replacedunit的验证结果为验证通过;否则,则确定所述替换单元replacedunit的验证结果为验证不通过。

本发明实施例提供的自测试代码可以只是针对替换单元进行测试,避免了采用现有技术中直接对替换后的设计代码文件进行仿真验证所造成的验证功能不全面等问题。

此外,在某些设计中,我们会常常需要对其一些单元进行替换,而这种替换不会影响到整个设计的外部接口变化。为了应对这种情况,提高替换单元的验证效率,本发明提供的自测试代码可以避免影响到整个设计的外部接口。例如,某设计代码文件中包含多块ram,某一块ram1被替换掉变成另一个ram2,本发明提供的自测试代码直接对ram2进行验证,不会改变设计代码的外部接口,也就是说整个子设计功能依然完好。

本发明实施例一提供的设计代码中替换单元的验证方法,获取设计代码层级结构中的替换单元,并确定所述替换单元对应的自测试代码,所述自测试代码用于验证所述替换单元;然后如果确定出所述设计代码层级结构中替换单元的数量不超过预设阈值,则确定所述设计代码层级结构中包含所述替换单元的模块名称的上一层单元,并将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件;否则将所述设计代码和所述自测试代码执行编译处理得到可执行文件;并利用所述可执行文件进行仿真验证,并根据所述自测试代码确定所述替换单元的验证结果。采用本发明提供的方法,直接利用自测试代码对所述替换单元进行验证,可以高效的对替换单元进行验证,避免了现有技术中通过对替换后的整个设计代码进行仿真验证所带来的工作量较高且验证不够全面等问题,同时由于本发明只是由于提出的自测试代码是针对所述替换单元和所述替换单元的上一层单元进行设计的,编译时虽然需要编译从属于所述上一层单元的所有层级中的单元和所述自测试代码,但相对于编译整个替换后的设计代码来说,能够减少编译时间;此外,在验证时无需人工编写或准备测试用例,自测试代码会自动生成验证所述替换单元所需的测试用例,有效降低了验证人员的工作量,同时还有效缩减了验证替换单元的验证时间。进一步地,由于所述自测试代码是用于验证所述替换单元的,也就是说在仿真验证时自测试代码中的各个组件只是针对替换单元编写,而不是针对替换后的整个设计代码编写,设计相对简单,有效降低了验证人员的编写代码的工作量,且由于自测试代码只是针对替换单元编写,还可以加快验证替换单元的验证速度。进一步地,本发明实施例将从属于所述上一层单元的所有层级中的单元执行编译处理,也就是说可能会对替换单元的同一层单元以及同一层单元包含的下一层单元也执行编译处理,虽然编译了一些对验证替换单元无关的代码,但无需验证人员从上一层单元中人为筛选屏蔽这些单元的实例化代码段,通过自测试代码可以断开替换单元与同一层单元之间的连线,避免了以上人为操作造成的验证工作不准确情况的发生,此外也无需验证人员在编写自测试代码时,考虑如何屏蔽同一层单元,有效降低了验证人员的工作量。再者,当确定出所述设计代码层级结构中替换单元的数量超过预设阈值,也就是替换单元数量较多的情况下,虽然对整个设计代码和所述自测试代码执行了编译处理,但相比于现有技术中对设计代码和所有验证代码执行编译处理外,由于自测试代码只是针对替换单元编写的,同样会缩短编译所占用的时间,同时验证人员也无需理清楚替换单元的同一层单元,有效避免了人工筛选设计代码中数量较多的替换单元的同一层单元所造成的失误,同时也有效减轻了验证人员的工作负担。

实施例二

基于同一发明构思,本发明实施例中还提供了一种设计代码中替换单元的验证装置,由于上述装置解决问题的原理与设计代码中替换单元的验证方法相似,因此上述装置的实施可以参见方法的实施,重复之处不再赘述。

如图3所示,为本发明实施例二提供的设计代码中替换单元的验证装置的结构示意图,包括获取模块21、编译处理模块22和确定模块23,其中:

获取模块21,用于获取设计代码层级结构中的替换单元,并确定所述替换单元对应的自测试代码,所述自测试代码用于验证所述替换单元;

编译处理模块22,用于如果确定出所述设计代码层级结构中替换单元的数量不超过预设阈值,则确定所述设计代码层级结构中包含所述替换单元的模块名称的上一层单元,并将从属于所述上一层单元的所有层级中的单元、所述上一层单元和所述自测试代码均执行编译处理得到可执行文件;否则将所述设计代码和所述自测试代码执行编译处理得到可执行文件;

确定模块23,用于对所述可执行文件进行仿真验证,并根据所述自测试代码确定所述替换单元的验证结果。

较佳地,所述自测试代码为利用宏定义的方式编写得到的,以及所述自测试代码包含指示组件、激励信号生成组件、输出信号采集组件和检查组件;以及

所述指示组件用于指示切断所述替换单元与所述替换单元的同一层单元之间的连接关系,并指示将所述激励信号生成组件与所述替换单元的输入端连接,指示将所述替换单元的输出端与所述输出信号采集组件连接,以及指示将所述检查组件分别与所述激励信号生成组件和所述输出信号采集组件连接。

进一步地,所述检查组件用于对激励信号生成组件生成的激励信号和输出信号采集组件从所述替换单元采集到的输出结果进行比较;以及

所述确定模块23,具体用于如果确定出所述采集到的输出结果与所述激励信号之间的关系符合所述替换单元的功能,则确定所述替换单元的验证结果为验证通过;如果确定出所述采集到的输出结果与所述激励信号之间的关系不符合所述替换单元的功能,则确定所述替换单元的验证结果为验证不通过。

优选地,所述自测试代码还包括参考模型组件;以及

所述指示组件还用于指示将所述参考模型组件分别与所述激励信号生成组件和所述检查组件连接;以及

所述检查组件用于对所述参考模型组件的输出结果和输出信号采集组件从所述替换单元采集到的输出结果进行比较;以及

所述确定模块23,还用于如果确定出所述采集到的输出结果与所述参考模型组件的输出结果一致,则确定所述替换单元的验证结果为验证通过;如果确定出所述采集到的输出结果与所述参考模型组件的输出结果不一致,则确定所述替换单元的验证结果为验证不通过。

为了描述的方便,以上设计代码中替换单元的验证装置的各部分按照功能划分为各模块(或单元)分别描述。当然,在实施本发明时可以把各模块(或单元)的功能在同一个或多个软件或硬件中实现。

实施例三

本申请实施例三提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的设计代码中替换单元的验证方法。

实施例四

图4是本发明实施例四提供的实施设计代码中替换单元的验证方法的电子设备的硬件结构示意图,如图4所示,该电子设备包括:

一个或多个处理器310以及存储器320,图4中以一个处理器310为例。

执行设计代码中替换单元的验证方法的电子设备还可以包括:输入装置330和输出装置340。

处理器310、存储器320、输入装置330和输出装置340可以通过总线或者其他方式连接,图4中以通过总线连接为例。

存储器320作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,如本申请实施例中的设计代码中替换单元的验证方法对应的程序指令/模块/单元(例如,附图3所示的获取模块21、编译处理模块22和确定模块23)。处理器310通过运行存储在存储器320中的非易失性软件程序、指令以及模块/单元,从而执行服务器或者智能终端的各种功能应用以及数据处理,即实现上述方法实施例设计代码中替换单元的验证方法。

存储器320可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据设计代码中替换单元的验证装置的使用所创建的数据等。此外,存储器320可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器320可选包括相对于处理器310远程设置的存储器,这些远程存储器可以通过网络连接至设计代码中替换单元的验证装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置330可接收输入的数字或字符信息,以及产生与设计代码中替换单元的验证装置的用户设置以及功能控制有关的键信号输入。输出装置340可包括显示屏等显示设备。

所述一个或者多个模块存储在所述存储器320中,当被所述一个或者多个处理器310执行时,执行上述任意方法实施例中的设计代码中替换单元的验证方法。

上述产品可执行本申请实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本申请实施例所提供的方法。

本申请实施例的电子设备以多种形式存在,包括但不限于:

(1)移动通信设备:这类设备的特点是具备移动通信功能,并且以提供话音、数据通信为主要目标。这类终端包括:智能手机(例如iphone)、多媒体手机、功能性手机,以及低端手机等。

(2)超移动个人计算机设备:这类设备属于个人计算机的范畴,有计算和处理功能,一般也具备移动上网特性。这类终端包括:pda、mid和umpc设备等,例如ipad。

(3)便携式娱乐设备:这类设备可以显示和播放多媒体内容。该类设备包括:音频、视频播放器(例如ipod),掌上游戏机,电子书,以及智能玩具和便携式车载导航设备。

(4)服务器:提供计算服务的设备,服务器的构成包括处理器、硬盘、内存、系统总线等,服务器和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。

(5)其他具有数据交互功能的电子装置。

实施例五

本申请实施例五提供了一种计算机程序产品,其中,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,其中,当所述程序指令被计算机执行时,使所述计算机执行本申请上述方法实施例中任一项设计代码文件中替换单元的验证方法。

本申请的实施例所提供的设计代码文件中替换单元的验证装置可通过计算机程序实现。本领域技术人员应该能够理解,上述的模块划分方式仅是众多模块划分方式中的一种,如果划分为其他模块或不划分模块,只要设计代码文件中替换单元的验证装置具有上述功能,都应该在本申请的保护范围之内。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1