用于验证被测试模块的方法以及验证系统与流程

文档序号:26953213发布日期:2021-10-16 02:34阅读:253来源:国知局
用于验证被测试模块的方法以及验证系统与流程

1.本公开涉及电子系统的仿真验证,特别涉及被测试模块的验证方法、验证系统、电子设备和存储介质。


背景技术:

2.在对电子系统进行开发时,需要对设计的电子系统中的模块进行验证以正确实现模块要完成的功能。
3.在此部分中描述的方法不一定是之前已经设想到或采用的方法。除非另有指明,否则不应假定此部分中描述的任何方法仅因其包括在此部分中就被认为是现有技术。类似地,除非另有指明,否则此部分中提及的问题不应认为在任何现有技术中已被公认。


技术实现要素:

4.根据本公开的一个方面,提供了一种验证系统,包括:处理器模型,所述处理器模型被配置成:在由第一编程语言实现的测试用例的运行过程中,经由接口函数调用由第二编程语言实现的操作函数,以实现所述测试用例涉及的处理器操作,获取基于所述处理器操作得到的测试输入;以及被测试模块,所述被测试模块用于响应于所述测试输入而生成测试输出。
5.根据本公开的另一方面,还提供了一种用于验证被测试模块的方法,包括:在由第一编程语言实现的测试用例的运行过程中,经由接口函数调用由第二编程语言实现的操作函数,以实现所述测试用例涉及的处理器操作;基于所述处理器操作生成用于验证所述被测试模块的测试输入;以及获取所述被测试模块响应于所述测试输入而生成的测试输出。
6.根据本公开的另一方面,还提供了一种电子设备,包括:处理器;以及存储程序的存储器,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行如前所述的方法。
7.根据本公开的又一方面,还提供了一种存储程序的非暂态计算机可读存储介质,所述程序包括指令,所述指令在由电子设备的处理器执行时,致使所述电子设备执行如前所述的方法。
8.根据本公开的又一方面,还提供了一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现如前所述的方法。
9.利用本公开提供的验证方法和系统,可以方便地将第一编程语言实现的测试用例用于第二编程语言描述的被测试模块以生成测试输出,从而在对测试用例进行修改迭代时,能够方便地实现测试用例的编译和复用。
附图说明
10.附图示例性地示出了实施例并且构成说明书的一部分,与说明书的文字描述一起用于讲解实施例的示例性实施方式。所示出的实施例仅出于例示的目的,并不限制权利要
求的范围。在所有附图中,相同的附图标记指代类似但不一定相同的要素。
11.图1示出了根据本公开的实施例的验证系统的一种示例性的架构图;
12.图2示出了根据本公开的实施例的验证系统的另一种示例性的架构图;
13.图3示出了根据本公开的实施例的用于验证被测试模块的方法的示例性流程图;
14.图4示出了根据本公开的用于验证被测试模块的方法的另一种示例性流程图;
15.图5是示出根据本公开的示例性实施例的电子设备的示例的框图。
具体实施方式
16.在本公开中,除非另有说明,否则使用术语“第一”、“第二”等来描述各种要素不意图限定这些要素的位置关系、时序关系或重要性关系,这种术语只是用于将一个元件与另一元件区分开。在一些示例中,第一要素和第二要素可以指向该要素的同一实例,而在某些情况下,基于上下文的描述,它们也可以指代不同实例。
17.在本公开中对各种所述示例的描述中所使用的术语只是为了描述特定示例的目的,而并非旨在进行限制。除非上下文另外明确地表明,如果不特意限定要素的数量,则该要素可以是一个也可以是多个。此外,本公开中所使用的术语“和/或”涵盖所列出的项目中的任何一个以及全部可能的组合方式。
18.在电子设计(如芯片设计)的过程中,需要通过仿真证明电子系统的方案设计的正确性。为了验证所设计的电子系统中各个模块是否能够正常工作,可以采用仿真的方式验证电子系统中的一个或多个功能模块的逻辑功能是否正确。示例性地,上述功能模块可以是音频处理模块、视频处理模块或者任何通过电路设计能够实现的功能模块。
19.在本公开中,上述待验证的模块可以被称作被测试模块(design under test,dut)。为了验证被测试模块的逻辑功能,可以根据待验证的逻辑功能的需求编写相应的测试用例的代码。测试用例可以用于生成提供给被测试模块的测试输入。被测试模块可以响应于测试输入的激励而启动相应的操作以实现特定功能,并生成实现特定功能的中间数据/信号以及结果数据/信号。可以基于被测试模块响应于测试输入的激励而生成的数据/信号与期望的参考数据/信号之间的差别来判断被测试模块的功能是否正常。
20.在一些示例中,在仿真验证的过程中,被测试模块自身可以包括处理器以及至少一个功能模块。这种情况下,可以利用被测试模块的处理器能够运行的编程语言(如c语言)编写测试用例的代码。可以使用编译器对测试用例的代码进行处理并生成用于加载到处理器的内存中的二进制代码。由此,可以使用真实的处理器执行测试用例的代码并向被测试模块提供需要的测试输入。
21.然而,上述利用真实处理器来执行仿真验证的方式依赖于处理器模块自身的可用性。在一些情况下,可能需要在电子系统中的处理器尚未设计完毕的情况下提前验证一些模块的功能。此时,可能难以通过真实的处理器来执行用于仿真验证的代码。
22.此外,在利用待测试模块包含的真实的处理器执行仿真验证的代码时,由于待测试模块的处理器在执行访问内存指令和/或译码运算等处理器操作时需要一定的时间开销,可能会增加仿真验证耗费的时间。进一步地,在仿真验证的过程中被测试模块可能需要与环境中的其他模块进行交互(如读取存储器中存储的文件等),这同样需要处理器真实执行对测试环境中其他模块进行访问,这将进一步增加仿真验证耗费的时间。
23.在另一些示例中,测试用例的代码是使用硬件描述语言来实现的,可以使用基于硬件描述语言实现的处理器总线功能模型来实现仿真验证。在这种情况下,通过对测试用例、处理器模型以及被测试模块整体进行编译来得到可执行文件。这样的可执行文件可以由计算机的处理器(如中央处理器cpu、图形处理器gpu等)或可编程逻辑器件(如现场可编程门阵列fpga、复杂可编程逻辑器件cpld等)来执行。在这种情况下,每一次需要对测试用例进行修改时,需要对测试用例、处理器模型以及被测试模块重新进行整体编译。由于每次编译硬件描述语言的可执行文件所需的时间较长,这使得每一次对测试用例进行迭代的时间周期变长。
24.为了缩短仿真验证的迭代周期,本公开提供了一种新的用于验证被测试模块的方法和验证系统。下面将结合附图描述本公开的原理。
25.图1示出了根据本公开的实施例的验证系统100的一种示例性的架构图。
26.如图1所示,验证系统100可以包括处理器模型120以及被测试模块130。其中,处理器模型120可以被配置成在由第一编程语言实现的测试用例的运行过程中,经由接口函数调用由第二编程语言实现的操作函数以实现测试用例涉及的处理器操作,以及获取基于上述处理器操作得到的测试输入以用于对被测试模块的验证。被测试模块130响应于上述测试输入而生成测试输出。
27.测试用例110可以是由第一编程语言实现的测试代码。在一些实施例中,第一编程语言可以是通用编程语言,如c语言、c++语言等。通过运行测试用例110可以生成用于验证被测试模块130的逻辑功能的测试输入。
28.被测试模块130可以是当前设计的电子系统中用于执行特定功能的模块。其中,被测试模块130可以是寄存器级别(register transistor level,rtl)的设计。
29.在一些实施例中,被测试模块130可以是单独的功能模块,也可以是相互作用以实现特定功能的多个功能模块的组合。在一些示例中,被测试模块130可以是系统级芯片(system on chip,soc)本身或系统级芯片上的一个或几个功能子模块的组合。
30.处理器模型120可以用于在测试用例的运行过程中,调用操作函数122以实现测试用例110中涉及的处理器操作。如图1所示,处理器模型120可以包括接口函数121以及操作函数122。其中,图1中示出的箭头表示命令调用的方向。当图1中示出的各个模块和函数之间需要数据交互时,可以以与图1中示出的箭头方向相同或不同的方式进行数据交互。其中,根据测试用例的需求,在需要访问被测试模块和测试环境时,可以利用接口函数121调用操作函数122以实现相应的处理器操作。其中,测试环境指的是为了完成测试所必需的硬件、软件、设备、数据等。在一些实施例中,可以基于直接编程接口dpi或编程语言接口pli实现接口函数121。在一些实现方式中,接口函数121可以包括用于调用不同名称的函数的多个指令,其中每个指令用于调用对应的函数代码的运行。
31.操作函数122可以由第二编程语言实现。在一些实施例中,第二编程语言可以是硬件描述语言,如vhdl(very

high

speed integrated circuit hardware description language,超高速集成电路硬件描述语言)语言、verilog语言、systemverilog语言等。
32.在一些实现方式中,操作函数122可以实现在用于实现测试验证涉及的处理器操作的测试基础类。
33.基于所述操作函数122实现的处理器操作可以得到用于被测试模块130的测试输
入。
34.在一些实施例中,处理器操作可以包括存储设备访问操作和测试环境访问操作中的至少一项。
35.在一些示例中,存储设备可以指的是被测试模块的内存和/或寄存器。这里所说的存储设备访问操作可以包括对被测试模块的存储设备(如内存和/或寄存器)中存储的数据的前门访问(如读取数据或写入数据)。这里的前门访问指的是通过真实的物理操作对存储设备中的数据进行读取和/或写入。
36.在一些示例中,处理器操作还可以包括测试环境访问操作。这里的测试环境访问操作可以用于获取验证被测试模块所需的其他数据/信号。例如,测试环境访问操作可以包括获取测试环境中其他模块生成或存储的数据/信号。又例如,测试环境访问操作还可以包括对被测试模块的存储设备(如内存和/或寄存器)中存储的数据的后门访问。
37.基于处理器操作得到的测试输入可以用于配置被测试模块的功能和/或访问状态。在一些实施例中,可以通过寄存器的读写实现处理器模型对被测试模块的配置。寄存器的比特位可以用于被测试模块的功能描述。例如,可以将用于寄存器的多个比特位划分成不同的域,其中每个域可以包括单个比特位或多个比特位,并每个域可以对应于一项独立的功能。
38.在一些实施例中,用于被测试模块的测试输入可以包括对被测试模块的寄存器配置。通过将被测试模块的寄存器配置成不同的内容,可以实现指示被测试模块实现不同的功能。本领域技术人员可以根据实际情况对寄存器的配置内容进行自定义。
39.响应于寄存器被配置,被测试模块将执行对应于寄存器所配置的内容的功能,并生成相应的测试输出。在一些实施例中,测试输出包括所配置的功能的结果数据/信号和所配置的功能的中间数据/信号中的至少一项。
40.通过比较被测试模块生成的测试输出是否匹配用于被测试模块的参考输出可以确定被测试模块是否通过验证。在一些实施例中,验证系统100可以包括单独的验证模块用于判断被测试模块是否通过验证。在另一些实施例中,可以在处理器模型中设置验证模块以用于判断被测试模块是否通过验证。
41.其中,被测试模块的参考输出可以是根据针对被测试模块设计的功能而确定的期望输出。如果被测试模块生成的测试输出匹配用于被测试模块的参考输出,可以认为被测试模块的逻辑功能是正确的,因此可以认为被测试模块通过验证。如果被测试模块生成的测试输出不匹配参考输出,则可能需要对被测试模块和/或测试用例进行调整和修改。
42.在图1中示出的验证系统的工作过程中,可以将(基于第二编程语言如systemverilog的)处理器模型120与被测试模块130一起编译成一个单独的可执行文件,测试用例可以被单独编译成共享库文件(如.so文件)。这样,在后续对测试用例进行修改和迭代的过程中,每次迭代时仅需要对测试用例的代码进行重新编译,而无需对处理器模型和被测试模块的代码进行重新编译。
43.利用本公开提供的验证系统,通过在处理器模型中提供相应的接口函数,可以方便地在由第一编程语言实现的测试用例的运行过程中调用由第二编程语言实现的操作函数来实现处理器操作的仿真。由此,可以方便地实现通过例如c语言实现的测试代码对硬件描述语言实现的被测试模块的验证。通过对基于第二编程语言的模型和基于第一编程语言
的测试用例分别进行编译,可以避免在修改测试用例时对处理器模型和被测试模块进行重新编译,从而能够缩短验证工作中修改测试用例需要的时间周期。
44.图2示出了根据本公开的实施例的验证系统200的一种示例性的架构图。
45.如图2所示,验证系统200可以包括处理器模型220以及被测试模块230。
46.测试用例210可以是由第一编程语言实现的测试代码。在一些实施例中,第一编程语言可以是通用编程语言,如c语言,c++语言等。通过利用处理器模型220运行测试用例210可以生成验证被测试模块230的逻辑功能的测试输入。
47.处理器模型220可以包括接口函数221、操作函数222以及总线驱动223。其中,接口函数221可以用于第一编程语言所在的域与第二编程语言所在的域之间的调用。如前所述,第一编程语言可以是通用编程语言如c语言,c++语言等,第二编程语言可以是硬件描述语言如如vhdl语言、verilog语言、systemverilog语言等。
48.接口函数221可以用于对不同编程语言描述的函数名称进行统一并在不同的编程语言之间实现切换。接口函数221可以仅包含被调用的函数名称而不包含实现涉及验证的函数本身的代码指令。可以基于直接编程接口dpi或编程语言接口pli实现接口函数121。
49.如图2所示,测试用例210可以包括主函数211以及中断服务函数212。其中,主函数211是用于生成用于验证被测试模块230的测试输入的代码。中断服务函数212是用于根据来自被测试模块230的中断信号实现中断机制的代码。利用中断服务函数212,测试用例可以获取指示被测试模块的特定功能执行完成(或至少暂时执行完成)的中断信号,而无需在测试用例中设计用于监视被测试模块的执行是否完成。
50.在一些实施例中,可以响应于来自被测试模块230的触发信号启动测试用例的运行。响应于针对被测试模块的上电启动或复位重启操作,被测试模块230可以产生触发信号(也可以称为复位信号)。上述触发信号可以由被测试模块230内部的复位模块(未示出)产生。
51.如图2所示,响应于触发信号,被测试模块230可以在处理器模型220内部触发用于验证过程的主线程。经由接口函数221,第二编程语言(如systemverilog)域中的主线程可以调用第一编程语言(如c语言)域中的主函数(如函数名为test_main的主函数)的运行以启动由第一编程语言实现的测试用例的运行。
52.在测试用例210中的主函数运行的过程中,当需要访问被测试模块的存储设备和/或测试环境中其他模块时,测试用例210可以调用处理器模型220提供的接口函数221,并经由接口函数221对用于实现接口函数所代表的处理器操作的操作函数222进行调用。操作函数222中是由第二编程语言实现的用于实现处理器操作的代码。通过调用操作函数222可以实现测试用例涉及的处理器操作。在一些实施例中,操作函数可以是用于实现测试验证涉及的处理器操作的测试基础类。
53.被测试模块230可以是配置有总线接口的模块,如系统级芯片soc。其中,可以经由总线接口向被测试模块提供测试输入。在图2示出的示例中,被测试模块可以包括至少一个功能模块(如图2中示出的功能模块1、功能模块2、功能模块3)和中央处理器cpu,其中至少一个功能模块和cpu之间通过总线相互连接并实现数据通信。在图2示出的示例中,处理器模型220可以经由总线驱动223连接到被测试模块中的cpu的总线端口上并接替cpu的行为。对于被测试模块中的各个功能模块来说,可以经由总线接收来自处理器模型220的输入,其
工作模式与经由总线接收被测试模块中的cpu的输入是相同的。
54.在一些实施例中,被测试模块230可以经由总线端口接收处理器模块220产生的测试输入并执行与测试输入对应的功能。基于处理器操作得到的测试输入可以用于配置被测试模块的功能和/或访问状态。在一些实施例中,可以通过寄存器的读写实现处理器模型对被测试模块的配置。
55.当被测试模块230完成相应功能的执行时,响应于功能执行完毕,被测试模块130可以生成指示功能执行完成的中断信号并在处理器模型220内触发中断线程。与主线程的调用类似,处理器模型中的中断线程可以用于经由接口函数221实现对第一编程语言域中的测试代码中的中断服务函数int的调用,以向测试用例提供被测试模块完成执行相应功能的指示。上述中断信号可以是由被测试模块130中的一个功能模块生成的。
56.通过比较被测试模块生成的测试输出是否匹配用于被测试模块的参考输出可以确定被测试模块是否通过验证。如果被测试模块生成的测试输出匹配用于被测试模块的参考输出,可以认为被测试模块的逻辑功能是正确的,因此可以认为被测试模块通过验证。否则,则需要对被测试模块和/或测试用例进行修改。
57.利用本公开提供的验证系统,由于测试用例是用例如c语言的通用编程语言编写的,可以将测试用例编译为动态链接库。当对测试用例进行改动时,只需要重新对测试用例进行编译,而无需对被测试模块和用于实现处理器操作的测试基础类进行重新编译,能够显著缩短测试用例的迭代周期。此外,对于包含处理器的被测试模块(如soc),通过处理器模型接替被测试的处理器的运行,可以在真实的处理器尚未集成之前提前开始针对其他模块的验证。进一步地,通过测试用例调用测试环境访问函数,可以方便地实现对测试环境中的其他模块的访问以及存储设备的后门访问。又进一步地,由于测试用例是由通用编程语言实现的,在针对硬件的仿真验证完成后,测试用例还可以用于后续的软件验证,实现测试用例的有效复用。
58.图3示出了根据本公开的实施例的用于验证被测试模块的方法300的示例性流程图。
59.如图3所示,在步骤s302中,在由第一编程语言实现的测试用例的运行过程中,可以经由接口函数调用由第二编程语言实现的操作函数,以实现测试用例涉及的处理器操作。
60.测试用例可以是由第一编程语言实现的测试代码。在一些实施例中,第一编程语言可以是通用编程语言,如c语言,c++语言等。
61.操作函数可以由第二编程语言实现。在一些实施例中,第二编程语言可以是硬件描述语言,如vhdl语言、verilog语言、systemverilog语言等。在一些示例中,操作函数可以实现在用于实现测试验证涉及的处理器操作的测试基础类。
62.在测试用例的运行过程中,可以调用操作函数以实现测试用例中涉及的处理器操作。例如,根据测试用例的需求,可以利用接口函数调用操作函数以实现相应的处理器操作。在一些实施例中,可以基于直接编程接口dpi或编程语言接口pli实现接口函数。
63.接口函数可以仅包含被调用的函数名称而不包含实现涉及验证的函数本身的代码指令。函数的功能由被调用的操作函数中的代码指令来实现。
64.在一些实施例中,处理器操作可以包括存储设备访问操作和测试环境访问操作中
的至少一项。这里所说的存储设备访问操作可以包括对被测试模块的存储设备(如内存和/或寄存器)中存储的数据的前门访问(如读取数据或写入数据)。这里的前门访问指的是通过真实的物理操作对存储设备中的数据进行读取和/或写入。在一些示例中,处理器操作还可以包括测试环境访问操作。例如,测试环境访问操作可以包括获取测试环境中其他模块生成或存储的数据/信号。又例如,测试环境访问操作还可以包括对被测试模块的存储设备(如内存和/或寄存器)中存储的数据的后门访问。
65.在步骤s304中,可以基于所述处理器操作生成用于验证被测试模块的测试输入。
66.基于处理器操作得到的测试输入可以用于配置被测试模块的功能和/或访问状态。在一些实施例中,可以通过寄存器的读写实现处理器模型对被测试模块的配置。通过将被测试模块的寄存器配置成不同的内容,可以实现指示被测试模块实现不同的功能。
67.在步骤s306中,可以获取被测试模块响应于测试输入而生成的测试输出。
68.在一些实施例中,被测试模块可以是配置有总线接口的模块,如系统级芯片soc。在步骤s306中,可以经由总线接口向被测试模块提供测试输入,并经由总线接口获取被测试模块生成的测试输出。在另一些实施例中,用于被测试模块的测试输入和测试输出也可以不经过总线接口进行数据通信。
69.在一些实施例中,响应于寄存器被配置,被测试模块将执行对应于寄存器所配置的内容的功能,并生成相应的测试输出。在一些实施例中,测试输出包括所配置的功能的结果数据/信号和所配置的功能的中间数据/信号中的至少一项。
70.通过比较被测试模块生成的测试输出是否匹配用于被测试模块的参考输出可以确定被测试模块是否通过验证。如果被测试模块生成的测试输出匹配用于被测试模块的参考输出,可以认为被测试模块的逻辑功能是正确的,因此可以认为被测试模块通过验证。
71.利用本公开提供的验证系统,通过在第一编程语言实现的测试用例中调用接口函数,可以方便地调用由第二编程语言实现的操作函数来实现处理器操作的仿真。由此,可以方便地实现通过例如c语言实现的测试代码对硬件描述语言实现的被测试模块的验证。通过对基于第二编程语言的模型和基于第一编程语言的测试用例分别进行编译,可以避免在修改测试用例时对处理器模型和被测试模块进行重新编译,从而能够缩短验证工作中修改测试用例需要的时间周期。
72.图4示出了根据本公开的用于验证被测试模块的方法400的示例性流程图。
73.在步骤s402中,可以响应于触发信号触发主线程。其中主线程用于经由接口函数调用测试用例的主函数的运行以启动测试用例的运行。
74.响应于针对被测试模块的上电启动或复位重启操作,被测试模块可以产生触发信号(也可以称为复位信号)。上述触发信号可以由被测试模块内部的复位模块产生。
75.响应于触发信号,可以在第二编程语言域触发用于验证过程的主线程。经由基于直接编程接口dpi或编程语言接口pli实现的接口函数,第二编程语言(如systemverilog)域中的主线程可以调用第一编程语言(如c语言)域中的测试用例的主函数的运行,以启动由第一编程语言实现的测试用例的运行。第一编程语言可以是通用编程语言,如c语言,c++语言等。第二编程语言可以是硬件描述语言,如vhdl语言、verilog语言、systemverilog语言等。
76.在步骤s404中,在由第一编程语言实现的测试用例的运行过程中,可以经由接口
函数调用由第二编程语言实现的操作函数,以实现测试用例涉及的处理器操作。
77.在一些示例中,操作函数可以实现在用于实现测试验证涉及的处理器操作的测试基础类。在测试用例的运行过程中,可以调用操作函数以实现测试用例中涉及的处理器操作。例如,根据测试用例的需求,可以利用接口函数调用操作函数以实现相应的处理器操作。
78.在一些实施例中,处理器操作可以包括存储设备访问操作和测试环境访问操作中的至少一项。在一些示例中,存储设备可以指的是被测试模块的内存和/或寄存器。这里所说的存储设备访问操作可以包括对被测试模块的存储设备(如内存和/或寄存器)中存储的数据的前门访问(如读取数据或写入数据)。在一些示例中,处理器操作还可以包括测试环境访问操作。例如,测试环境访问操作可以包括获取测试环境中其他模块生成或存储的数据/信号。又例如,测试环境访问操作还可以包括对被测试模块的存储设备(如内存和/或寄存器)中存储的数据的后门访问。
79.在步骤s406中,可以基于处理器操作生成用于验证被测试模块的测试输入。
80.基于处理器操作得到的测试输入可以用于配置被测试模块的功能和/或访问状态。在一些实施例中,可以通过寄存器的读写实现处理器模型对被测试模块的配置。通过将被测试模块的寄存器配置成不同的内容,可以实现指示被测试模块实现不同的功能。
81.在步骤s408中,可以获取被测试模块响应于测试输入而生成的测试输出。
82.在一些实施例中,被测试模块可以是配置有总线接口的模块,如系统级芯片soc。可以经由总线接口向被测试模块提供测试输入,并经由总线接口获取被测试模块生成的测试输出。
83.在一些实施例中,响应于寄存器被配置,被测试模块将执行对应于寄存器所配置的内容的功能,并生成相应的测试输出。在一些实施例中,测试输出包括所配置的功能的结果数据/信号和所配置的功能的中间数据/信号中的至少一项。
84.在步骤s410中,可以响应于指示被测试模块的功能执行完毕的中断信号触发中断线程,中断线程用于在第二编程语言域中经由接口函数调用第一编程语言域中的测试用例的中断响应函数。与主线程的调用类似,中断线程可以用于经由接口函数实现对第一编程语言域中的测试代码中的中断服务函数的调用,以向测试用例提供被测试模块完成执行相应功能的指示。
85.在步骤s412中,响应于确定测试输出匹配用于被测试模块的参考输出,可以确定被测试模块通过验证。
86.其中,被测试模块的参考输出可以是根据针对被测试模块设计的功能确定的。如果被测试模块生成的测试输出匹配用于被测试模块的参考输出,可以认为被测试模块的逻辑功能是正确的,因此可以认为被测试模块通过验证。
87.利用本公开提供的验证方法,由于测试用例是用例如c语言的通用编程语言编写的,可以将测试用例编译为动态链接库。当对测试用例进行改动时,只需要重新对测试用例进行编译,而无需对被测试模块和用于实现处理器操作的测试基础类进行重新编译,能够显著缩短测试用例的迭代周期。此外,对于包含处理器的被测试模块(如soc),通过处理器模型接替被测试的处理器的运行,可以在真实的处理器尚未集成之前提前开始针对其他模块的验证。进一步地,通过测试用例调用测试环境访问函数,可以方便地实现对测试环境中
的其他模块的访问以及存储设备的后门访问。又进一步地,由于测试用例是由通用编程语言实现的,在针对硬件的仿真验证完成后,测试用例还可以用于后续的软件验证,实现测试用例的有效复用。
88.根据本公开的另一方面,还提供一种电子设备,包括:处理器;以及存储程序的存储器,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行上述的用于部署服务的方法和/或用于提供服务的方法。
89.根据本公开的另一方面,还提供一种存储程序的非暂态计算机可读存储介质,所述程序包括指令,所述指令在由电子设备的处理器执行时,致使所述电子设备执行上述的用于部署服务的方法和/或用于提供服务的方法。
90.根据本公开的另一方面,还提供一种计算机程序产品,包括计算机程序,所述计算机程序再被处理器执行时实现上述的用于部署服务的方法和/或用于提供服务的方法。
91.参见图5,现将描述电子设备500,其是可以应用于本公开的各方面的硬件设备(电子设备)的示例。电子设备500可以是被配置为执行处理和/或计算的任何机器,可以是但不限于工作站、服务器、台式计算机、膝上型计算机、平板计算机、个人数字助理、机器人、智能电话、车载计算机或其任何组合。上述验证待测试模块的方法300、400可以全部或至少部分地由电子设备500或类似设备或系统实现。
92.电子设备500可以包括(可能经由一个或多个接口)与总线502连接或与总线502通信的元件。例如,电子设备500可以包括总线502、一个或多个处理器504、一个或多个输入设备506以及一个或多个输出设备508。一个或多个处理器504可以是任何类型的处理器,并且可以包括但不限于一个或多个通用处理器和/或一个或多个专用处理器(例如特殊处理芯片)。输入设备506可以是能向电子设备500输入信息的任何类型的设备,并且可以包括但不限于鼠标、键盘、触摸屏、麦克风和/或遥控器。输出设备508可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。电子设备500还可以包括非暂时性存储设备510,非暂时性存储设备可以是非暂时性的并且可以实现数据存储的任何存储设备,包括但不限于磁盘驱动器、光学存储设备、固态存储器、软盘、柔性盘、硬盘、磁带或任何其他磁介质,光盘或任何其他光学介质、rom(只读存储器)、ram(随机存取存储器)、高速缓冲存储器和/或任何其他存储器芯片或盒、和/或计算机可从其读取数据、指令和/或代码的任何其他介质。非暂时性存储设备510可以从接口拆卸。非暂时性存储设备510可以具有用于实现上述方法和步骤的数据/程序(包括指令)/代码。电子设备500还可以包括通信设备512。通信设备512可以是使得能够与外部设备和/或与网络通信的任何类型的设备或系统,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信设备和/或芯片组,例如蓝牙
tm
设备、1302.11设备、wifi设备、wimax设备、蜂窝通信设备和/或类似物。
93.电子设备500还可以包括工作存储器514,其可以是可以存储对处理器504的工作有用的程序(包括指令)和/或数据的任何类型的工作存储器,并且可以包括但不限于随机存取存储器和/或只读存储器设备。
94.软件要素(程序)可以位于工作存储器514中,包括但不限于操作系统516、一个或多个应用程序518、驱动程序和/或其他数据和代码。用于执行上述方法和步骤的指令可以被包括在一个或多个应用程序518中,并且上述用于验证被测试模块的方法300、400可以通
过由处理器504读取和执行一个或多个应用程序518的指令来实现。更具体地,上述用于验证被测试模块的方法300、400可以例如通过处理器504执行用于实现步骤s302~s306、步骤s402~s412指令的可执行文件而实现。此外,为了实现上述用于验证被测试模块的方法300、400的其它步骤可以例如通过处理器504执行应用程序518而实现。软件要素(程序)的指令的可执行代码或源代码可以存储在非暂时性计算机可读存储介质(例如上述存储设备510)中,并且在执行时可以被存入工作存储器514中(可能被编译和/或安装)。软件要素(程序)的指令的可执行代码或源代码也可以从远程位置下载。
95.还应该理解,可以根据具体要求而进行各种变型。例如,也可以使用定制硬件,和/或可以用硬件、软件、固件、中间件、微代码,硬件描述语言或其任何组合来实现特定元件。例如,所公开的方法和设备中的一些或全部可以通过使用根据本公开的逻辑和算法,用汇编语言或硬件编程语言(诸如verilog,vhdl,c++)对硬件(例如,包括现场可编程门阵列(fpga)和/或可编程逻辑阵列(pla)的可编程逻辑电路)进行编程来实现。
96.还应该理解,前述方法可以通过服务器

客户端模式来实现。例如,客户端可以接收用户输入的数据并将所述数据发送到服务器。客户端也可以接收用户输入的数据,进行前述方法中的一部分处理,并将处理所得到的数据发送到服务器。服务器可以接收来自客户端的数据,并且执行前述方法或前述方法中的另一部分,并将执行结果返回给客户端。客户端可以从服务器接收到方法的执行结果,并例如可以通过输出设备呈现给用户。
97.还应该理解,电子设备500的组件可以分布在网络上。例如,可以使用一个处理器执行一些处理,而同时可以由远离该一个处理器的另一个处理器执行其他处理。计算系统500的其他组件也可以类似地分布。这样,电子设备500可以被解释为在多个位置执行处理的分布式计算系统。
98.以下描述本公开的一些示例性方面。
99.方面1.一种验证系统,包括:
100.处理器模型,所述处理器模型被配置成:
101.在由第一编程语言实现的测试用例的运行过程中,经由接口函数调用由第二编程语言实现的操作函数,以实现所述测试用例涉及的处理器操作,
102.获取基于所述处理器操作得到的测试输入;以及
103.被测试模块,所述被测试模块用于响应于所述测试输入而生成测试输出。
104.方面2.如方面1所述的验证系统,其中所述第一编程语言是通用编程语言,所述第二编程语言是硬件描述语言。
105.方面3.如方面2所述的验证系统,其中所述第一编程语言是c语言,所述第二编程语言是systemverilog语言。
106.方面4.如方面1

3中任一项所述的验证系统,其中,所述被测试模块还配置成:
107.响应于触发信号触发主线程,所述主线程用于经由所述接口函数调用所述测试用例的主函数的运行以启动所述测试用例的运行。
108.方面5.如方面1

4中任一项所述的验证系统,其中,所述被测试模块还配置成:
109.响应于指示所述被测试模块的功能执行完毕的中断信号触发中断线程,所述中断线程用于经由所述接口函数调用所述测试用例的中断响应函数。
110.方面6.如方面1

5中任一项所述的验证系统,其中,所述处理器操作包括以下各项
中的至少一项:
111.存储设备访问操作;和
112.测试环境访问操作。
113.方面7.如方面6所述的验证系统,其中,
114.所述存储设备访问操作包括对所述被测试模块的内存和/或寄存器的前门访问操作;;
115.所述测试环境访问操作包括以下各项中的至少一项:
116.所述被测试模块的内存和/或寄存器的后门访问操作,和
117.获取验证涉及的除被测试模块以外的其他模块产生的信号或数据的操作。
118.方面8.如方面1

7中任一项所述的验证系统,其中,所述被测试模块配置有总线接口,所述总线接口用于向所述被测试模块提供所述测试输入。
119.方面9.如方面8所述的验证系统,其中所述被测试模块是系统级芯片。
120.方面10.如方面1

9任一项所述的验证系统,其中,所述接口函数基于直接编程接口dpi或编程语言接口pli。
121.方面11.如方面1

10任一项所述的验证系统,还包括验证模块,所述验证模块用于响应于确定所述测试输出匹配用于所述被测试模块的参考输出而确定所述被测试模块通过验证。
122.方面12.如方面1所述的验证系统,其中,所述处理器模型和所述被测试模块被一起编译成可执行文件,所述测试用例被编译成共享库文件。
123.方面13.一种用于验证被测试模块的方法,包括:
124.在由第一编程语言实现的测试用例的运行过程中,经由接口函数调用由第二编程语言实现的操作函数,以实现所述测试用例涉及的处理器操作;
125.基于所述处理器操作生成用于验证所述被测试模块的测试输入;以及
126.获取所述被测试模块响应于所述测试输入而生成的测试输出。
127.方面14.如方面13所述的方法,其中所述第一编程语言是通用编程语言,所述第二编程语言是硬件描述语言。
128.方面15.如方面14所述的方法,其中所述第一编程语言是c语言,所述第二编程语言是systemverilog语言。
129.方面16.如方面13

15中任一项所述的方法,还包括:
130.响应于触发信号触发主线程,所述主线程用于经由所述接口函数调用所述测试用例的主函数的运行以启动所述测试用例的运行。
131.方面17.如方面13

15中任一项所述的方法,还包括:
132.响应于指示所述被测试模块的功能执行完毕的中断信号触发中断线程,所述中断线程用于经由所述接口函数调用所述测试用例的中断响应函数。
133.方面18.如方面13

17中任一项所述的方法,其中,所述处理器操作包括以下各项中的至少一项:
134.存储设备访问操作;和
135.测试环境访问操作。
136.方面19.如方面18所述的方法,其中,
137.所述存储设备访问操作包括对所述被测试模块的内存和/或寄存器的前门访问操作;
138.所述测试环境访问操作包括以下各项中的至少一项:
139.所述被测试模块的内存和/或寄存器的后门访问操作;和
140.获取验证涉及的除被测试模块以外的其他模块产生的信号或数据的操作。
141.方面20.如方面13

19中任一项所述的方法,其中,所述被测试模块配置有总线接口,
142.获取所述被测试模块响应于所述测试输入而生成的测试输出包括:
143.经由所述总线接口向所述被测试模块提供所述测试输入;以及
144.经由所述总线接口获取所述被测试模块生成的测试输出。
145.方面21.如方面20所述的方法,其中所述被测试模块是系统级芯片。
146.方面22.如方面13

21中任一项所述的方法,其中,所述接口函数基于直接编程接口dpi或编程语言接口pli。
147.方面23.如方面13

22中任一项所述的方法,还包括:
148.响应于确定所述测试输出匹配用于所述被测试模块的参考输出,确定所述被测试模块通过验证。
149.方面24.如方面13所述的方法,其中,所述处理器模型和所述被测试模块被一起编译成可执行文件,所述测试用例被编译成共享库文件。
150.方面25.一种电子设备,包括:
151.处理器;以及
152.存储程序的存储器,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行根据方面13

24中任一项所述的方法。
153.方面26.一种存储程序的非暂态计算机可读存储介质,所述程序包括指令,所述指令在由电子设备的处理器执行时,致使所述电子设备执行根据方面13

24中任一项所述的方法。
154.方面27.一种计算机程序产品,包括计算机程序,其中,所述计算机程序在被处理器执行时实现根据方面13

24中任一项所述的方法。
155.虽然已经参照附图描述了本公开的实施例或示例,但应理解,上述的方法、系统和设备仅仅是示例性的实施例或示例,本发明的范围并不由这些实施例或示例限制,而是仅由授权后的权利要求书及其等同范围来限定。实施例或示例中的各种要素可以被省略或者可由其等同要素替代。此外,可以通过不同于本公开中描述的次序来执行各步骤。进一步地,可以以各种方式组合实施例或示例中的各种要素。重要的是随着技术的演进,在此描述的很多要素可以由本公开之后出现的等同要素进行替换。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1