技术领域
[0001] 本申请涉及芯片验证技术领域,尤其涉及一种芯片验证方法及系统。
相关背景技术
[0002] AI芯片是指在芯片中集成有AI运算核(Neural Processing Unit,NPU)的芯片。AI运算核是一个硬件概念,AI运算核为AI芯片中的核心部分,能够加速神经网络模型(AI模型)的运行,使用AI运算核能够快速完成AI模型的运算。AI模型是一个软件概念,AI模型可以执行各种复杂的任务,如图像识别、语音识别、自然语言处理等。
[0003] AI运算核包括矩阵运算核、向量运算核、标量运算核等,矩阵运算核用于实现矩阵运算,向量运算核用于实现向量运算,标量运算核用于实现标量运算。每个运算核内部包括多个一级模块,每个一级模块代表某一类运算功能的集合。每个一级模块又包括多个二级模块,每个二级模块代表某一运算功能。
[0004] 在验证上述一级模块时,可以先对单个二级模块进行功能验证,再将多个二级模块级联起来进行组合功能点验证。该种方式测试用例需分两次开发,增加额外的工作负担。且开发级联测试用例时需评估多种模块的组合,复杂度较高。级联场景评估依赖人力判断,容易造成测试用例的重复、缺失或非法问题,如果未能穷举所有合法的级联场景,会降低验证的完备性。
具体实施方式
[0025] 下面将详细地对实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下实施例中描述的实施方式并不代表与本申请相一致的所有实施方式。仅是与权利要求书中所详述的、本申请的一些方面相一致的系统和方法的示例。
[0026] AI芯片是指在芯片(如系统级芯片(System on a Chip,SOC))中集成有AI运算核(Neural Processing Unit,NPU)的芯片,为神经网络模型(AI模型)的专用处理器。AI运算核是一个硬件概念,AI运算核为AI芯片中的核心部分,能够加速神经网络模型的运行,使用AI运算核能够快速完成AI模型的算子运算。AI模型是一个软件概念,AI模型可以执行各种复杂的任务,如图像识别、语音识别、自然语言处理等。
[0027] AI运算核包括矩阵运算核、向量运算核、标量运算核等,矩阵运算核用于实现矩阵运算,向量运算核用于实现向量运算,标量运算核用于实现标量运算。每个运算核(零级模块)内部包括用于执行运算功能的运算模块,运算模块包括多个一级模块,每个一级模块代表某一类运算功能的集合。每个一级模块包括多个二级模块,每个二级模块代表某一运算功能。
[0028] 如图1所示,单个运算核内置了3个一级模块,分别为子模块1、子模块2和子模块3,其中,子模块1代表浮点数运算功能的一级模块,如图2所示,子模块1包含11个二级模块,即A模块、B模块、C模块、D模块、E模块、F模块、H模块、I模块、J模块、K模块和L模块,可以分别代表浮点数的加、减、乘、除、取余、绝对值、平方等运算。例如,H模块可以代表浮点数加法模块,J模块可以代表浮点数乘法模块,L模块可以代表浮点数除法模块。
[0029] 单个运算核还包括3个直接内存读取访问(Read Direct Memory Access,RDMA)模块,分别为RDMA0、RDMA1和RDMA2,1个直接内存写出访问(Write Direct Memory Access,WDMA)模块,即WDMA。运算核运行时,RDMA0、RDMA1和RDMA2从存储器中读取数据到3个一级模块。通过一级模块中的多个二级模块依次对数据进行运算处理。运算处理后的数据传入WDMA,由WDMA将运算处理后的数据写出至存储器。
[0030] 在验证上述一级模块时,以子模块1为例,可以先对单个二级模块进行功能验证,再将多个二级模块级联起来进行组合功能点验证。验证工程师从芯片设计文档中提取单个的功能点,针对于一个二级模块,会对应开发该二级模块的多条单模块测试用例,仅用于验证该二级模块。例如,H模块是浮点数加法功能,则对应开发H模块的多条单模块测试用例,仅用于验证H模块,验证时将其它二级模块都关闭。J模块是浮点数乘法功能,则对应开发J模块的多条单模块测试用例,仅用于验证J模块,验证时将其它二级模块都关闭。
[0031] 完成所有的二级模块的功能验证后,会开发级联测试用例,用于进行多个二级模块的级联验证。级联测试用例是指多个功能点的组合测试用例。对于H模块+J模块的级联验证,需要开发对应H模块+J模块的级联测试用例,H模块+J模块表示先做浮点加法,再对加法得到的结果做浮点乘法。开发级联测试用例过程中,由于多模块组合情况数量大且场景复杂,验证工程师会根据经验来构建若干条级联测试用例,并不会穷举所有级联测试用例。
[0032] 先单模块功能验证、再级联验证的弊端在于:需要二次开发。测试用例开发需要分两次,第一次开发单模块功能测试用例,第二次开发级联测试用例,增加额外开发负担。
[0033] 开发级联测试用例时,级联的组合情况较多,模块间不能随意组合,每个模块在组合时都需要评估非法的级联场景,增加非法场景评估的复杂程度,增加级联测试用例的开发难度。
[0034] 实际应用场景中级联测试用例覆盖的场景不足。实际项目中为了节省时间,验证工程师会根据经验来自行搭配几条主要的级联测试用例,将几个典型通路串通后即认为验证通过,例如,如图2所示,2个典型通路分别为(A+B+C+H+J)和(C+D+E+H+J+K+L),则验证过程中只需验证上述2个典型通路即可,上述实施方式并没有穷举所有合法的级联场景,导致很多级联场景没有得到验证,降低验证的完备性。
[0035] 由于按模块评估的级联场景较多,测试用例构建规则不明确,靠人力逐一判断,容易导致测试用例重复、缺失、非法等问题。
[0036] 因此,本申请部分实施例中提供一种芯片验证系统,如图3所示,为本申请实施例提供的芯片验证系统的架构示意图。该芯片验证系统包括内存管理组件、仿真控制组件、测试用例池、参考模型组件、数据包收发器、比对组件和仿真报告组件。验证系统中组件之间相互连接。为了实现芯片验证,在验证系统中集成待验证的芯片设计模块,即寄存器传输级(Re gister Transfer Level,RTL)模块,RTL模块与验证系统中组件之间电信号连接,创建电信号级控制和数据交互通道,以使RTL模块在芯片验证系统中得到正确和有效的验证。
[0037] 测试用例池用于存储通路型测试用例,通路型测试用例用于验证RTL模块的执行功能。本申请实施例中,可以创建测试用例池,按照RTL模块的数据处理路径划分通路,并按照通路构建通路型测试用例,并将构建好的通路型测试用例存储在测试用例池中,以便后续的仿真测试使用。
[0038] 通路用于表征RTL模块的数据处理路径,具体来说,通路是由RTL模块中的不同功能点模块组成,数据则在这些功能点模块之间按照一定的顺序进行处理。即一条通路包括从数据输入到数据输出的完整路径中所经过的一系列功能点模块。
[0039] 在一些实施例中,按照RTL模块的数据处理路径划分通路后,针对每条通路,可以进行级联合法性分析,检测该条通路中哪些功能点模块在通路中是可以启用的,哪些功能点模块是不可以启用的,从而基于合法性分析结果穷举所有可能的合法模块组合,合法模块组合包括该条通路中一个或多个功能点模块。最后构建每个合法模块组合对应的通路型测试用例,并存储至测试用例池,以用于后续的仿真测试使用。
[0040] 需要说明的是,穷举过程可以人工执行,也可以使用编程工具来实现。例如,可以编写Python脚本来自动化按通路穷举所有合法场景。
[0041] 在一些实施例中,可以检测通路中的非法模块、关键限制模块和自由使能模块,非法模块为通路中不允许使能的功能点模块,关键限制模块为通路中必须使能的功能点模块,自由使能模块为可自由使能或不使能的功能点模块。
[0042] 如果通路中不包含关键限制模块,则按照自由使能模块,生成合法模块组合,合法模块组合包括一个或多个自由使能模块。
[0043] 如果通路中包含关键限制模块,则按照关键限制模块和自由使能模块,生成合法模块组合,合法模块组合包括关键限制模块与一个或多个自由使能模块。
[0044] 例如,对每条通路分别进行级联合法性分析,得到的合法性分析结果如图4所示,标记有“×”标识的功能点模块为非法模块,当前通路中不允许该模块使能。标记“★”标识的表示关键限制模块,当前通路中该模块必须使能。其他未做标记的模块为自由使能模块,可自由使能或者不使能。
[0045] 以path0为例,path0的合法性要求H模块和J模块不使能,其他模块没有限制。因为H模块的功能是第0路和第1路两路数据做加法运算,path0没有第1路的数据(pathl的数据),因此path0中H模块不能使能。同理,J模块的功能是第0路和第1路两路数据做乘法运算,要求两路输入,path0没有第2路的数据(path2的数据),因此path0中J模块不能使能。则基于级联合法性分析,生成path0的合法模块组合可以为除H模块、J模块外的任意模块之间的组合,例如(A+D)、(A+F)、(A+I)、(D+F)(A+D+F)、(A+D+F+I+K+L)等,但是不能有(A+H)、(F+J)这种与H模块、J模块相关的模块组合。
[0046] 同理,以path02为例,path02的合法性要求J模块必须使能,H模块不使能,其他模块没有限制。因为path02要求第0路和第2路两路都接入数据流,第1路不能有数据流接入,因此J模块必须使能。由于第1路没有输入,所以H模块不能使能。则基于级联合法性分析,生成path02的合法模块组合可以为包括J模块、不包括H模块的任意模块之间的组合,例如(J)、(A+J)、(A+C+J)、(F+C+J+L)等,但是不能有(H+J)、(C+H+J)这种使能H模块的模块组合,也不能有(A+C)这种不使能J模块的模块组合。
[0047] 图4中其他通路的级联合法性分析可参照上述步骤,在此不进行列举。需要说明的是,通路的级联合法性分析可以根据芯片的实际情况确定,例如,实际场景中也可能有A模块和D模块不能同时使能的要求,则path0的合法模块组合就不允许出现(A+D),可以有(A+F)、(D+F)等合法模块组合。或者A模块的某个寄存器和C模块的某个寄存器之间存在联动关系等,path02的合法模块组合中A模块和C模块需要同时出现。
[0048] 可以理解的是,按照通路开发通路型测试用例,通路型测试用例包括单模块测试用例和级联测试用例,单模块测试用例用于验证通路中的单个功能点模块,如上述合法模块组合:(J)。级联测试用例用于验证通路中多个功能点模块的组合,如上述合法模块组合:(A+C+J)。使得测试用例的开发一步到位。
[0049] 在一些实施例中,为了便于维护和管理,对于每一种合法模块组合的通路型测试用例,创建一个唯一的测试用例名称。可以获取测试用例名称模版,按照测试用例名称模版,为合法模块组合的通路型测试用例命名,以得到测试用例名称,便于通过测试用例名称查找相应的通路型测试用例。
[0050] 在一些实施例中,针对于一条通路,可以在测试用例池中创建该通路的通路列表,将该通路对应的测试用例名称存储至通路列表。即在测试用例池中为每一条通路建立一个专门的列表,并将该通路相关的测试用例名称存储到该列表中,便于后续的查找和使用。
[0051] 例如,以图2所示的一级模块子模块1为例,对子模块1划分通路,得到如图4所示的7条通路,分别为path0、path1、path2、path01、path02、path12和path012。可以为7条通路分别创建一个对应的通路列表,分别为如图5所示的float_path0_list、float_path1_list、float_path2_list、float_path01_list、float_path02_list、float_path12_list和float_path012_list。每条通路对应的测试用例名称会存储到对应的通路列表中。
[0052] 以path2为例,path2对应的通路列表为图5中的float_path2_list,float_path2_list用于存放path2的测试用例名称。path2的合法模块组合包括(C)、(C+K)、(C+L)、(L)等,对应的测试用例名称可以为CRdmaFloatPath2(CEn+JDis+KDis+LDis)Wdma、CRdmaFloatPath2(CEn+JDis+KEn+LDis)Wdma、CRdmaFloatPath2(CEn+JDis+KDis+LEn)Wdma、CRdmaFloat Path2(CDis+JDis+KDis+LEn)Wdma等。将上述测试用例名称存放至float_path2_list。
[0053] 需要说明的是,上述测试用例名称仅为一种示例,可以基于实际情况设置其他测试用例名称模版,例如,合法模块组合:(C),对应的测试用例名称还可以为CRdmaFloatPath2(CEnJDisKDisLDis)Wdma。
[0054] 在一些实施例中,构建合法模块组合对应的通路型测试用例的步骤中,包括限定使能寄存器和其他寄存器构建随机约束。限定使能寄存器是指限定某个功能点模块是否启用。其他寄存器构建随机约束是指设置特定约束条件,特定约束条件用于指示某个功能点模块中寄存器的值应该符合什么样的模式或范围,包括寄存器的值必须处于某个有效范围内,寄存器之间的值需要满足某种逻辑关系,寄存器的值必须符合特定的编码或模式等。
[0055] 可以遍历通路中的功能点模块,将归属于合法模块组合中的功能点模块的使能标识设置为第一标识,并为使能标识设置为第一标识的功能点模块设置特定约束条件,第一标识用于表征使能功能点模块。将不归属于合法模块组合中的功能点模块的使能标识设置为第二标识,第二标识用于表征不使能功能点模块。最后设置通路型测试用例的具体实现文件,将具体实现文件添加到测试用例池中。
[0056] 例如,第一标识为1,第二标识为0。对于测试用例CRdmaFloatPath2(CEn+JDis+KDis+LEn)Wdma,设置多个寄存器,分别为C_en、C_others、J_en、K_en、L_en和L_others。配置C_en=1(表示C模块使能),C_others=特定约束(表示C模块的特定约束条件),J_en=0(表示J模块不使能),K_en=0(表示K模块不使能),L_en=1(表示L模块使能),L_others=特定约束(表示L模块的特定约束条件),由此,该条通路型测试用例开发完成。
[0057] 需要说明的是,通路型测试用例开发过程可以通过编写脚本来实现自动化。使用脚本可以快速生成测试用例,减少人工错误,并提高效率。本申请实施例对开发测试用例的工具不限制,可以根据实际情况选择工具或语言。
[0058] 可以理解的是,上述测试用例池中存储通路列表(list)、所有通路型测试用例的名称和通路型测试用例的具体实现,所有芯片验证的功能点均存放在测试用例池中维护。
[0059] 基于上述测试用例池,仿真控制组件用于控制仿真的开始和结束,从测试用例池中加载通路型测试用例,对通路型测试用例中的寄存器信息做约束下的随机化,配置功能寄存器给RTL模块,配置功能寄存器给参考模型组件,配置功能寄存器给比对组件,初始化数据并写入内存管理组件。
[0060] 该验证系统执行芯片验证的流程由仿真控制组件执行,仿真控制组件可以从测试用例池中获取通路型测试用例。读取通路型测试用例的使能标识,使能标识为第一标识或第二标识。再读取通路型测试用例中使能标识设置为第一标识的功能点模块对应的特定约束条件。然后按照特定约束条件生成寄存器配置信息,寄存器配置信息为使能标识为第一标识的功能点模块执行通路型测试用例时寄存器所需的配置信息。最后将寄存器配置信息配置给RTL模块,使得RTL模块中使能标识为第一标识的功能点模块执行对应的运算功能,以得到运行结果。
[0061] 数据包收发器用于从内存管理组件读取或写入数据,并将数据按照特定的总线协议(如AXI、AHB、APB等协议)打包或解包成数据包,然后将数据包通过电信号传输给RTL模块。
[0062] 内存管理组件用于管理内存空间,实现验证系统的统一内存管理。可以与验证系统中多个组件交互,并执行相应的操作,包括初始化指定内存区域的数据、读写数据等操作。
[0063] 参考模型组件为具有RTL模块的执行功能的功能模块,用于模拟RTL模块的功能。仿真报告组件将生成的寄存器配置信息配置给参考模型组件,以使参考模型组件基于寄存器配置信息运行,以得到参考结果。
[0064] 比对组件用于接收仿真控制组件发送的寄存器配置信息,根据寄存器配置信息得到RTL模块写出到内存管理组件中的运行结果的地址信息,然后从内存管理组件的对应地址读取运行结果,比对RTL模块的运行结果与参考模型的参考结果,以得到比对结果,并将比对结果写入到仿真日志文件中。
[0065] 仿真报告组件用于检索仿真日志文件,读取并分析仿真日志文件中的比对结果,根据比对结果生成并输出验证仿真报告,并输出验证仿真报告。例如,比对结果中包括错误(ERR OR)、失败(FAIL)等关键词,则生成表征仿真失败的验证仿真报告,否则生成表征仿真成功的验证仿真报告。
[0066] 本实施例中,提供通路型测试用例的开发方案和测试用例池的构建方案,实现测试用例开发标准化和规范化。仅一次开发即可完成全部通路型测试用例的构建,通路型测试用例中包含单个模块功能测试用例和级联测试用例。并且不需要对每个功能点模块逐一评估全部非法的级联场景,只需要评估每一条通路的合法场景,减少评估工作量。在完成通路级联合法场景分析后,可以穷举所有的合法测试用例组合,提升验证的完备性。该测试用例的规则清晰,按通路划分,然后穷举实现所有测试用例,标准化流程降低测试用例出错概率。
[0067] 下面以具体实施例对本申请提供的验证系统进行阐述。
[0068] 实施例一:以图4所示的path2为例开发通路型测试用例并进行仿真。
[0069] 根据图1所示的硬件架构,将子模块1划分为7条通路,分别为:path0、path1、path2、path01、path02、path12和path012。
[0070] 对于path2,在测试用例池中创建一个文本文件,即图5所示的float_path2_list,用于保存path2的所有通路型测试用例的名称。
[0071] 对path2进行级联合法性分析,path2的合法性分析结果为:J模块为非法模块,不允许使能,C模块、K模块和L模块为自由使能模块,可自由使能或者不使能。因为J模块是浮点乘法运算,如果使能J,则必须有两路输入,但是当前只有path2一路输入。
[0072] 基于合法性分析结果,穷举path2的所有合法模块组合,并为每一种合法模块组合设置测试用例名称,得到7种合法模块组合,分别为:(C)、(K)、(L)、(C+K)、(C+L)、(K+L)、(C+K+L)),则对应的测试用例名称分别为:CRdmaFloatPath2(CEn+JDis+KDis+LDis)Wdma、CRdmaFloatPath2(CDis+JDis+KEn+LDis)Wdma、CRdmaFloatPath2(CDis+JDis+KDis+LEn)Wdma、CRdmaFloatPath2(CEn+JDis+KEn+LDis)Wdma、CRdmaFloatPath2(CEn+JDis+KDis+LEn)Wdma、CRdmaFloatPath2(CDis+JDis+KEn+LEn)Wdma、CRdmaFloatPath2(CEn+JDis+KEn+LEn)Wdma,将上述7条测试用例名称添加至float_path2_list中。
[0073] 逐一开发float_path2_list中7种合法模块组合对应的通路型测试用例,并将通路型测试用例存储至测试用例池中。例如,对于CRdmaFloatPath2(CEn+JDis+KDis+LEn)Wdma测试用例,设置多个寄存器,分别为C_en、C_others、J_en、K_en、L_en和L_others。配置C_en=1(表示C模块使能),C_others=特定约束(表示C模块的特定约束条件),J_en=0(表示J模块不使能),K_en=0(表示K模块不使能),L_en=1(表示L模块使能),L_others=特定约束(表示L模块的特定约束条件)。并设置CRdmaFloatPath2(CEn+JDis+KDis+LEn)Wdma测试用例的具体实现文件,将具体实现文件添加到测试用例池中。
[0074] 通路型测试用例存储完成后,启动仿真,可以通过命令行指定执行通路型测试用例:CRdmaFloatPath2(CEn+JDis+KDis+LEn)Wdma。仿真控制组件从测试用例池中加载CRdmaFloatPath2(CEn+JDis+KDis+LEn)Wdma的具体实现文件(代码实现),并对其限定的寄存器做约束下的随机化处理,产生一组寄存器配置信息。
[0075] 仿真控制组件调用内存管理组件初始化内存区域的数据值,并将上述寄存器配置信息配置给RTL模块,以使RTL模块启用C模块和L模块,根据寄存器配置信息从内存管理组件的内存区域读取数据,通过C模块和L模块对数据执行相应的运算,并将运算结果写入内存管理组件的内存区域中。
[0076] 仿真控制组件等待RTL模块的任务完成信号,响应于任务完成信号,将上述寄存器配置信息发送给参考模型组件,参考模型组件基于寄存器配置信息从内存管理组件的内存区域读取数据,对数据执行相应的运算,并将运算结果写入到参考模型组件内部的内存区域。
[0077] 仿真控制组件将上述寄存器配置信息发送给比对组件,比对组件从内存管理组件和参考模型组件中分别读取RTL模块的运算结果和参考模型组件的运算结果,进行比对,并将比对结果写入到仿真日志文件中。
[0078] 仿真结束后,仿真报告组件分析仿真日志文件,如果检测到存在ERROR、FAIL等错误关键词,则输出表征仿真失败的验证仿真报告,否则输出表征仿真成功的验证仿真报告。
[0079] 实施例二:以图4所示的path01为例开发通路测试用例并进行仿真。为了便于穷举,如图6所示,为简化后的path01的模块构成。
[0080] 根据图1所示的硬件架构,将子模块1划分为7条通路,分别为:path0、path1、path2、path01、path02、pathl2和path012。
[0081] 对于path01,在测试用例池中创建一个文本文件,即图5所示的float_path01_list,用于保存path01的所有通路型测试用例的名称。
[0082] 对path01进行级联合法性分析,path01的合法性分析结果为:H模块为关键限制模块,必须使能,J模块为非法模块,不允许使能,其它模块可自由使能或者不使能。因为是2路输入,H模块必须使能,J模块不允许使能,如果使能J,则必须有path2的输入。
[0083] 基于合法性分析结果,穷举path01的所有合法模块组合,并为每一种合法模块组合设置测试用例名称,得到8种合法模块组合,分别为:(H)、(E+H)、(F+H)、(H+I)、(E+F+H)、(E+H+I)、(F+H+I)、(E+F+H+I)),则对应的测试用例名称分别为:CRdmaFloatPath01(EDis+FDis+HEn+IDis+JDis)Wdma、CRdmaFloatPath01(EEn+FDis+HEn+IDis+JDis)Wdma、CRdmaFloatPath01(EDis+FEn+HEn+IDis+JDis)Wdma、CRdmaFloatPath01(EDis+FDis+HEn+IEn+JDis)Wdma、CRdmaFloatPath01(EEn+FEn+HEn+IDis+JDis)Wdma、CRdmaFloatPath01(EEn+FDis+HEn+IEn+JDis)Wdma、CRdmaFloatPath01(EDis+FEn+HEn+IEn+JDis)Wdma、CRdmaFloatPath01(EEn+FEn+HEn+IEn+JDis)Wdma,将上述8条测试用例名称添加至float_path01_list中。
[0084] 逐一开发float_path01_list中8种合法模块组合对应的通路型测试用例,并将通路型测试用例存储至测试用例池中。例如,对于CRdmaFloatPath01(EEn+FDis+HEn+IDis+JDis)Wdma测试用例,设置多个寄存器,分别为E_en=1、E_others、F_en=0、H_en=1、H_others、I_en和J_en。配置E_en=1(表示E模块使能),E_others=特定约束(表示E模块的特定约束条件),F_en=0(表示F模块不使能),H_en=1(表示H模块使能),H_others=特定约束(表示H模块的特定约束条件),I_en=0(表示I模块不使能),J_en=0(表示J模块不使能)。并设置CRdmaFloatPath01(EEn+FDis+HEn+IDis+JDis)Wdma测试用例的具体实现文件,将具体实现文件添加到测试用例池中。
[0085] 通路型测试用例存储完成后,启动仿真,可以通过命令行指定执行通路型测试用例:CRdmaFloatPath01(EEn+FDis+HEn+IDis+JDis)Wdma。仿真控制组件从测试用例池中加载CRdmaFloatPath01(EEn+FDis+HEn+IDis+JDis)Wdma的具体实现文件,并对其限定的寄存器做约束下的随机化处理,产生一组寄存器配置信息。
[0086] 仿真控制组件调用内存管理组件初始化内存区域的数据值,并将上述寄存器配置信息配置给RTL模块,以使RTL模块启用E模块和H模块,根据寄存器配置信息从内存管理组件的内存区域读取数据,通过E模块和H模块对数据执行相应的运算,并将运算结果写入内存管理组件的内存区域中。
[0087] 仿真控制组件等待RTL模块的任务完成信号,响应于任务完成信号,将上述寄存器配置信息发送给参考模型组件,参考模型组件基于寄存器配置信息从内存管理组件的内存区域读取数据,对数据执行相应的运算,并将运算结果写入到参考模型组件内部的内存区域。
[0088] 仿真控制组件将上述寄存器配置信息发送给比对组件,比对组件从内存管理组件和参考模型组件中分别读取RTL模块的运算结果和参考模型组件的运算结果,进行比对,并将比对结果写入到仿真日志文件中。
[0089] 仿真结束后,仿真报告组件分析仿真日志文件,如果检测到存在ERROR、FAIL等错误关键词,则输出表征仿真失败的验证仿真报告,否则输出表征仿真成功的验证仿真报告。
[0090] 实施例三:以图4所示的path012为例开发通路测试用例并进行仿真。为了便于穷举,如图7所示,为简化后的path012的模块构成。
[0091] 根据图1所示的硬件架构,将子模块1划分为7条通路,分别为:path0、path1、path2、path01、path02、path12和path012。
[0092] 对于path012,在测试用例池中创建一个文本文件,即图5所示的float_path012_list,用于保存path012的所有通路型测试用例的名称。
[0093] 对path012进行级联合法性分析,path012的合法性分析结果为:H模块和J模块为关键限制模块,必须使能,其它模块可自由使能或者不使能。因为是3路输入,H模块必须使能,J模块必须使能。
[0094] 基于合法性分析结果,穷举path012的所有合法模块组合,并为每一种合法模块组合设置测试用例名称,得到2种合法模块组合,分别为:(H+J)、(H+I+J)),则对应的测试用例名称分别为:CRdmaFloatPath012(HEn+IDis+JEn)Wdma、CRdmaFloatPath012(HEn+IEn+J En)Wdma,将上述2条测试用例名称添加至float_path012_list中。
[0095] 逐一开发float_path012_list中2种合法模块组合对应的通路型测试用例,并将通路型测试用例存储至测试用例池中。例如,对于CRdmaFloatPath012(HEn+IEn+JEn)Wdma测试用例,设置多个寄存器,分别为H_en、H_others、I_en、I_others、J_en和J_others。配置H_en=1(表示H模块使能),H_others=特定约束(表示H模块的特定约束条件),I_en=1(表示I模块使能),I_others=特定约束(表示I模块的特定约束条件),J_en=0(表示J模块使能),J_others=特定约束(表示J模块的特定约束条件)。并设置CRdmaFloatPath012(HEn+IEn+JEn)Wdma测试用例的具体实现文件,将具体实现文件添加到测试用例池中。
[0096] 通路型测试用例存储完成后,启动仿真,可以通过命令行指定执行通路型测试用例:CRdmaFloatPath012(HEn+IEn+JEn)Wdma。仿真控制组件从测试用例池中加载CRdmaFloatPath012(HEn+IEn+JEn)Wdma的具体实现文件,并对其限定的寄存器做约束下的随机化处理,产生一组寄存器配置信息。
[0097] 仿真控制组件调用内存管理组件初始化内存区域的数据值,并将上述寄存器配置信息配置给RTL模块,以使RTL模块启用H模块、I模块和J模块,根据寄存器配置信息从内存管理组件的内存区域读取数据,通过H模块、I模块和J模块对数据执行相应的运算,并将运算结果写入内存管理组件的内存区域中。
[0098] 仿真控制组件等待RTL模块的任务完成信号,响应于任务完成信号,将上述寄存器配置信息发送给参考模型组件,参考模型组件基于寄存器配置信息从内存管理组件的内存区域读取数据,对数据执行相应的运算,并将运算结果写入到参考模型组件内部的内存区域。
[0099] 仿真控制组件将上述寄存器配置信息发送给比对组件,比对组件从内存管理组件和参考模型组件中分别读取RTL模块的运算结果和参考模型组件的运算结果,进行比对,并将比对结果写入到仿真日志文件中。
[0100] 仿真结束后,仿真报告组件分析仿真日志文件,如果检测到存在ERROR、FAIL等错误关键词,则输出表征仿真失败的验证仿真报告,否则输出表征仿真成功的验证仿真报告。
[0101] 基于上述芯片验证系统。本申请的部分实施例中还提供一种芯片验证方法,应用于上述实施例所述的芯片验证系统。所述方法包括以下步骤:
[0102] 获取通路型测试用例。其中,通路型测试用例用于验证RTL模块的功能。通路型测试用例包括单模块测试用例和级联测试用例,单模块测试用例用于验证通路中的单个功能点模块,级联测试用例用于验证通路中多个功能点模块的组合,通路用于表征RTL模块的数据处理路径。
[0103] 读取通路型测试用例的使能标识,使能标识为第一标识或第二标识,第一标识用于表征使能功能点模块,第二标识用于表征不使能功能点模块。
[0104] 基于通路型测试用例生成寄存器配置信息,寄存器配置信息为使能标识为第一标识的功能点模块执行通路型测试用例时寄存器所需的配置信息。
[0105] 基于寄存器配置信息运行使能标识为第一标识的功能点模块,以得到运行结果。
[0106] 本说明书中各个实施例之间相同相似的部分互相参照即可,在此不再赘述。
[0107] 本申请提供的实施例之间的相似部分相互参见即可,以上提供的具体实施方式只是本申请总的构思下的几个示例,并不构成本申请保护范围的限定。对于本领域的技术人员而言,在不付出创造性劳动的前提下依据本申请方案所扩展出的任何其他实施方式都属于本申请的保护范围。