具体实施方式
以下基于实施例对本申请进行描述,但是本申请并不仅仅限于这些实施例。在下文对本申请的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本申请。为了避免混淆本申请的实质,公知的方法、过程、流程没有详细叙述。另外附图不一定是按比例绘制的。
首先,对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释。
调试:调试(debug)是一种基于硬件调试设备,多用于结合软件调试工具,进行定位以解决处理器所出现软硬件问题的技术手段。
测试用例:测试用例(Test Case)是指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,最终形成文档。简单地认为,测试用例是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,用于核实是否满足某个特定软件需求。在本申请实施例中,测试用例是指对处理器中调试模块进行测试任务的描述。
处理器设计:处理器设计按阶段可分为规格定义、系统级设计、前端设计和后端设计。规格定义是在处理器设计之初进行处理器需求分析,确定处理器的成本、目的及效能,完成产品的规格定义,以确定处理器设计的整体方向。系统级设计阶段基于前期的规格定义,指定设计解决方案和具体实现架构设计,划分模块功能,明确处理器架构、业务模块、供电等系统级设计。前端设计根据系统设计确定的方案,将实际硬件电路功能通过硬件描述语言进行描述,形成RTL代码。后端设计将逻辑综合转换成的物理网表,转换成制造工厂可以用于制造光罩的图形文件。
示例性系统
图1示出了一种适用于本申请实施例的处理器调试模块验证方法的示例性系统。如图1所示,该系统包括处理器调试模块验证装置10和仿真验证模块20,仿真验证模块20可以通过前端设计输出的硬件代码模拟待验证的处理器21,仿真验证模块20模拟出处理器21包括用于调试的调试模块22,调试模块22位于处理器21的处理器核内。
处理器调试模块验证装置10与仿真验证模块20通过通信网络/总线30相连接。处理器调试模块验证装置10可以通过通信网络/总线30向调试模块22发送调试请求,并可以通过通信网络/总线30获取处理器21的运行状态和指令执行情况,进而实现对调试模块22进行仿真验证。
在一些实施例中,通信网络/总线30可以是一个或多个有线和/或无线网络的任何适当的组合。例如,通信网络/总线30能够包括以下各项中的任何一种或多种:互联网、内联网、广域网(WAN)、局域网(LAN)、无线网络、数字订户线路(DSL)网络、帧中继网络、异步转移模式(ATM)网络、虚拟专用网(VPN)和/或任何其它合适的通信网络。处理器调试模块验证装置10能够通过一个或多个通信链路连接到通信网络/总线30,该通信网络/总线30能够经由一个或多个通信链路被链接到仿真验证模块20。通信链路可以是适合于在处理器调试模块验证装置10和仿真验证模块20之间传送数据的任何通信链路,诸如网络链路、拨号链路、无线链路、硬连线链路、任何其它合适的通信链路或此类链路的任何合适的组合。
在一些实施例中,处理器调试模块验证装置10可以是用于存储信息、数据、程序和/或任何其他合适类型的内容的任何适当的设备,包括但不限于分布式存储系统设备、服务器集群、计算云服务端集群、本地服务器、PC等。在一些实施例中,处理器调试模块验证装置10可以执行任何适当的功能。例如,在一些实施例中,处理器调试模块验证装置10可以向仿真验证模块20发送调试请求,并获取仿真验证模块20模拟出的处理器21的运行状态和指令执行情况,以此验证调试模块22是否满足设计要求。
处理器21可以基于精简指令集(RISC)原则的开源指令集架构。在一个例子中,处理器21可以基于RISC-V指令集设计,比如处理器21可以是基于RISC-V指令集设计的CPU、GPU或特定集成电路ASIC(Application Specific Integrated Circuit)等。
本申请实施例主要着眼于处理器调试模块验证装置10对调试模块22进行验证的过程,在后文中会对调试模块22的验证过程进行详细描述。
处理器调试模块验证方法
基于上述系统,本申请实施例提供了一种处理器调试模块验证方法,该处理器调试模块验证方法可由上述系统实施例中的处理器调试模块验证装置10执行,以下通过多个实施例对该处理器调试模块验证方法进行详细说明。
图2是本申请一个实施例的处理器调试模块验证方法的流程图。如图2所示,该处理器调试模块验证方法包括如下步骤:
步骤201、向处理器中的调试模块发送调试行为信息。
本申请实施例中的处理器是指通过前端设计输出的硬件代码模拟出的处理器,模拟出的处理器能够像实体处理器一样响应数据处理请求进行数据处理。实体处理器中包括调试模块,通过调试模块可以对处理器进行调试,进而通过定位以解决处理器出现的软硬件问题。所模拟出的处理器也包括调试模块,进而可以通过仿真的方式对调试模块进行验证。
处理器的目标调试状态包括调试异常状态和调试模式状态。调试异常状态下处理器对所出现的异常进行处理,并在异常处理完成后继续执行后续指令流。调试模式状态下处理器响应于外部输入的调试请求执行相应处理,在外部连续输入多个调试请求时,处理器依次响应各调试请求,在外部无调试请求输入时,处理器不会自行执行指令流。
在开始对调试模块进行验证时,首先向调试模块发送调试行为信息,调试行为信息用于控制处理器进入调试异常状态或调试模式状态,以在处理器处于不同调试状态时对调试模块进行验证。
步骤202、若处理器进入目标调试状态,则根据测试用例向调试模块发送指令激励,使调试模块根据指令激励控制处理器运行,并获取处理器的激励执行结果。
调试行为信息用于控制处理器进入目标调试状态,在将调试行为信息发送给处理器后,如果处理器未能进入目标调试状态,说明处理器中的调试模块无法被正常启用,从而可以确定调试模块的功能异常。如果处理器能够正常进入目标调试状态,则可以基于测试用例继续对调试模块进行功能验证。
预先获取用于对调试模块进行测试的测试用例,测试用例包括了对调试模块进行测试任务的描述,具体包括测试方案、方法、技术和策略,其内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等。根据测试用例可以确定需要发送给调试模块的指令激励,指令激励可以是单个调试请求,也可以是由多个调试请求顺序组合形成的指令流。
在处理器进入目标调试状态后,根据测试用例向调试模块发送指令激励,调试模块接收到指令激励后会控制处理器运行,使处理器执行相应的动作。在向调试模块发送指令激励后,还可以获取处理器对于指令激励的激励执行结果,激励执行结果可以包括处理器返回的运行状态信息、所执行指令、所访存地址等。
步骤203、根据激励执行结果,获得调试模块的验证结果。
在根据测试用例向调试模块发送全部的指令激励,并获取处理器针对每个指令激励的激励执行结果后,可以根据激励执行结果获得调试模块的验证结果。基于激励执行结果可以确定调试模块的功能是否正常,因为在调试模块的功能正常时,处理器的激励执行结果与指令激励的预期结果应相同。
在本申请实施例中,前端设计输出硬件代码后,通过硬件代码模拟处理器,所模拟出的处理器包括调试模块,向调试模块发送调试行为信息后,若处理器进入目标调试状态,则根据测试用例向调试模块发送指令激励,使调试模块根据指令激励控制处理器运行,在发送指令激励后还可以获取处理器针对指令激励的激励执行结果,进而根据指令激励执行结果获得调试模块的验证结果。可见,在前端设计完成后便可以通过硬件代码模拟处理器,以对处理器中的调试模块进行验证,而无需等到处理器中的交互模块集成完成后再对调试模块进行验证,从而在前端设计阶段便可以对调试模块进行优化,节省了对调试模块进行优化迭代所需的时间,进而可以提高处理器的设计开发效率。
通过向调试模块发送调试行为信息,可以使处理器进入调试异常状态或调试模式状态,还可以使处理器忽略当前出现的问题或执行的指令,由于调试异常状态和调试模式状态均是实体处理器可能的调试状态,从而能够覆盖调试模块的不同应用场景,提高了对调试模块进行验证的全面性。
在一种可能的实现方式中,在向处理器中的调试模块发送调试行为信息时,可以在处理器执行的取值指令、处理器的访存数据和处理器的访存地址中的至少一个命中预设的触发器时,向处理器中的调试模块发送调试行为信息,或者,可以在处理器运行的过程中,随机向处理器中的调试模块发送调试行为信息。
在一个例子中,根据测试用例预先设定触发器,触发器以处理器的取指行为或访存行为为触发条件,比如处理器执行特定的取指指令或访问特定的缓存地址等,当处理器的取指行为或访存行为命中触发器时,向处理器中的调试模块发送调试行为信息,调试模块接收到调试行为信息后促使处理器进入目标调试状态。
在另一个例子中,在处理器运行的过程中,根据测试用例随机向处理器中的调试模块发送调试行为信息,调试模块接收到调试行为信息后促使处理器进入目标调试状态。由于向调试模块发送调试行为信息是随机的,调试行为信息的发送时间和类型均是随机的。
在本申请实施例中,可以在处理器的取指行为或访存行为命中触发器时向调试模块发送调试行为信息,还可以随机向调试模块发送调试行为信息,从而实现受控或随机发送调试行为信息,从而可以根据需求选择上述两种发送方式中的一种或全部向调试模块发送调试行为信息,满足不同用户及处理器的测试需求,提高了该调试模块验证方法的适用性。通过上述两种发送方式向调试模块发送调试行为信息,在对调试模块进行验证的过程中,可以对调试模块的环境和场景进行更全面的覆盖,从而提高对调试模块进行验证的全面性。
在一种可能的实现方式中,可以预先获取处理器中其他模块的测试用例,作为对调试模块进行测试的测试用例。
在对处理器中的调试模块进行仿真验证时,可以复用对处理器中其他模块进行验证的测试用例,作为用于对调试模块进行验证的测试用例。被复用的测试用例,可以是相同处理器中其他模块的测试用例,也可以是不同处理器中功能模块的测试用例,对此本申请实施例不作限定。被复用的测试用例是与待测试处理器不同的处理器中功能模块的测试用例时,被复用的测试用例可以是与待测试处理器不同的处理器中调试模块的测试用例,比如,被复用的测试用例原本用于对处理器A中的调试模块进行测试,现该测试用例用于对处理器B中的调试模块进行测试。
在本申请实施例中,由于测试用例的编写需要进行二进制码构造,测试用例构造过程复杂,而且所构造测试用例包括的指令序列单一,通过复用一个或多个其他功能模块的测试用例,来对调试模块进行验证,可以减少构造测试用例所耗费的时间成本和劳动力成本。通过复用处理器中其他模块的测试用例对调试模块进行验证,可以增加验证过程中的场景和指令序列,可以对验证的随机场景和指令激励进行更加全面的覆盖,从而可以从响应调试请求时处理器的状态、调试模式下指令执行的状态和操作数等多个维度,对调试模块进行更加全面的验证,提高对调试模块进行验证的有效性、全面性和可靠性。
在一种可能的实现方式中,在复用处理器中其他模块的测试用例对调试模块进行测试时,如果直接将指令激励发送给调试模块,可能会导致处理器产生与预期行为不同的行为,导致验证结果的可靠性较差。为此,需要在发送指令激励给调试模块之前,对指令激励进行过滤和调整。
图3是本申请一个实施例的指令激励发送方法的流程图。如图3所示,该指令激励发送方法包括如下步骤:
步骤301、根据测试用例读取复用指令激励。
复用的测试用例定义了向目标对象发送指令激励的指令流,本申请实施例将被复用的测试用例定义的指令激励称为复用指令激励。根据复用的测试用例,可以按序或随机读取复用指令激励。
步骤302、对复用指令激励进行解析,获得解析结果。
在读取到复用指令激励后,可以对读取到的复用指令激励进行解析,获得相应的解析结果。复用指令激励的解析结果包括处理器执行该复用指令激励时所产生的行为。
步骤303、根据解析结果判断处理器执行复用指令激励时产生的行为是否与复用指令激励的预期行为相同,如果时,执行步骤304,否则执行步骤305。
在获得复用指令激励的解析结果后,由于解析结果可以指示处理器执行复用指令激励时所产生的行为,而复用测试用例定义了复用指令激励被执行时处理器应当产生的预期行为,所以可以根据解析结果和复用测试用例,判断处理器执行复用指令激励时产生的行为是否与复用指令激励的预期行为相同。
应理解,该步骤中所述的处理器执行复用指令激励时所产生的行为,是指在调试模块的功能正常的情况下,处理器执行复用指令激励时所产生的行为。在调试模块的功能正常的情况下,根据解析结果确定处理器执行复用指令激励时所产生的行为与复用指令激励的预期行为相同,如果在实际将复用指令激励发送给调试模块后,处理器执行复用指令激励所产生的行为与复用指令激励的预期行为不同,则可以确定调试模块的功能异常。
步骤304、将复用指令激励作为指令激励发送给调试模块,并结束当前流程。
在处理器执行复用指令激励时产生的行为与复用指令激励的预期行为相同时,将复用指令激励直接发送给调试模块,进而可以将处理器执行该复用指令激励时所产生的行为,与该复用指令激励对应的预期行为进行对比,以确定调试模块的功能是否正常。
步骤305、对复用指令激励进行处理,获得处理器执行时产生的行为与复用指令激励的预期行为相同的指令激励,并将指令激励发送给调试模块。
在处理器执行复用指令激励时产生的行为与复用指令激励的预期行为不同时,对复用指令激励进行处理,生成处理器执行时生成的行为与复用指令激励的预期行为相同的指令激励,进而将生成的指令激励发送给调试模块。调试模块控制处理器执行指令激励后,可以将处理器执行指令激励时所产生的行为,与复用指令激励对应的预期行为进行对比,以确定调试模块的功能是否正常。
对复用指令激励进行处理包括对复用测试用例所定义的指令流进行指令激励删除、指令激励顺序调整、新增指令激励、修改指令激励的参数等,使得通过处理获得的指令激励能够适用于待测试的调试模块。
在本申请实施例中,复用测试用例包括的复用指令激励可能并不完全兼容待验证的调试模块,通过对复用指令激励进行解析,对于调试模式下可能不产生与预期行为一致的复用指令激励,包括但不限于异常、终端、跳转、指令指针(PC)维护等进行处理,保证在调试模块功能正常的情况下,处理器执行指令激励后产生的行为与预期行为相同,保证了调试模式下激励与程序流的正确性和有效性,从而在保证调试模块的验证全面性的同时,保证验证结果的准确性。
在一种可能的实现方式中,在根据测试用例读取复用指令激励时,可以根据测试用例记载的目标地址,从缓存中读取复用指令激励,还可以根据测试用例记录的指令文本,读取与指令文本相匹配的复用指令激励。
在本申请实施例中,在读取复用指令激励时,可以根据目标地址从缓存中读取复用指令激励,或者可以对指令文本进行匹配以读取复用指令激励,提供了不同读取复用指令激励的方式,复用指令激励的读取可以基于缓存实现,也可以不基于缓存实现,从而适用于以不同形式提供的指令激励,提高了该调试模块验证方法的适用性。
在一种可能的实现方式中,在根据激励执行结果获得调试模块的验证结果时,可以将包括处理器的流水线状态、处理器权限和指令执行结果中至少一个的激励执行结果,输入到预先训练的调试验证模型中,进而获得调试验证模型输出的验证结果。
调试验证模型用于验证调试模块的功能是否正常,在获取到处理器针对各指令激励的激励执行结果后,将激励执行结果和测试用例包括的预期结果输入调试验证模型,调试验证模型通过将激励执行结果与预期结果进行比对,可以输出用于指示调试模块的功能是否正常的验证结果。
在本申请实施例中,在向调试模块发送调试行为信息和指令激励后,可以获取处理器的流水线状态、处理器权限和指令执行结果等信息,这些信息可以指示处理器是否产生预期行为,将这些信息作为激励执行结果来获取调试模块的验证结果,保证所获得的验证结果能够全面地指示调试模块的功能是否正常,提高对调试模块进行验证的准确性。通过调试验证模型来获取验证结果,节省了人工分析激励执行结果所需花费的时间和人力成本,提高对调试模型进行验证的效率,并降低对调试模块进行验证的成本。
处理器调试模块验证装置
对应于上述方法实施例,图4示出了一种处理器调试模块验证装置的示意图。如图4所示,该处理器调试模块验证装置10包括:
调试激励发生模块101,用于向处理器中的调试模块发送调试行为信息,其中,调试行为信息用于控制处理器进入目标调试状态,目标调试状态包括调试异常状态或调试模式状态,处理器通过前端设计输出的硬件代码模拟获得;
指令激励测试模块102,用于在处理器进入目标调试状态后,根据测试用例向调试模块发送指令激励,使调试模块根据指令激励控制处理器运行,并获取处理器的激励执行结果;
处理器调试功能验证模块103,用于根据激励执行结果,获得调试模块的验证结果。
在本申请实施例中,前端设计输出硬件代码后,通过硬件代码模拟处理器,所模拟出的处理器包括调试模块,调试激励发生模块101向调试模块发送调试行为信息后,若处理器进入目标调试状态,指令激励测试模块102根据测试用例向调试模块发送指令激励,使调试模块根据指令激励控制处理器运行,在发送指令激励后还可以获取处理器针对指令激励的激励执行结果,进而处理器调试功能验证模块103根据指令激励执行结果获得调试模块的验证结果。可见,在前端设计完成后便可以通过硬件代码模拟处理器,以对处理器中的调试模块进行验证,而无需等到处理器中的交互模块集成完成后再对调试模块进行验证,从而在前端设计阶段便可以对调试模块进行优化,节省了对调试模块进行优化迭代所需的时间,进而可以提高处理器的设计开发效率。
在一种可能的实现方式中,调试激励发生模块101可以在处理器执行的取指指令、访存数据和访存地址中的至少一个命中预设的触发器时,向处理器中的调试模块发送调试行为信息,或者,在处理器运行过程中,随机向处理器中的调试模块发送调试行为信息。
在一种可能的实现方式中,指令激励测试模块102可以获取处理器中其他模块的测试用例,作为用于对调试模块进行测试的测试用例。
在一种可能的实现方式中,指令激励测试模块102可以执行如下处理:根据测试用例读取复用指令激励;对复用指令激励进行解析,获得解析结果;根据解析结果判断处理器执行复用指令激励时产生的行为是否与复用指令激励的预期行为相同;如果处理器执行复用指令激励时产生的行为与复用指令激励的预期行为相同,则将复用指令激励作为指令激励发送给调试模块;如果处理器执行复用指令激励时产生的行为与复用指令激励的预期行为不相同,则对复用指令激励进行处理,获得处理器执行时产生的行为与复用指令激励的预期行为相同的指令激励,并将指令激励发送给调试模块。
在一种可能的实现方式中,激励测试模块102在执行根据测试用例读取复用指令激励时,可以根据测试用例记载的目标地址,从缓存中读取复用指令激励,或者,根据测试用例记载的指令文本,读取与指令文本相匹配的复用指令激励。
在一种可能的实现方式中,处理器调试功能验证模块103可以将包括处理器的流水线状态、处理器权限和指令执行结果中至少一个的激励执行结果输入预先训练的调试验证模型,获得调试验证模型输出的调试模块的验证结果。
需要说明的是,本实施例的处理器调试模块验证装置用于实现前述方法实施例中相应的处理器调试模块验证方法,并具有相应的方法实施例的有益效果,在此不再赘述。
电子设备
图5是本申请实施例提供的一种电子设备的示意性框图,本申请具体实施例并不对电子设备的具体实现做限定。如图5所示,该电子设备可以包括:处理单元(processor)502、通信接口(Communications Interface)504、存储器(memory)506、以及通信总线508。其中:
处理单元502、通信接口504、以及存储器506通过通信总线508完成相互间的通信。
通信接口504,用于与其它电子设备或服务器进行通信。
处理单元502,用于执行程序510,具体可以执行前述任一处理器调试模块验证方法实施例中的相关步骤。
具体地,程序510可以包括程序代码,该程序代码包括计算机操作指令。
处理单元502可能是CPU,或者是特定集成电路ASIC(Application SpecificIntegrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路。电子设备包括的一个或多个处理单元,可以是同一类型的处理单元,如一个或多个CPU;也可以是不同类型的处理单元,如一个或多个CPU以及一个或多个ASIC。
RISC-V是一种基于精简指令集(RISC)原则的开源指令集架构,其可以应用于单片机和FPGA芯片等各个方面,具体可应用在物联网安全、工业控制、手机、个人计算机等领域,且由于其在设计时考虑了小型、快速、低功耗的现实情况,使得其尤其适用于仓库规模云计算机、高端移动电话和微小嵌入式系统等现代计算设备。随着人工智能物联网AIoT的兴起,RISC-V指令集架构也受到越来越多的关注和支持,并有望成为下一代广泛应用的CPU架构。
本申请实施例中的计算机操作指令可以是基于RISC-V指令集架构的计算机操作指令,对应地,处理单元502可以基于RISC-V的指令集设计。具体地,本申请实施例提供的电子设备中的处理单元的芯片可以为采用RISC-V指令集设计的芯片,该芯片可基于所配置的指令执行可执行代码,进而实现上述实施例中的处理器调试模块验证方法。
存储器506,用于存放程序510。存储器506可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序510具体可以用于使得处理单元502执行前述任一实施例中的处理器调试模块验证方法。
程序510中各步骤的具体实现可以参见前述任一处理器调试模块验证方法实施例中的相应步骤和单元中对应的描述,在此不赘述。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的设备和模块的具体工作过程,可以参考前述方法实施例中的对应过程描述,在此不再赘述。
通过本申请实施例的电子设备,前端设计输出硬件代码后,通过硬件代码模拟处理器,所模拟出的处理器包括调试模块,向调试模块发送调试行为信息后,若处理器进入目标调试状态,则根据测试用例向调试模块发送指令激励,使调试模块根据指令激励控制处理器运行,在发送指令激励后还可以获取处理器针对指令激励的激励执行结果,进而根据指令激励执行结果获得调试模块的验证结果。可见,在前端设计完成后便可以通过硬件代码模拟处理器,以对处理器中的调试模块进行验证,而无需等到处理器中的交互模块集成完成后再对调试模块进行验证,从而在前端设计阶段便可以对调试模块进行优化,节省了对调试模块进行优化迭代所需的时间,进而可以提高处理器的设计开发效率。
计算机存储介质
本申请还提供了一种计算机可读存储介质,存储用于使一机器执行如本文所述的处理器调试模块验证方法的指令。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或CPU或MPU)读出并执行存储在存储介质中的程序代码。
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本申请的一部分。
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如CD-ROM、CD-R、CD-RW、DVD-ROM、DVD-RAM、DVD-RW、DVD+RW)、磁带、非易失性存储卡和ROM。可选择地,可以由通信网络从服务器计算机上下载程序代码。
计算机程序产品
本申请实施例还提供了一种计算机程序产品,包括计算机指令,该计算机指令指示计算设备执行上述多个方法实施例中的任一对应的操作。
需要指出,根据实施的需要,可将本申请实施例中描述的各个部件/步骤拆分为更多部件/步骤,也可将两个或多个部件/步骤或者部件/步骤的部分操作组合成新的部件/步骤,以实现本申请实施例的目的。
上述根据本申请实施例的方法可在硬件、固件中实现,或者被实现为可存储在记录介质(诸如CD ROM、RAM、软盘、硬盘或磁光盘)中的软件或计算机代码,或者被实现通过网络下载的原始存储在远程记录介质或非暂时机器可读介质中并将被存储在本地记录介质中的计算机代码,从而在此描述的方法可被存储在使用通用计算机、专用处理器或者可编程或专用硬件(诸如ASIC或FPGA)的记录介质上的这样的软件处理。可以理解,计算机、处理器、微处理器控制器或可编程硬件包括可存储或接收软件或计算机代码的存储组件(例如,RAM、ROM、闪存等),当所述软件或计算机代码被计算机、处理器或硬件访问且执行时,实现在此描述的方法。此外,当通用计算机访问用于实现在此示出的方法的代码时,代码的执行将通用计算机转换为用于执行在此示出的方法的专用计算机。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请实施例的范围。
以上实施方式仅用于说明本申请实施例,而并非对本申请实施例的限制,有关技术领域的普通技术人员,在不脱离本申请实施例的精神和范围的情况下,还可以做出各种变化和变型,因此所有等同的技术方案也属于本申请实施例的范畴,本申请实施例的专利保护范围应由权利要求限定。