CN114757135B - 一种基于需求驱动验证的可编程逻辑器件验证方法及系统 - Google Patents
一种基于需求驱动验证的可编程逻辑器件验证方法及系统 Download PDFInfo
- Publication number
- CN114757135B CN114757135B CN202210318575.2A CN202210318575A CN114757135B CN 114757135 B CN114757135 B CN 114757135B CN 202210318575 A CN202210318575 A CN 202210318575A CN 114757135 B CN114757135 B CN 114757135B
- Authority
- CN
- China
- Prior art keywords
- test
- verification
- layer
- library
- demand
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F30/00—Computer-aided design [CAD]
- G06F30/30—Circuit design
- G06F30/34—Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
- G06F30/343—Logical level
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2273—Test methods
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Geometry (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明涉及可编程逻辑器件验证技术领域,公开了一种基于需求驱动验证的可编程逻辑器件验证方法及系统,该验证方法,包括以下步骤:S1,构建基于需求驱动的验证平台,并依据需求说明提取需求功能点,所述验证平台包括依次通信相连的命令层、功能层和信号层;S2,命令层根据需求功能点下发不同测试指令;S3,功能层提取任务和函数,执行测试指令并输出测试结果;S4,信号层提供被测件接口信号。本发明解决了现有技术存在的组件复杂、层次关系复杂、测试环境复杂度高、可重用性低等问题。
Description
技术领域
本发明涉及可编程逻辑器件验证技术领域,具体是一种基于需求驱动验证的可编程逻辑器件验证方法及系统。
背景技术
随着可编程逻辑器件的广泛应用以及用户对产品质量要求的提高,传统的仿真验证已难以满足日益增长的可编程逻辑器件验证需求,由于其验证抽象层次低、层次结构划分不清晰,使得可重用性不好。近年来,UVM、OVM、VMM等一类新的验证方法学的有力发展,提升了验证效率。研究表明,越是高层次化的验证则验证效率越高,而越是低层次化的验证则验证准确性越高。新的方法学属于TLM级验证,相比于传统的RTL级验证,是一种更高层次的验证方法。UVM主要是对结构相似的DUT进行验证,实际工程中DUT对象往往呈现的是多重接口特性,针对多重验证环境,通常在UVM中需要重新搭建验证环境,建立连接关系,设计层次化测试序列,使得验证的复杂度和出错概率都急剧增加。
通用的UVM验证平台分为TOP层、TEST层、ENV层、Interface层和DUT层5个层次,ENV层根据被测件的不同又做了进一步层次划分。整个测试平台由sequence产生激励信号,在虚拟序列器virtual sequencer(虚拟数据包)调度下,分别传递给driver,通过虚拟virtual interface接口,驱动DUT端口,scoreboard对接收来自各个monitor的监控信号进行比较并输出结果。最终实现了测试指令与测试设计相分离,测试设计与被测件相分离的设计思路,达到提高测试的效率和可重用性。
在通用的UVM验证平台中,一个driver只能接受一种sequence测试序列格式;各个组件之间信息传递采用port通信技术实现,一个agant中只能构造一个sequence的通信端口,端口连接关系具有严格对应要求,这种方式降低了可重用性,增加了复杂性。一个顶层的testcase是一组具体化的测试激励测试序列产生,测试序列产生层次化较低,当外部接口对测试序列结构产生变化,有多重验证需求时,需要重新配置不同测试环境,测试环境复杂度会急剧增加,这是一项非常难以忍受的设计。主要存在的问题如下:
接口数据格式协议支持相似的单一验证环境中,无法满足UVM设计多重验证环境,需要重新配置;
sequence被作为测试的最顶层,但却是处理的是底层具体的测试序列设计,抽象级别低;
以agent配置的各种port传递信息,各种port建立连接关系需一一对应,有两种操作模式,数据格式以8bit严格要求。复杂且重用性低;
采用了vif接口,但在连接处理中仍无法完全与dut隔离,有待提升。
尽管UVM验证方法学是业内一种主流的验证方法学,但是其中一些强制的工厂工作模式设计理念,使人们在一开始就很难能够简单地使用和正确理解,所有的验证环境组件在整合后才能使用,很难定位到错误来源,UVM在执行过程中还存在着难以处理的数据传递和同步化问题。
发明内容
为克服现有技术的不足,本发明提供了一种基于需求驱动验证的可编程逻辑器件验证方法及系统,解决现有技术存在的组件复杂、层次关系复杂、测试环境复杂度高、可重用性低等问题。
本发明解决上述问题所采用的技术方案是:
一种基于需求驱动验证的可编程逻辑器件验证方法,包括以下步骤:
S1,构建基于需求驱动的验证平台,并依据需求说明提取需求功能点,所述验证平台包括依次通信相连的命令层、功能层和信号层;
S2,命令层根据需求功能点下发不同测试指令;
S3,功能层提取任务和函数,执行测试指令并输出测试结果;
S4,信号层提供被测件接口信号。
作为一种优选的技术方案,步骤S2包括以下步骤:
S21,命令层先做被测对象和功能点识别;
S22,再根据识别结果提取测试任务和函数,执行测试;
S23,最后判决功能覆盖率是否满足条件,不满足则返回步骤S21,满足则结束测试并输出测试结果。
作为一种优选的技术方案,步骤S22中,执行测试包括:端口例化、定义工作时钟、设定测试循环次数、枚举待测件和/或待测功能点。
作为一种优选的技术方案,步骤S1中,构建的验证平台的功能层包括参考库、激励处理器;步骤S3中,功能层从参考库中提取任务和函数。
作为一种优选的技术方案,步骤S1中,构建的参考库包括激励器库、驱动器库、检测器库;步骤S3中,功能层从激励器库、驱动器库和/或检测器库中提取任务和函数。
作为一种优选的技术方案,激励器库用以实现激励产生,识别不同测试任务,产生测试序列的集合体。
作为一种优选的技术方案,驱动器库用以通过需求引导所有驱动生成,使得驱动与测试序列之间可以直接通信。
作为一种优选的技术方案,检测器库用以实现检测结果产生,产生检测结果的集合体。
作为一种优选的技术方案,激励处理器用以对所有测试序列进行创建、例化、随机化以及重组处理。
一种基于需求驱动验证的可编程逻辑器件验证系统,应用于所述的一种基于需求驱动验证的可编程逻辑器件验证方法,包括基于需求驱动的验证平台,所述验证平台包括依次通信相连的命令层、功能层和信号层;命令层用以根据需求功能点下发不同测试指令;功能层用以提取任务和函数,执行测试指令并输出测试结果;用以信号层提供被测件接口信号。
本发明相比于现有技术,具有以下有益效果:
(1)本发明创建了一种可集成化基础组件的参考库模型,实现激励100%隔离,建立广泛使用激励的方式。方法的特点组件独立、层次关系少、环境简洁、可重用性好,能满足不同需求和验证环境需要,经测试结果分析比较,新方法可快速应用于FPGA软件功能验证,有效提升工作效率;
(2)本发明搭建环境的测试代码量、文件数据数量、测试层数,以及单个功能点测试花费的时间、总的测试时间进行分析对比,通过对比,测试代码量有效减小60%,设计文件数量减少61.5%,测试层数复杂度减少40%,测试时间缩短66.7%,测试效率提升40%以上。可以看出,新方法不论在设计还是测试中都比UVM简单、高效,测试效果提升显著。在大型复杂多变的测试环境中,仿真速度、可重用性的提升效果都将会更加明显;
(3)本发明能从更宏观的角度去考察验证问题,可以最大程度地减少人工工作量,改变产品的测试方式。对于目前越来越复杂的验证需求,使用UVM等验证方法很大一部分时间放在了验证环境搭建中,而采用此方法,验证操作简单,能够根据需求定制出不同的参考库模型,且相互之间不会影响,不仅能减少很多繁琐的工作,还能为测试人员带来新思路,建立可持续集成的验证平台,通过参考库参数不断迭代累加和优化,为进一步打造智能化验证平台奠定基础;
(4)本发明利用需求之间存在的很多共性特点,提取了多重验证环境下的验证基础设施组件,创建出一种可集成化验证基础组件的参考库模型,利用需求驱动所有测试组件,做到了需求、激励、驱动、检测、被测件之间的100%隔离,创建出具有广泛使用的验证模式。新方法与UVM验证方法学相比,可重用性提升效果显著,具有组件独立、层次关系少、使用方便等特点,可满足不同需求和验证环境需要。举例对参考库的可重用性进行了有效性证明,最后对测试结果分析比较,表明新方法可以快速应用于多重环境的软件功能验证,提升工作效率。
附图说明
图1为现有技术基于UVM的验证平台的结构示意图;
图2为本发明基于需求驱动的验证平台的结构示意图;
图3为本发明命令层相关性映射例化示意图;
图4为本发明测试执行流程示意图;
图5为本发明功能层组件架构图;
图6为本发明sequence的映射示意图;
图7为本发明driv_lib处理架构图;
图8为本发明resu_lib处理架构图;
图9为本发明需求驱动组件间的消息传递示意图。
具体实施方式
下面结合实施例及附图,对本发明作进一步的详细说明,但本发明的实施方式不限于此。
实施例1
如图1至图9所示,为了解决背景技术所述的技术问题,本发明的目的是提供一种能够有效减少验证时间,提升验证效率,组件独立、层次关系少、环境简洁、可重用性好的验证方法。
为满足多重验证环境需要,一基于需求驱动的验证平台如图2所示。
基于需求驱动的验证平台包含命令层、功能层和信号层共3个层次,首先依据需求说明提取需求功能点,命令层根据需求功能点下发不同测试指令(testcase);然后功能层从参考库(Ref_lib)中的激励器库(seq_lib,测试序列库)、驱动器库(driv_lib)和检测器库(resu_lib)里提取任务和函数,执行测试指令并输出测试结果,信号层提供被测件(DUT)接口信号;最后根据功能覆盖率检验充分性,遍历所有功能点,完成需求的所有功能测试。
一个好的验证平台是要以需求为导向,需求改变验证平台,验证平台丰富需求,是需求与验证相结合的验证平台。
参考库(Ref_lib)是根据外部需求(Requirement specification)提取输入与输出变量,根据测试说明(Test specification)例化识别对象以及用例特征的表征参数,将多重验证环境的基础设施抽象出来,建立一种具有可重复性使用的通用性数据库。
命令层设计:
在需求说明中,一个功能点可以分解为标识、属性、行为和实体四个部分,功能点就是待测设计在特定的场景下所表现出来的行为及属性,不论什么样的功能点,通过分散的应用场景和通信场景能够聚合成一个完整的功能模型。通过分析每一个功能点的属性,明晰每个功能点需要在什么样的场景下能表现出预期需要的行为,就可以形成一个功能模型。首先按照需求对功能点进行列表化,然后通过枚举方法,将列表后的协议映射为代码标识,最后再根据功能点的具体操作内容,将功能点转换为命令层的具体可执行代码模型,如图3所示。
例化中使用typedef enum枚举方法列举出不同功能点test_task的例化名,枚举命名根据测试需要设计,`define是确定执行哪个功能点,当`define TEST_Case flash_erase时,表示对判断是否进行flash接口插除测试。测试命令是测试执行主要阶段,放在顶层完成,使用program automatic定义测试执行过程自动进行,测试执行流程示意如图4所示。
命令层作为顶层设计,主要包含端口例化、定义工作时钟、设定测试循环次数、枚举待测件和待测功能点等,先做被测对象和功能点识别,再根据识别结果从Ref_lib中提取测试任务和函数,执行测试,最后判决功能覆盖率是否满足,不满足则迭代进行,满足则结束测试。设计过程中使用initial fork…join_none可完成多个时钟产生。对于复杂功能点的测试设计,可多次调用Ref_lib库里的任务完成。工程师主要花费时间是按需求中的功能点构造出功能模型,其他基础组件的激励、驱动和检测结果直接从参考库中调用即可,从这点看,比UVM有很强的通用性和便捷性。
功能层设计:
功能层由参考库(Ref_lib)和激励处理器(seq_base)组成,分别提供验证平台所需的激励、驱动和检测三种基本功能。参考库的设计是将测试环境的基础设施抽象出来,定义为具有一定可复用的通用性库文件,包含了不同DUT需求的通用性提取,将seq_lib、driv_lib、resu_lib三者集合而成,如图5所示。
该层次建模组件基本实现功能包括:
1)seq_lib:基本功能是实现激励产生,能识别不同test_task,产生各种sequence(测试序列)的集合体,sequence之间相互独立。
2)driv_lib:基本功能是实现驱动产生,所有driv_lib需先建立一个任务:seq_lib调用,通过seq_base从seq_lib从提取sequence,能识别不同test_task,产生各种drive的集合体,drive之间相互独立,能根据test_task将sequence添加到不同的drive上。
3)resu_lib:基本功能是实现检测结果产生,能识别不同test_task,产生各种result的集合体,result之间相互独立。
4)seq_base:基本功能是对所有的seq_lib进行封装、激励重组处理等活动,并将激励传递给drive和result等组件。
seq_base设计:
采用一个公共的seq_base组件完成对所有sequence进行创建、例化、随机化以及重组处理,以class类的形式完成,如图6所示。首先是对sequence的类进行例化,如将seq1类例化成ra1,然后使用build进行创建,例化过程中将sequence的长度传递给动态数组,以便确定其具体长度,使用new()实例化ra1,assert(seq.randomize())对ra1进行随机化处理。crc_chk()是对ra1进行数组重组,使用covergroup开展覆盖率收集。
在设计sequence时,有时候会存在对输出的一组或多组sequence有其他额外要求,如对每次输出的一组sequence需进行CRC校验,并将校验数据合并到sequence发送给被测件。对应这类需求,可以在seq_base组件中完成,在build创建结束时使用task对sequence重新配置,产生客户需要的新的激励。
seq_lib库设计:
假设一个DUT,需求中有m个功能点,每个功能点需要一组测试序列,每组测试序列包含L个采样点:则所有的测试序列可表征为:
Seq={(zi,yi)|zi∈Rm,yi∈{1,0},i=1,...,L},
zi={fi1,...,fim},zi表示DUT的m个特性其中的一个功能点。yi表示第i个功能特性是否含有bugs,当yi=1表示至少有1个bugs,当yi=0表示没有任何bugs。最终,DUT的所有功能点特性都以测试序列数来建立表征关系,其结果用来预测一个新DUT。
若是一个bug存在一条路径中,所有的路径节点可以看作是测试序列数据的一些元素构成,比如可以是由一个数据包存在多个激励点,可以是不同顺序的数据、数据中某数据位、数据长度等影响,也可以是多个p的组合而成。如情况1:bug存在路径:p21,则p1-p2-p21的路径就是该bug存在路径,测试就是通过测试序列寻找出这些点,将这条路径上的点激活就能发现该bug。以此,设计测试序列就是将需求中激活路径的点采用列表形成数据帧格式,再将列表的数据帧转换成class类的sequence形式,最后通过多次随机遍历的方式寻找出sequence中存在的bug。
测试的可重用性包含了继承性的可重用性和组合性的可重用性,继承性的可重用性是指对已有的测试序列的属性和方法继承,在此基础上,增加或改变约束条件而产生一个新的测试序列;组合性的可重用性则是同一个测试序列,在不做改变的情况下,直接用在不同的被测件上。考虑多个设计DUT,每个DUT需求可能存在不同要求,就需要每个DUT都产生一个seq_lib。
sequence的可重用性放在seq_base组件中完成,含2个DUT接口测试,通过识别不同DUT,调用不同的seq_lib,并对seq_lib进行实例化、随机化、测试序列重组化处理以及参数传递等封装。
从两个方面进行库的可重用性证明:情况1)被测件u1的emif总线写操作时,需要使用被测件u1的emif_write激励;情况2)被测件u1的emif总线写操作时,需要使用被测件u2的emif_write激励。
两种情况的测试结果,从以上可以看出,不同待测DUT,只需要指定测试对象是u1还是u2,只需发送一句测试指令,就可以从参考库中提取不同的sequence直接供其他组件使用,从而也证明激励是具有可重用性。
driv_lib库设计:
通过需求引导所有drive生成,使得drive与sequence之间可以直接通信,driv_lib库设计使用模块(module)封装,采用task封装drive任务,主要包含sequence调用、各种接口驱动产生等任务。
如图6为driv_lib处理架构,包含了EMIF总线写、UART等接口驱动,DUT内的所有驱动器采用task第1次封装;使用program automatic程序将所有DUT的驱动器成员第2次封装,支持所有任务、函数和模块参数传递具有自动存储功能;在program automatic程序之外对sequence使用task调用封装,最后使用模块(module)总体第3封装,支持时序驱动,建立与DUT连接关系。
driv_lib设计原则:库内的每个驱动器使用task任务例化封装接口,接口的参数传递必须以ref形式定义,库内的接口信号命名不能重名,否则产生竞争现象;库的对外接口列举所需的时钟等外部关键信号。若是考虑验证多个设计DUT,考虑到所有可能情况以及可重用性,针对每个DUT使用模块(module)封装,形成一个文件,可以定义为DUT1的驱动器库driv1。若是有多个{dut1,dut2,…},则形成多个{driv1,driv2,…},而{driv1,driv2,…}集合则定义为新的驱动器库。
resu_lib库设计:
resu_lib实现方法如图8所示。期望结果通过seq_lib提取,seq_lib是一种静态数据,提取不受时间约束,可直接进行提取,实测结果通过DUT提取,DUT是一种时序电路,是一种动态数据,提取受时间约束,不能直接进行提取,
采用always@*作为在整个测试时序过程中提取参数,提取时根据不同test_task需求提取不同的接口参数,如使能信号、实测数据等,提取放在整个测试过程进行,即覆盖了期望结果也满足实测结果提取要求,通过判断`TEST_type,至少需要提取采样时钟、期望结果和实测结果3类参数。打印结果输出放在整个测试过程中进行,对结果提取放在program程序外进行,实施连续监控和打印,通过采样时钟分别提取期望结果和实测结果,根据评估准则,比较期望结果和实测结果,打印测试结果,最后可通过查看打印文件确认测试结果是否通过。
组件解耦与覆盖性分析:
通过命令层和功能层设计,完成对参考库模型,最后再通过TOP顶层执行测试工作,其组件解耦与覆盖率特性如图9所示。组件解耦主要表现在先是将需求分解为测试项和测试用例,TOP中识别测试项,通过seq_base组件调用gen_sequence,即提取seq_lib库中的测试序列,测试序列通过识别标识创建测试序列,表明测试是需求驱动,测试序列与测试平台、被测件之间被seq_base组件隔离,测试序列设计与时序、测试环境和被测件无关,仅是依据需求分解出的测试用例相关。因此,可以确认测试序列与测试平台、被测件之间被seq_base组件之间做到了100%隔离。同时测试执行过程中,测试的驱动器、检测器调用driv_lib库和resu_lib库中函数,对函数接口采用可重用的形式定义接口信号,也做到了驱动器、检测器与测试环境、被测件之间有效隔离。
测试功能覆盖性提升是通过两个方面实现,一方面是测试项覆盖率收集,另一方面是测试用例覆盖率收集。从图中可以看出,需求分解成测试项,在TOP中识别调用测试序列执行测试,通过seq_base完成收集测试项的覆盖率结果。需求分解成测试用例,在设计测试序列时采用动态数组,添加不同的随机化约束,覆盖所有测试用例,最后在seq_base中完成对测试序列中的所有测试点覆盖结果收集。
本发明的优点和积极效果在于:
搭建环境的测试代码量、文件数据数量、测试层数,以及单个功能点测试花费的时间、总的测试时间进行分析对比,通过对比,测试代码量有效减小60%,设计文件数量减少61.5%,测试层数复杂度减少40%,测试时间缩短66.7%,测试效率提升40%以上。可以看出,新方法不论在设计还是测试中都比UVM简单、高效,测试效果提升显著。在大型复杂多变的测试环境中,仿真速度、可重用性的提升效果都将会更加明显。
基于需求驱动的功能验证方法,能从更宏观的角度去考察验证问题,可以最大程度地减少人工工作量,改变产品的测试方式。对于目前越来越复杂的验证需求,使用UVM等验证方法很大一部分时间放在了验证环境搭建中,而采用此方法,验证操作简单,能够根据需求定制出不同的参考库模型,且相互之间不会影响,不仅能减少很多繁琐的工作,还能为测试人员带来新思路,建立可持续集成的验证平台,通过参考库参数不断迭代累加和优化,为进一步打造智能化验证平台奠定基础。
命令层相当于将UVM的测试层,作为顶层使用,通过枚举和查询的方式,下发各种testcase,主要测试指令包括被测对象(test_dut)、功能点(test_task),以及功能点对应的激励(sequence)、驱动(drive)和检测结果(result)调用等指令。
功能层相当于将UVM的场景层、功能层和命令层三合为一,是代理接收来自命令层的事务。在识别test_dut后,首先下发test_task指令,然后根据不同的test_task,从Ref_lib中选择性启动seq_lib的激励产生指令sequence、driv_lib驱动指令drive、resu_lib提取结果指令result,输出测试结果。同时过程中可能会增加时延、多轮测试次数等参数。
Ref_lib集合了seq_lib、driv_lib和result_lib三类库,采用SV验证语言搭建,将验证平台所需的基础设施独立出来,参数化表达,使用激励处理器(seq_base)对seq_lib中的激励sequence进行创建、例化、随机化及重组等封装,最终Ref_lib形成一个公共的参考库,其目的是不需要经常性的修改,便能在所有测试项目中通用。
基于需求驱动的验证平台包含命令层、功能层和信号层共3个层次,首先依据需求说明提取需求功能点,命令层根据需求功能点下发不同测试指令(testcase);然后功能层从参考库(Ref_lib)中的激励器库(seq_lib,测试序列库)、驱动器库(driv_lib)和检测器库(resu_lib)里提取任务和函数,执行测试指令并输出测试结果,信号层提供被测件(DUT)接口信号;最后根据功能覆盖率检验充分性,遍历所有功能点,完成需求的所有功能测试。
综上,本发明采用需求驱动验证功能方法:
以需求为导向,按照需求对功能点进行列表化,然后通过枚举方法,将列表后的协议映射为代码标识,最后再根据功能点的具体操作内容,将功能点转换为命令层的具体可执行代码模型。
采用seq_lib库实现激励产生,能识别不同test_task,产生各种sequence的集合体,sequence之间相互独立。
采用driv_lib库实现驱动产生,所有driv_lib需先建立一个任务:seq_lib调用,通过seq_base从seq_lib从提取sequence,能识别不同test_task,产生各种drive的集合体,drive之间相互独立,能根据test_task将sequence添加到不同的drive上。
采用resu_lib库实现检测结果产生,能识别不同test_task,产生各种result的集合体,result之间相互独立。
采用seq_bas模块所有的seq_lib进行封装、激励重组处理等活动,并将激励传递给drive和result等组件。需求分解成测试项,在TOP中识别调用测试序列执行测试,通过seq_base完成收集测试项的覆盖率结果。需求分解成测试用例,在设计测试序列时采用动态数组,添加不同的随机化约束,覆盖所有测试用例,最后在seq_base中完成对测试序列中的所有测试点覆盖结果收集。
将需求分解为测试项和测试用例,TOP中识别测试项,通过seq_base组件调用gen_sequence,即提取seq_lib库中的测试序列,测试序列通过识别标识创建测试序列,表明测试是需求驱动,测试序列与测试平台、被测件之间被seq_base组件隔离,测试序列设计与时序、测试环境和被测件无关,仅是依据需求分解出的测试用例相关。因此,可以确认测试序列与测试平台、被测件之间被seq_base组件之间做到了100%隔离。同时测试执行过程中,测试的驱动器、检测器调用driv_lib库和resu_lib库中函数,对函数接口采用可重用的形式定义接口信号,也做到了驱动器、检测器与测试环境、被测件之间有效隔离。
本发明公开的一种采用需求驱动验证功能的方法,通过分析业内芯片验证的主流通用验证方法学(UVM)的不足之处,提出了一种基于需求驱动的功能验证方法,创建了一种可集成化基础组件的参考库模型,实现激励100%隔离,建立广泛使用激励的方式。方法的特点组件独立、层次关系少、环境简洁、可重用性好,能满足不同需求和验证环境需要,经测试结果分析比较,新方法可快速应用于FPGA软件功能验证,有效提升工作效率。
实施例2
如图1至图9所示,作为实施例1的进一步优化,本实施例包含了实施例1的全部技术特征,除此之外,本实施例还包括以下技术特征:
一个完整的UVM验证平台包含测试层、场景层、功能层、命令层和信号层共5个层次划分,执行顺序又按phases机制细分为12个阶段,其验证平台架构如图1所示。
UVM平台包含了代理组件(agent)和环境组件(env)两大基本类,每个代理组件中封装了测试序列器,驱动器和监视器。环境组件封装了测试序列发生器、代理组件、参考模型、记分器,若是在多重环境时,则需要创建多个代理组件、多个环境组件。UVM不仅层次关系复杂,执行阶段较多,且在多重环境时,还需要花费大量的时间设计代理组件和环境组件。
这对于一个越来越复杂的设计环境来说是难以接受,随着电子设计复杂度的持续增长,需要有一种新颖、简洁且系统化的方法来创建验证平台。一个好的验证平台是以需求为导向,需求改变验证平台,验证平台丰富需求,是需求与验证相结合的平台。基于需求驱动的验证平台实现框图如图2所示。
基于需求驱动的验证平台包含命令层、功能层和信号层共3个层次,首先依据需求说明提取需求功能点,命令层根据需求功能点下发不同测试指令(testcase);然后功能层从参考库(Ref_lib)中的激励器库(seq_lib,测试序列库)、驱动器库(driv_lib)和检测器库(resu_lib)里提取任务和函数,执行测试指令并输出测试结果,信号层提供被测件(DUT)接口信号;最后根据功能覆盖率检验充分性,遍历所有功能点,完成需求的所有功能测试。
命令层相当于将UVM的测试层,作为顶层使用,通过枚举和查询的方式,下发各种testcase,主要测试指令包括被测对象(test_dut)、功能点(test_task),以及功能点对应的激励(sequence)、驱动(drive)和检测结果(result)调用等指令。
功能层相当于将UVM的场景层、功能层和命令层三合为一,是代理接收来自命令层的事务。在识别test_dut后,首先下发test_task指令,然后根据不同的test_task,从Ref_lib中选择性启动seq_lib的激励产生指令sequence、driv_lib驱动指令drive、resu_lib提取结果指令result,输出测试结果。同时过程中可能会增加时延、多轮测试次数等参数。
参考库(Ref_lib)是根据外部需求(Requirement specification)提取输入与输出变量,根据测试说明(Test specification)例化识别对象以及用例特征的表征参数,将多重验证环境的基础设施抽象出来,建立一种具有可重复性使用的通用性数据库。
Ref_lib集合了seq_lib、driv_lib和result_lib三类库,采用SV验证语言搭建,将验证平台所需的基础设施独立出来,参数化表达,使用激励处理器(seq_base)对seq_lib中的激励sequence进行创建、例化、随机化及重组等封装;最终Ref_lib形成一个公共的参考库,其目的是不需要经常性的修改,便能在所有测试项目中通用。
相比与UVM,新平台基于需求驱动,层次关系少,可重用性好,激励随机约束,测试设计难度降低,建立平台建立所需时间大为减少,减轻了工作负担。
命令层设计:
在需求说明中,一个功能点可以分解为标识、属性、行为和实体四个部分,功能点就是待测设计在特定的场景下所表现出来的行为及属性,不论什么样的功能点,通过分散的应用场景和通信场景能够聚合成一个完整的功能模型[13]。通过分析每一个功能点的属性,明晰每个功能点需要在什么样的场景下能表现出预期需要的行为,就可以形成一个功能模型。首先按照需求对功能点进行列表化,然后通过枚举方法,将列表后的协议映射为代码标识,最后再根据功能点的具体操作内容,将功能点转换为命令层的具体可执行代码模型,如图3所示。
例化中使用typedef enum枚举方法列举出不同功能点test_task的例化名,枚举命名根据测试需要设计,`define是确定执行哪个功能点,当`define TEST_Case flash_erase时,表示对判断是否进行flash接口插除测试。测试命令是测试执行主要阶段,放在顶层完成,使用program automatic定义测试执行过程自动进行,测试执行流程示意图见下图4所示。
命令层作为顶层设计,主要包含端口例化、定义工作时钟、设定测试循环次数、枚举待测件和待测功能点等,先做被测对象和功能点识别,再根据识别结果从Ref_lib中提取测试任务和函数,执行测试,最后判决功能覆盖率是否满足,不满足则迭代进行,满足则结束测试。设计过程中使用initial fork…join_none可完成多个时钟产生。对于复杂功能点的测试设计,可多次调用Ref_lib库里的任务完成。工程师主要花费时间是按需求中的功能点构造出功能模型,其他基础组件的激励、驱动和检测结果直接从参考库中调用即可,从这点看,比UVM有很强的通用性和便捷性。
功能层设计:
功能层由参考库(Ref_lib)和激励处理器(seq_base)组成,分别提供验证平台所需的激励、驱动和检测三种基本功能。参考库的设计是将测试环境的基础设施抽象出来,定义为具有一定可复用的通用性库文件,包含了不同DUT需求的通用性提取,将seq_lib、driv_lib、resu_lib三者集合而成,如图5所示。
该层次建模组件基本实现功能包括:
1)seq_lib:基本功能是实现激励产生,能识别不同test_task,产生各种sequence的集合体,sequence之间相互独立。
2)seq_base:基本功能是对所有的seq_lib进行封装、激励重组处理等活动,并将激励传递给drive和result等组件。
3)driv_lib:基本功能是实现驱动产生,所有driv_lib需先建立一个任务:seq_lib调用,通过seq_base从seq_lib从提取sequence,能识别不同test_task,产生各种drive的集合体,drive之间相互独立,能根据test_task将sequence添加到不同的drive上。
4)resu_lib:基本功能是实现检测结果产生,能识别不同test_task,产生各种result的集合体,result之间相互独立。
seq_lib库设计:
假设一个DUT,需求中有m个功能点,每个功能点需要一组测试序列,每组测试序列包含L个采样点:则所有的测试序列可表征为:
Seq={(zi,yi)|zi∈Rm,yi∈{1,0},i=1,...,L} (1)
zi={fi1,...,fim},zi表示DUT的m个特性其中的一个功能点。yi表示第i个功能特性是否含有bugs,当yi=1表示至少有1个bugs,当yi=0表示没有任何bugs。最终,DUT的所有功能点特性都以测试序列数来建立表征关系,其结果用来预测一个新DUT。
若是一个bug存在一条路径中,所有的路径节点可以看作是测试序列数据的一些元素构成,比如可以是由一个数据包存在多个激励点,可以是不同顺序的数据、数据中某数据位、数据长度等影响,也可以是多个p的组合而成。如情况1:bug存在路径:p21,则p1-p2-p21的路径就是该bug存在路径,测试就是通过测试序列寻找出这些点,将这条路径上的点激活就能发现该bug。以此,设计测试序列就是将需求中激活路径的点采用列表形成数据帧格式,再将列表的数据帧转换成class类的sequence形式,最后通过多次随机遍历的方式寻找出sequence中存在的bug。
test_type用来识别功能点标识(由test_task产生对应的标识),根据识别出的功能点不同,选取不同的sequence。使用NO.sequence表示测试序列号,如当测试test_type==dsp_write时,产生的是DSP总线写sequence,当test_type==flash_erase时,产生的是对FLASH进行擦除操作sequence。测试序列的产生只根据功能点来生成,不再与测试环境、被测件有关联。利用动态数组约束关联测试序列。图中采用16bit设计总线,设计的第1包数据内容:帧头、消息体、帧尾、地址等信息。动态数组在随机约束过程中,使用->或if{…}else{…}条件判决,约束中不识别begin…end语句,必须使用{…}指定一段的完整数组约束加以区分,若是不使用,则数组约束过多时会产生数组混乱现象。
equence的可重用性:
测试的可重用性包含了继承性的可重用性和组合性的可重用性[14],继承性的可重用性是指对已有的测试序列的属性和方法继承,在此基础上,增加或改变约束条件而产生一个新的测试序列;组合性的可重用性则是同一个测试序列,在不做改变的情况下,直接用在不同的被测件上。考虑多个设计DUT,每个DUT需求可能存在不同要求,就需要每个DUT都产生一个seq_lib,sequence可重用性如图8所示。sequence的可重用性放在seq_base组件中完成,如上图所示,含2个DUT接口测试,通过识别不同DUT,调用不同的seq_lib,并对seq_lib进行实例化、随机化、测试序列重组化处理以及参数传递等封装。
从两个方面进行库的可重用性证明:情况1)被测件u1的emif总线写操作时,需要使用被测件u1的emif_write激励;情况2)被测件u1的emif总线写操作时,需要使用被测件u2的emif_write激励。
不同待测DUT,只需要指定测试对象是u1还是u2,只需发送一句测试指令,就可以从参考库中提取不同的sequence直接供其他组件使用,从而也证明激励是具有可重用性。设计中以驱动不同测试激励测试序列建立,巧妙利用seq_base组件实现测试激励与其他组件完全隔离,激励设计需求定制化,可重用性好等特点,可以应用于不同的需求。
seq_base组件设计:
seq_base组件主要是完成对所有的sequence的创建、例化、随机化、重组处理,以及功能覆盖率收集。
采用一个公共的seq_base组件完成对所有sequence进行创建、例化、随机化以及重组处理,以class类的形式完成。首先是对sequence的类进行例化,如将seq1类例化成ra1,然后使用build进行创建,例化过程中将sequence的长度传递给动态数组,以便确定其具体长度,使用new()实例化ra1,assert(seq.randomize())对ra1进行随机化处理。crc_chk()是对ra1进行数组重组,使用covergroup开展覆盖率收集。
在设计sequence时,有时候会存在对输出的一组或多组sequence有其他额外要求,如对每次输出的一组sequence需进行CRC校验,并将校验数据合并到sequence发送给被测件。对应这类需求,可以在seq_base组件中完成,在build创建结束时使用task对sequence重新配置,根据不同的测试项标识,产生客户需要的新的激励。可以看出,激励仅通过seq_base类与外界联系,因此,激励实现了与被测件、测试环境之间的100%隔离。
driv_lib库设计:
通过需求引导所有drive生成,使得drive与sequence之间可以直接通信,driv_lib库设计使用模块(module)封装,采用task封装drive任务,主要包含sequence调用、各种接口驱动产生等任务。上图为driv_lib处理架构,包含了EMIF总线写、UART等接口驱动,DUT内的所有驱动器采用task第1次封装;使用program automatic程序将所有DUT的驱动器成员第2次封装,支持所有任务、函数和模块参数传递具有自动存储功能;在programautomatic程序之外对sequence使用task调用封装,最后使用模块(module)总体第3封装,支持时序驱动,建立与DUT连接关系。
driv_lib设计原则:库内的每个驱动器使用task任务例化封装接口,接口的参数传递必须以ref形式定义,库内的接口信号命名不能重名,否则产生竞争现象;库的对外接口列举所需的时钟等外部关键信号。若是考虑验证多个设计DUT,考虑到所有可能情况以及可重用性,针对每个DUT使用模块(module)封装,形成一个文件,可以定义为DUT1的驱动器库driv1。若是有多个{dut1,dut2,…},则形成多个{driv1,driv2,…},而{driv1,driv2,…}集合则定义为新的驱动器库。
drive的可重用性:对于多个待测DUT,每个DUT含有不同的drive要求,就需要每个DUT都产生一个driv_lib库,driv_lib库的可重用性举例证明:同一个驱动器在被测件u1的emif总线对特定地址写4个随机数,在被测件u2的emif总线对特定地址写3个随机数。
经测试,平台对u1的emif总线对特定地址'h601010写了4个随机数,对u2的emif总线对特定地址'h602020写了3个随机数,调用同一个emif_write驱动器命,发送两组不同的指令,便实现对不同DUT的emif总线写测试,从而证明了驱动器库的同一个驱动器能够在不同的DUT中可重复使用。
resu_lib实现方法如图8所示。
期望结果通过seq_lib提取,seq_lib是一种静态数据,提取不受时间约束,可直接进行提取。
实测结果通过DUT提取,DUT是一种时序电路,是一种动态数据,提取受时间约束,不能直接进行提取。
采用always@*作为在整个测试时序过程中提取参数,提取时根据不同test_task需求提取不同的接口参数,如使能信号、实测数据等,提取放在整个测试过程进行,即覆盖了期望结果也满足实测结果提取要求,通过判断`TEST_type,至少需要提取采样时钟、期望结果和实测结果3类参数。打印结果输出放在整个测试过程中进行,对结果提取放在program程序外进行,实施连续监控和打印,通过采样时钟分别提取期望结果和实测结果,根据评估准则,比较期望结果和实测结果,打印测试结果,最后可通过查看打印文件确认测试结果是否通过。
result的可重用性:与UVM相比,无需分开处理以及同步化处理等问题,处理方法简单,result_lib的可重用性举例证明:与drive的可重用性相似。
对被测件Dut1和Dut2的emif总线写功能测试同时做了2轮不同的测试序列测试,并打印出8次对比后的测试结果,其打印指令可满足一定的复用性。
组件解耦与测试覆盖性分析:
通过命令层和功能层设计,完成参考库建立,最后再通过需求驱动TOP层执行测试工作。其组件间的消息传递如图9所示。
先是需求被分解成测试项,如test_uart,......等,TOP层中识别出测试项,当发现测试项为test_uart时,分别调取参考库中激励器、驱动器和检测器。driv.gen_sequence(“uart_seq01”,17,cyc)表示提取测试项为test_uart下的uart_seq01测试激励测试序列,17为测试序列长度,cyc为测试序列的重复数,测试激励测试序列通过识别标识uart_seq01产生随机测试序列,激励与测试环境、被测件、需求之间被Seq_base组件隔离开来,使得测试激励测试序列设计不需要时序、测试环境和被测试等参数参与,仅依据需求分解出的测试用例来设计测试序列。同时,过程中调用驱动任务采用可重用的形式定义任务接口信号,uart_send(1,rx_in)表示串口发送函数,1代表奇偶特性,rx_in代表发送端口,激励与驱动、检测、被测件间做到了100%隔离。而UVM组件间信息传递是有严格的端口要求,因此解耦性比UVM会更好。
测试功能覆盖性实现是通过Seq_base组件的covport.sample()分别收集需求的测试项{_uart,......}和测试用例{uart_seq01,uart_seq02.....}完成,由于Seq_base组件实现了对所有测试序列的管理,因此覆盖率收集只需要对测试项、测试用例标识和测试序列特定值三个参数收集即可。1个测试序列中可以包含1个或多个测试用例,如串口的测试用例{uart_seq01,uart_seq02.....},同时,1个测试用例如uart_seq01采用的是动态数组设计,添加不同的随机化约束,也可以在进一步再将1个测试用例细分成更多个子测试用例{uart_seq01_1,uart_seq01_2.....},做到充分覆盖所有需求点。
UVM仅涉及测试用例,其测试用例覆盖需求功能人为因素影响较多,因此,新方法实现比UVM功能覆盖率更充分。
实验与结果:
为了便于分析对比,选取文献[15]UVM验证方法,与本方法对同一个项目进行验证,选取FPGA软件代码规模3千行左右,需求功能点26个,测试完成后对结果数据进行对比分析,测试及分析结果如表1所示。
表1测试性能参数比较
分别从搭建环境的测试代码量、文件数据数量、测试层数,以及单个功能点测试花费的时间、总的测试时间进行分析对比,与UVM相比,测试代码量的大大减小,设计一个UVM验证平台,一般需要设计3000~4000行代码,采用新方法,仅需要设计400~500行代码,在相同功能下设计代码量大为减小;设计文件数量减少61.5%,UVM设计文件数量一般至少是在13个以上,在多重验证环境中甚至翻倍,而新的方法设计文件数量一般只需5个,利用需求之间存在很多的共性关系,在多重验证环境中,新增代码减少效果明显,仅需要较小的修改就可重用;测试层数复杂度减少40%,测试时间缩短66.7%,测试效率提升40%以上。
功能覆盖率UVM只收集测试序列特定值1个对象,且存在人为因素影响;新的方法收集测试项、测试用例、测试序列特定值3个对象,收集方式完全追踪需求功能点,人为因素影响较小,覆盖对象更全面。
继承性的可重用性应用中,组件重用占比提升15.6%,在组合性的可重用性应用中,组件重用占比提升37.8%,在组合性中提升效果会更好。
可以看出,新方法不论在设计还是测试中都比UVM简单、高效,测试效果提升显著。在大型复杂多变的测试环境中,仿真速度、可重用性的提升效果都将会更加明显。
综上,基于需求驱动的功能验证方法,能从更宏观的角度去考察验证问题,可以最大程度地减少人工工作量,改变产品的测试方式。对于目前越来越复杂的验证需求,使用UVM等验证方法很大一部分时间放在了验证环境搭建中,而采用此方法,验证操作简单,能够根据需求定制出不同的参考库模型,且相互之间不会影响,不仅能减少很多繁琐的工作,还能为测试人员带来新思路,建立可持续集成的验证平台,通过参考库参数不断迭代累加和优化,为进一步打造智能化验证平台奠定基础。
本发明提出了一种基于需求驱动的功能验证方法,利用需求之间存在的很多共性特点,提取了多重验证环境下的验证基础设施组件,创建出一种可集成化验证基础组件的参考库模型,利用需求驱动所有测试组件,做到了需求、激励、驱动、检测、被测件之间的100%隔离,创建出具有广泛使用的验证模式。新方法与UVM验证方法学相比,可重用性提升效果显著,具有组件独立、层次关系少、使用方便等特点,可满足不同需求和验证环境需要。举例对参考库的可重用性进行了有效性证明,最后对测试结果分析比较,表明新方法可以快速应用于多重环境的软件功能验证,提升工作效率。
如上所述,可较好地实现本发明。
本说明书中所有实施例公开的所有特征,或隐含公开的所有方法或过程中的步骤,除了互相排斥的特征和/或步骤以外,均可以以任何方式组合和/或扩展、替换。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,依据本发明的技术实质,在本发明的精神和原则之内,对以上实施例所作的任何简单的修改、等同替换与改进等,均仍属于本发明技术方案的保护范围之内。
Claims (6)
1.一种基于需求驱动验证的可编程逻辑器件验证方法,其特征在于,包括以下步骤:
S1,构建基于需求驱动的验证平台,并依据需求说明提取需求功能点,所述验证平台包括依次通信相连的命令层、功能层和信号层;
S2,命令层根据需求功能点下发不同测试指令;
S3,功能层通过需求提取任务和函数,执行测试指令并输出测试结果;
S4,信号层提供被测件接口信号;
步骤S2包括以下步骤:
S21,命令层先做被测对象和功能点识别;
S22,再根据识别结果提取测试任务和函数,执行测试;
S23,最后判决功能覆盖率是否满足条件,不满足则返回步骤S21,满足则结束测试并输出测试结果;
步骤S22中,执行测试包括:端口例化、定义工作时钟、设定测试循环次数、枚举待测件和/或待测功能点;
步骤S1中,构建的验证平台的功能层包括参考库、激励处理器;步骤S3中,功能层从参考库中提取任务和函数;
步骤S1中,构建的参考库包括激励器库、驱动器库、检测器库;步骤S3中,功能层从激励器库、驱动器库和/或检测器库中提取任务和函数。
2.根据权利要求1所述的一种基于需求驱动验证的可编程逻辑器件验证方法,其特征在于,激励器库用以通过需求引导所有激励产生,识别不同测试任务,产生测试序列的集合体。
3.根据权利要求2所述的一种基于需求驱动验证的可编程逻辑器件验证方法,其特征在于,驱动器库用以通过需求引导所有驱动生成,使得驱动与测试序列之间可以直接通信。
4.根据权利要求3所述的一种基于需求驱动验证的可编程逻辑器件验证方法,其特征在于,检测器库用以实现检测结果产生,产生检测结果的集合体。
5.根据权利要求4所述的一种基于需求驱动验证的可编程逻辑器件验证方法,其特征在于,激励处理器用以对所有测试序列进行创建、例化、随机化以及重组处理。
6.一种基于需求驱动验证的可编程逻辑器件验证系统,其特征在于,应用于权利要求1至5任一项所述的一种基于需求驱动验证的可编程逻辑器件验证方法,包括基于需求驱动的验证平台,所述验证平台包括依次通信相连的命令层、功能层和信号层;命令层用以根据需求功能点下发不同测试指令;功能层用以提取任务和函数,执行测试指令并输出测试结果;用以信号层提供被测件接口信号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210318575.2A CN114757135B (zh) | 2022-03-29 | 2022-03-29 | 一种基于需求驱动验证的可编程逻辑器件验证方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210318575.2A CN114757135B (zh) | 2022-03-29 | 2022-03-29 | 一种基于需求驱动验证的可编程逻辑器件验证方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114757135A CN114757135A (zh) | 2022-07-15 |
CN114757135B true CN114757135B (zh) | 2023-07-18 |
Family
ID=82327263
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210318575.2A Active CN114757135B (zh) | 2022-03-29 | 2022-03-29 | 一种基于需求驱动验证的可编程逻辑器件验证方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114757135B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109684681B (zh) * | 2018-12-06 | 2023-05-16 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 应用uvm验证平台的高层次化验证方法 |
CN115373645B (zh) * | 2022-10-24 | 2023-02-03 | 济南新语软件科技有限公司 | 一种基于可动态定义的复杂数据包操作方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463497A (zh) * | 2020-12-09 | 2021-03-09 | 中国电子科技集团公司第五十八研究所 | 一种基于uvm的spi验证平台 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050289517A1 (en) * | 2004-06-24 | 2005-12-29 | International Business Machines Corporation | System and methods for client and template validation |
CN105004984A (zh) * | 2015-06-25 | 2015-10-28 | 深圳市芯海科技有限公司 | 一种自动化芯片测试方法 |
CN106503308B (zh) * | 2016-10-08 | 2019-03-19 | 中国电子科技集团公司第五十八研究所 | 一种基于uvm的can控制器ip验证平台 |
US11193975B2 (en) * | 2018-06-29 | 2021-12-07 | Intel Corportion | Compressed test patterns for a field programmable gate array |
CN109684681B (zh) * | 2018-12-06 | 2023-05-16 | 西南电子技术研究所(中国电子科技集团公司第十研究所) | 应用uvm验证平台的高层次化验证方法 |
CN114138667A (zh) * | 2021-12-09 | 2022-03-04 | 山东方寸微电子科技有限公司 | 一种soc芯片驱动程序自动化测试系统及测试方法 |
-
2022
- 2022-03-29 CN CN202210318575.2A patent/CN114757135B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112463497A (zh) * | 2020-12-09 | 2021-03-09 | 中国电子科技集团公司第五十八研究所 | 一种基于uvm的spi验证平台 |
Also Published As
Publication number | Publication date |
---|---|
CN114757135A (zh) | 2022-07-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109684681B (zh) | 应用uvm验证平台的高层次化验证方法 | |
CN114757135B (zh) | 一种基于需求驱动验证的可编程逻辑器件验证方法及系统 | |
US8402438B1 (en) | Method and system for generating verification information and tests for software | |
US7623981B2 (en) | Testing of embedded systems | |
CN107562635A (zh) | 嵌入式软件测试辅助系统 | |
CN105528290B (zh) | 基于脚本的嵌入式软件仿真及测试一体化平台的构建方法 | |
CN107368408A (zh) | 一种面向接口的软件故障注入自动化测试方法 | |
CN107562969B (zh) | 航空发动机控制系统软件的集成方法和装置 | |
US6197605B1 (en) | Method and device for test vector analysis | |
CN108460199B (zh) | Cni建模系统 | |
US7926024B2 (en) | Method and apparatus for managing complex processes | |
US8214195B2 (en) | Testing in a hardware emulation environment | |
CN111274142B (zh) | 一种基于扩展有限状态机的软件通信体系架构符合性测试建模方法 | |
CN111782539A (zh) | 一种基于国产操作系统的测试诊断一体化开发平台 | |
CN113961453A (zh) | 航空机载软件全数字仿真测试系统 | |
CN114036013A (zh) | 一种基于uvm的应答器芯片多模块同步验证平台和验证方法 | |
CN116663462A (zh) | 断言验证方法、断言验证平台、电子设备及可读存储介质 | |
CN114816980A (zh) | 一种嵌入式通信系统用自动测试装置及方法 | |
CN115688676A (zh) | 基于tlm的gpu联合仿真系统 | |
CN115686655A (zh) | 用于gpu ip验证的联合仿真系统 | |
CN116090376B (zh) | 芯片集成验证组件开发方法、装置及计算机设备 | |
CN116467211B (zh) | 一种基于数字化仿真环境的系统级测试验证方法 | |
CN111767232A (zh) | 一种装备测试程序集验证系统 | |
CN115618800A (zh) | 基于dpi的gpu联合仿真系统 | |
CN114780143A (zh) | 基于uvm的can控制器激励序列生成方法、装置和验证平台 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |