首页> 中国专利> 基于VMM验证方法学的MCU验证平台实现方法

基于VMM验证方法学的MCU验证平台实现方法

摘要

本发明公开了一种基于VMM验证方法学的MCU验证平台实现方法,输入所有可用应用程序代码或是由平台自身产生可约束的随机指令;实现MCU的C模型并给出所有存储单元以及特殊功能寄存器的值,通过直接程序接口(DPI)调用;根据存储单元模型为参照进行自动自检;描述各种功能覆盖率模型,并可以给出功能覆盖率结果。本发明能够搭建一个可移植,重用,扩展,完全自动检查的具有层次化结构的MCU验证平台。

著录项

  • 公开/公告号CN102096628A

    专利类型发明专利

  • 公开/公告日2011-06-15

    原文格式PDF

  • 申请/专利权人 上海华虹集成电路有限责任公司;

    申请/专利号CN200910201938.9

  • 发明设计人 朱思良;

    申请日2009-12-15

  • 分类号G06F11/36(20060101);

  • 代理机构31211 上海浦一知识产权代理有限公司;

  • 代理人戴广志

  • 地址 201203 上海市浦东新区碧波路572弄39号

  • 入库时间 2023-12-18 02:34:45

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2014-02-19

    授权

    授权

  • 2011-09-14

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20091215

    实质审查的生效

  • 2011-06-15

    公开

    公开

说明书

技术领域

本发明涉及一种8位MCU(微控制器)的验证测试方法,特别是涉及一种可以自动高效率严格验证MCU的基于VMM(VerificationMethodology Manual验证方法学手册)的MCU验证平台实现方法。

背景技术

以MCU作为芯片核心,MCU的功能正确性往往是至关重要的,尤其每款重新设计或者设计改动的MCU都需要经过大量的回归测试,甚至多次流片才能够真正使用到项目中。因此MCU的验证通常需要大量时间和人力投入。

通常验证MCU都会将应用程序读入ROM中,通过仿真观察波形以及输出来确认功能正确;每次只能根据实际应用程序测试对应的一部分MCU功能,缺少一个量化的指标;而且每次改动MCU需要重新检查结果,效率比较低,验证质量无法保证。

发明内容

本发明要解决的技术问题是提供一种基于VMM验证方法学的MCU验证平台实现方法,能够搭建一个可移植,重用,扩展,完全自动检查的具有层次化结构的MCU验证平台。

为解决上述技术问题,本发明的基于VMM验证方法学的MCU验证平台实现方法是:

待验证模块MCU采用Verilog(硬件描述语言)代码编写,MCU的参照模型(或称MCU的C模型)采用C语言编写,通过SystemVerilog(系统硬件描述语言)的直接程序接口(DPI)调用待验证模块MCU或MCU的参照模型;

使用文件读写方式,用磁盘文件作为中介进行待验证模块的自检;整体验证环境使用SystemVerilog编写;

SystemVerilog提供有约束的随机数生成,将MCU指令集进行分类,将同一格式的指令归为一类;根据测试用例的约束,随机生成指令以及指令所需的参数,将所有指令数据放入数据类VMM_DATA中;

所述指令通过通道传递到执行模块;所述执行模块中采用C语言编写一个汇编器,当通过直接程序接口将MCU的参照模型接入验证环境中时,汇编器将生成的汇编指令实时转化为十六进制代码;

当通过直接程序接口将MCU的参照模型接入验证环境中时,在每一条指令执行后写出一个参照结果;MCU的参照模型通过存储单元保存数据,内部特殊功能寄存器单元保存寄存器值,通过对比MCU的参照模型与待验证模块MCU的存储单元和特殊功能寄存器单元中的数据,来保证待验证模块MCU的每一条指令的工作状态和参照模型都是一致的;

实现包括ROM,RAM的SystemVerilog行为模型,并且通过后门直接将寄存器值通过通道传递给自检记分板;通过MCU的参照模型写出每一条指令后的寄存器值会保存下来,由自检记分板通过读取磁盘文件来读入,并同从存储单元行为模型通道传输过来的寄存器值进行自检;

将MCU的参照模型运行的结果和MCU的参照模型内部对应的特殊功能寄存器置位作为功能覆盖率模块的收集点,将关注的特殊功能寄存器值描述为功能覆盖模型,在仿真中自动监测,并在所有测试用例通过后给出一个最终的功能覆盖率。

本发明用SystemVerilog来搭建一个基于VMM验证方法学的可移植,重用,扩展,完全自动检查,具有层次化结构的MCU验证平台。本发明运用VMM验证方法学,能够实现年一个层次化的验证结构,可以较简单的移植并验证其他类型的MCU,抽象了MCU指令,并且通过约束产生随机指令激励,可以实现遍历所有指令以及地址,另外功能覆盖率模型能够收集并监测覆盖率。

本发明能节约验证时间,更快完成验证计划。

附图说明

下面结合附图与具体实施方式对本发明作进一步详细的说明:

图1是VMM简要框架结构图;

图2是本发明的验证平台框图。

具体实施方式

随着SystemVerilog成为IEEE(美国电气电子工程师学会)的P1800规范,越来越多的项目开始采用基于SystemVerilog的验证方法学来获得更多的重用扩展性,更全面的功能覆盖率,以及更合理的层次化验证结构。

随着设计的复杂程度不断增加,需要把更多的资源放到验证上,不但要求验证能够覆盖所有的功能,还希望能够给出大量的异常情况来检查待验证模块对应异常的处理状态。在传统测试方法下,上述要求往往是难以实现的。此外设计不断地重用,而验证也希望能够重用类似的验证模块,这就催生了层次化的验证方法。VMM验证方法学提供了基于SystemVerilog的验证方法,包括了有约束的随机数生成,层次化的验证结构,以及以功能覆盖率为指标的验证流程。

VMM是Verification Methodology Manual(验证方法学手册)的缩写,是由新思科技提出的基于SystemVerilog验证语言分支的方法学,其前身是基于Open Vera的RVM(Reference Verification Methodology)(参考验证方法学)。VMM提供了一整套验证的基础类库以及一个完整的验证流程,在这个流程里已经做好了相应的功能划分,并且已经做好基本类。从基本类可以扩展出针对项目的类,这样更加关注于功能验证而不必花费时间在验证环境的基础框架上。VMM提出了层次化的验证方法,可以有效的提高验证模块的移植性和继承性。另外利用SystemVerilog的有约束的随机数据生成的功能,配合功能覆盖率能够很快达到需要的验证目标,即100%的功能覆盖率。VMM的简要的框架结构如图1所示。

VMM提供了最基本的数据类VMM_DATA,可以把所有的数据和流程控制都放在VMM_DATA的扩展类里。另外可以在VMM_DATA的扩展类中封装对所述数据和流程控制的一些基本操作的函数和任务;通过对VMM_DATA的约束可以生成相应的数据包,这些数据包就封装在相应的类里面,随时可以通过内部的函数和任务对这些数据进行处理。这个封装了数据和函数的类就是执行模块。在图1中,执行模块层次中所有的经过通道传递的数据类都是从VMM_DATA扩展出来的数据类。所述的通道可以根据数据类用宏定义生成。通道类似于SystemVerilog中的信箱(mailbox),仅传输数据类也就是执行模块的通道。图1中所有实心粗箭头都为通道,在执行模块层次中所有的数据和流程控制都在VMM_DATA的扩展类中,通过控制扩展类里面的约束,甚至直接赋值来控制整个验证流程。在VMM_DATA的扩展类里做对应的约束,也就是作为测试用例;不同的约束也就给出了不同的配置,形成针对各个功能的测试用例。此外会有一个配置模块,针对整个验证环境配置数据都可以存放在这里,配置模块会控制数据包产生数量,以及基本的配置信息,用来控制整个验证流程的进度。有了这些配置信息和约束,接下来数据产生模块就会不断生成数据包,这些数据包都是在约束范围内的随机化的数据。

数据包在执行模块中被执行,也可以认为是解包。数据包被执行不但要取出对应的数据包,还要根据数据包中的流程控制标志位来确定配置流程或者是工作模式,同时会把数据包通过回调的方式发送给自检记分板做自检或是覆盖率模块做功能覆盖率收集。在图1中回调都以空心粗箭头描述,回调提供了一个简单的入口,通过这个入口可以任意添加或取消回调,对数据包进行复制,传递,更改。回调可以在不影响验证环境流程本身产生的同时,插入额外的操作。执行模块解析数据包后,对应的驱动模块就会根据配置流程对待验证模块的输入输出端口进行读写,这里的驱动模块可以为BFM(Bus Function Model总线行为模型)。经待验证模块响应灌入的激励,接收模块就可以从待验证模块输出读出响应,将数据重新赋予数据类,并通过通道传递给自检记分板进行自检,或者通过回调传递给覆盖率模块统计覆盖率。VMM中主要就是由自检记分板的自检来保证数据的正确性,由功能覆盖率模块来监测验证的进度,只有在功能覆盖率模块达到100%,并且代码覆盖率模块也达到一个较高的百分率的情况下,才能认为整个验证是通过的。

VMM方法学提出了一种层次化的验证结构,即将验证分为不同抽象层次,如图1中所标示。在测试用例中都是抽象层次最高的约束,在数据产生模块中会由这些约束生成数据,这就是通常所说的执行层。各个验证模块之间传递的都是数据类,之后驱动模块会再次根据数据产生配置流程或是根据协议发送数据,同时也就是从执行层到信号层的一个转换。接收模块会根据端口协议再次将数据组合成数据包,也就是从信号层到执行层的转换,接下来传递给执行模块来处理,实际上又回到了执行层。当数据回到高抽象度层次,数据或是控制位比对都不牵涉具体的时序关系,而所有的时序关系正确性可以在信号层通过总线行为模型以及断言(Assertion)验证接口协议。这种结构就带来较为清晰的层次,可以将整个验证分划为不同的验证模块,带来更高的效率,更好的继承移植性,对于同类型待验证模块可以重用执行层,对于系统级可以重用信号层。

此外VMM方法学提出了以覆盖率为目标,有约束的随机激励为途径的验证方法。在约束的控制下,可以产生随机组合的激励,随机激励在触碰到更多难以用直接测试用例验证的一些边界情况,能够利用VMM验证环境验证更多的测试用例。这里的覆盖率除了常用的代码覆盖率还有功能覆盖率,只要将所有需要验证的功能点都转化为功能覆盖率模型,那么在整个验证过程中,仿真工具会收集覆盖率信息。最后可以将功能覆盖率结果合并,只有100%的功能覆盖率才代表验证过程结束。

VMM方法学不但提供了建立验证环境的方法学,也提供了一整套验证基本类库,包含了验证模块的基本类,以及验证的流程的框架,另外包含了一些宏定义和消息机制。类库可以很快建立自己的验证环境,只要关注功能验证本身,而不需要过多考虑环境的底层运作。

基于VMM的MCU验证就需要充分利用VMM的特点,即有约束的随机数生成,自动数据对比检查,和功能覆盖率收集。

图2是本发明的一实施例,其中最上层区域是所有测试用例,最下部分是待测的MCU(待验证模块),整个中间部分即为验证环境。

待验证模块采用Verilog代码编写,MCU参照模型采用C代码编写,通过SystemVerilog的DPI(Direct Program Interface直接程序接口)调用待验证模块或MCU参照模型。考虑到存储单元数据量大,所述验证环境使用文件读写方式,用磁盘文件作为中介来进行自检。整体验证环境都使用SystemVerilog编写,包括测试用例,指令生成,端口驱动模块,ROM行为模型,RAM行为模型,寄存器行为模型,自检记分板以及功能覆盖率模块。

所述验证环境中VMM提供了有约束的随机数生成,可以将MCU指令集进行分类,将同一格式的指令归为一类,如表1所示,这样就可以将指令抽象化,通过一定的约束,随机生成指令以及指令所需的参数,将所有指令数据放入VMM_DATA中。

表1

  Nu Pattern  Ins 1  Ins 2  Ins 3  Ins 4  Ins5  Ins 6  Ins 7  Ins 8  Ins 9  Ins A  0  RN_A  MOV A,Rn  ADD A,Rn  ADDC A,Rn  SUBB A,Rn  XCHA,Rn  ANL A,Rn  ORL A,Rn  XRL A,Rn  1  RX_A  MOV A,Rx  ADD A,Rx  ADDC A,Rx  SUBB A,Rx  XCHA,Rx  ANL A,Rx  ORL A,Rx  XRL A,Rx  2  RI_A  MOV A,@Ri  ADD A,@Ri  ADDC A,@Ri  SUBB A,@Ri  XCH A,@Ri  ANL A,@Ri  ORL A,@Ri  XRL A,@Ri  MOVX A,@Ri  XCHDA,@Ri  3  DI_A  MOV A,#X  ADD A,#X  ADDC A,#X  SUBB A,#X  ANL A,#X  ORL A,#X  XRL A,#X  …  …  …  …  …  …  …  …  …  …  …  …

根据约束就可以生成随机的指令,同一类型的指令就可以随机出现,例如,实现以下约束:

constraint add_mode_decide_kind{

(addr_mode==RN_A)->kind inside{MOV,ADD,ADDC,SUBB,XCH,ANL,ORL,XRL};

(addr_mode==RX_A)->kind inside{MOV,ADD,ADDC,SUBB,XCH,ANL,ORL,XRL};

根据测试用例来约束指令生成,就是图1中的数据产生模块,指令通过通道传递到执行模块;所述执行模块可以选择使用随机生成的指令或是由外部输入的汇编指令文件。指令生成后,在执行模块中实现了一个汇编器,这个汇编器是由C代码实现的,当通过直接程序接口将MCU的C模型接入到验证环境中时,汇编器可以将生成的汇编指令实时转化为十六进制代码后输出给MCU参照模型和待验证模块。

所述MCU参照模型和待验证模块同样可以选择使用随机生成的指令(汇编代码)或是外部输入的汇编指令文件;接下来输入待验证模块MCU的程序ROM进行仿真,并将十六进制代码传递给MCU的C模型做为模型输入。另外待验证MCU还有部分外部接口,所述环境中还会产生对应的随机数输入到待验证MCU的输入端口和MCU的参照模型。(如图2端口数据以及端口驱动模块)

所述验证环境中实现一个用C语言描述的MCU参照模型,同样当通过直接程序接口将MCU的C模型接入到验证环境中时,可以在每一条指令执行后写出所有寄存器值(参照结果)。MCU通过存储单元(如附图2中C模型中的存储单元)保存数据,内部特殊功能寄存器来保存寄存器值,可以对比存储单元和特殊功能寄存器中的值(如图2将C参照模型的存储单元中的值传递给自检记分板,将RAM行为模型的值同样传递给自检记分板),来保证MCU的每一条指令的工作状态和参考模型都是一致的。所述验证环境中实现了包括ROM,RAM的SystemVerilog行为模型(如图2中的ROM行为模型、外部RAM行为模型、内部RAM行为模型、外部特殊功能寄存器行为模型,内部特殊寄存器行为模型),待验证模块通过输入输出端口对行为模型中的存储单元或是寄存器进行读写,行为模型通过后门直接将寄存器值通过通道传递给自检记分板。这样每次添加测试用例后都不需要观测波形或是生成参照结果,甚至可以直接将应用程序放入验证环境中加以测试。所述验证环境中通过MCU的C模型写出每一条指令后的寄存器值会保存下来,由自检记分板通过读取磁盘文件来读入,并同从存储单元模型通道传输过来的寄存器值进行自检。考虑到MCU的参考模型是用C语言实现的行为级模型,可以保证指令之间的结果是一致的,但单指令内部并不是准确的时序结果,因此,自检有一定模糊性,在几个时钟周期内寄存器值能够一致就可以通过检查,最后在输出文本中写出自检结果。

所述验证环境将MCU的C模型运行的结果和模型内部对应的特殊功能寄存器置位作为功能覆盖率模块的收集点,将关注的特殊功能寄存器值描述为功能覆盖模型,在仿真中自动监测,并在所有测试用例通过后给出一个最终的功能覆盖率。

根据以上描述的过程能够实现一个可以任意输入测试代码,完整检验整个MCU的工作状态,并有相应的功能覆盖率作为量化结果的MCU验证环境。

以上通过具体实施方式对本发明进行了详细的说明,但这些并非构成对本发明的限制。在不脱离本发明原理的情况下,本领域的技术人员还可做出许多变形和改进,这些也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号