一种基于UVM验证方法学的SPI验证方法与流程

文档序号:17640490发布日期:2019-05-11 00:38阅读:2380来源:国知局
一种基于UVM验证方法学的SPI验证方法与流程

本发明涉及数字芯片的功能验证和验证方法学领域,尤其是一种基于uvm验证方法学的spi验证方法,通过验证平台的搭建,随机化激励的生成,功能覆盖率的收集,响应结果的自检等操作完成对spi的功能验证。



背景技术:

近年来,随着芯片集成度的不断提高,芯片的功能复杂度也大大增加,芯片的设计过程更加容易引入错误,验证工作变得更加艰巨。在集成电路设计中,验证工作占到了整个设计周期的一半以上。而验证的不充分导致的功能错误,是芯片首次投片成功率不高的主要原因。传统的验证技术已经不能再满足日益增长的验证需求,验证成为集成电路设计中的瓶颈。

spi是一种流行的串行总线接口,其主要优势是高速、全双工、简单易用,因其特性,如今越来越多的芯片内部都集成了spi总线接口,因此spi的功能正确性至关重要。为了满足外设多样性的要求,spi总线接口具有多种配置方式和工作模式,每种配置方式都需要添加大量的测试用例来确保正确性,这给传统的验证方法带来了巨大的挑战。

高级验证方法学引入了系统级硬件验证语言systemverilog,systemverilog是专门用于验证的语言,它使得验证环境的搭建变得更加高效。但仅仅有硬件验证语言还不够,uvm验证方法学是在硬件验证语言基础上发展起来,继承了vmm和ovm验证方法学的优点的一套系统级验证方法,它具备一整套使用硬件语言为基础的类库,这个库中提供的所有方法都可以使验证平台的搭建和测试用例的构造变得更加简单方便。



技术实现要素:

本发明的目的在于客服上述不足,提供一种基于uvm验证方法学的spi验证方法,搭建一个可重用性高、可扩展性强的apb总线系统验证平台,能较为可靠的对spi的各种配置模式进行验证。

为了解决上述技术问题,所述验证方法中的验证平台采用uvm验证方法学和硬件描述语言systemverilog完成,所述验证环境包括:

一测试用例test,用于例化配置验证平台,根据测试需求建立测试方案,测试用例名可在makefile的uvm_testname后指定,factory机制会根据所指定的测试用例名,自动例化出对应的测试用例实例;

一系列虚拟测试用例vseq,用于完成一系列测试用例seq执行的调度,通过`uvm_do_on()来为seq指定sqr,并通过raise_objection和drop_objection来控制相应taskphase的开始和结束;一虚拟激励产生模块vsqr,用于完成虚拟测试用例vseq的启动运行,接收vseq发送来的随机化数据包,并将数据包调度给指定的激励产生模块sqr;

一apb系统环境apb_env,用于完成apb系统中各组件的实例化,可根据需求完成模块的添加、连接、模块地址空间的分配;

一apb配置模块apb_master_cfg,用于自顶向下完成接口信号、地址空间、模块id的配置;

一apb总线代理模块apb_master_agt,用于完成apb系统激励驱动模块、响应收集模块、监测模块的实例化,建立各模块之间的tlm通信机制,通信的发起方和接收方分别通过blocking_port端口和blocking_imp端口相连接,根据uvm_is_active的值来判断是否例化monitor;

一spi系统环境spi_env,用于完成spi系统中,包括spi_cfg,spi_agt的声明例化,并通过uvm_config_db::set()函数将系统配置spi_cfg进行逐层的配置;

一spi配置模块spi_cfg,根据spi寄存器模型中的镜像值完成spi系统的配置;

一spi代理模块spi_agt,完成spi系统中驱动器、收集器、监测器、激励产生器的集成封装;

一spi寄存器模型spi_reg_mdl,为验证平台提供spidut寄存器的访问接口,spi_reg_mdl继承与uvm_reg_block,为spi中所有寄存器的集合,spi_reg_mdl中指定一个default_map来对寄存器的基地址、访问方式等进行配置,定义的所有寄存器均需要调用add_reg方法来将其添加到default_map中去。spi_reg_mdl中包含4个寄存器模型,分别为传输寄存器spdr_reg,状态寄存器spscr_reg,分频寄存器spdiv_reg,slave片选寄存器spss_reg,每个寄存器中均用configure对其操作方式、位宽、默认值等信息进行配置,并根据测试要求,加入了功能覆盖率,通过在每个寄存器内加入sample()函数,使得各寄存器能自动的收集功能覆盖率;

一格式转换模块adapter,由于通过寄存器模型产生的数据包的类型为uvm_reg_bus_op类型,需要转换为apb总线支持的类型才能使用,模块内部主要由两个函数构成,reg2bus()和bus2reg()。reg2bus()主要在通过寄存器模型进行前门写操作中,完成寄存器模型数据类型向apb总线数据类型的转换;bus2reg主要在通过寄存器模型进行前门读操作中,完成apb总线数据类型向寄存器数据类型的转换;

一激励产生模块sequencer,sequencer主要用于在其main_phase中启动对应的sequence产生,默认启动的sequence在test层通过uvm_config_db::set()设置,并将starting_phase传递给sequence,使得能在object类型的sequence中调用phase的函数raise_objection和drop_objection,控制整个验证平台的启动停止;

一激励驱动模块driver,根据总线的时序要求,将随机化数据包transaction中的数据转换为实际的激励信号驱动至interface,加入phase的跳转机制,使得复位信号有效时,driver能自动的跳转到reset_phase阶段,进行reset信号的驱动;

一响应收集模块collector,根据总线时序要求,对实际的响应信号进行采样并打包成新的数据包;

一监测模块monitor,在各个系统env中,driver和collector都会将驱动和收集到的数据包传给monitor,在monitor中进行两者数据的比较,保证总线数据驱动和收集的正确性,加入了功能覆盖组,对收集到的数据包进行功能覆盖率的统计;

一结果比对模块scoreboard,完成apb系统发送/接收到的数据包与spi系统接收/发送的数据包的比对检测,结果报告。

本发明使用uvm验证方法学和systemverilog验证语言,搭建可重用的apb验证系统,并基于此,完成了结构化spi验证平台的搭建,采用随机化测试,功能覆盖率导向的方式,对spi模块实施了结果自检的功能验证。

附图说明

图1为spi验证平台的系统框图。

图2为spi验证平台的树形层级图。

图3为uvm中phase的执行流程图。

图4为spi模块的结构图。

图5为spi模块的操作流程图。

具体实施方式

本发明验证平台的架构如图1所示,整个验证平台主要包括以下几部分:apb总线系统apb_env,spi总线系统spi_env,spi寄存器模型spi_reg_mdl,计分板scoreboard,apb和spi系统中均包含一个配置组件和一个代理组件,代理组件由激励产生器、驱动器、收集器、监视器组成,以上为验证平台的主要组件,在test层除例化上述组件外,还加入了sequence。

测试用例中的sequence均在virtualsequence中通过`uvm_do_on()任务进行调度,并由vsqr将各sequence产生的数据包发送给指定的sequencer。根据每项测试的要求,构建不同的virtualsequence,并将其添加到vseq_lib中,main_phase的raise_objection和drop_objection均分别在vseq的pre_body()和post_body()中执行;vseq_lib构建完成之后,需要在测试用例中通过uvm_config_db::set()函数将vseq_lib设置为vsqr的default_sequence。该验证采用的验证策略为,对spi的各项配置,均采用大量随机化数据的读写操作,通过读写数据的匹配情况和功能覆盖率,保证验证的完备性。

top层中会对接口apb_interface和spi_interface进行声明,例化spidut和test,通过interface建立spidut和test验证环境的连接,并通过uvm_config_db::set()函数将interface传递给验证环境中实际访问总线的组件driver和collector,interface中均加入了assertion机制来对总线上信号进行实时的监测。

整个验证平台通过top模块中的run_test()函数来启动,实例化的测试用例在makefile中的uvm_testname后指明,验证平台会通过factory机制,根据指定的测试用例名来实例化该类,之后按照uvm中的phase机制,依次执行各个phase中定义的程序,执行流程如图3所示,其中,build_phase会至上而下例化验证平台中的所有组件;connect_phase至下而上执行,建立所有组件之间的通信连接;start_of_simulation_phase中完成验证平台运行前配置信息的定义,并至顶向下进行配置,至此完成验证平台所有组件的构建与配置。

验证平台中各模块的行为主要在耗时的taskphase中执行。

在reset_phase中,apb系统driver和spi系统driver均会对各自的总线接口进行复位信号的驱动,test中会将寄存器模型各个字段的值复位都默认值。reset_phase执行结束后,整个验证平台复位完成,准备进入运行阶段。

验证平台运行阶段各组件的操作主要在main_phase()任务中定义实现,各组件的main_phase至下而上启动,并行执行。事务的主要执行过程如下:

vsqr按照配置随机的启动vseq_lib中的vseq,执行vseq中的pre_body()、body()、post_body()任务,在body()任务中,按照图5的操作流程进行,首先启动apb系统寄存器配置sequence,该sequence通过寄存器的前门访问方式对spidut的寄存器进行配置,随后在forkjoin中并行启动apb系统和spi系统的读写sequence,进行大量随机化数据的读写操作。vsqr会将产生的数据包传递给各sequence指定的sequencer,再由sequencer传递给对应的driver。

driver通过get_next_item收到包之后,提取数据包内的信息,按照协议时序要求,将数据驱动到interface上。apbdriver会一直监测apbinterface上的reset信号,一旦reset信号有效,将通过jump让整个验证平台跳转到reset状态,执行reset操作。在执行完发包操作之后,driver会调用put任务将数据包传递给monitor。

collector会一直监测总线信号,根据协议要求,实时采样总线信号,并打包成对应的transaction传递给monitor。

monitor主要收集驱动和采样的数据包,对其进行对比检测,确保数据的发送和采样无误,并进行功能覆盖率的收集。加入了event,在对应collector的put任务中收到包触发event,在对应driver的put任务中等待event被触发,来保证驱动的数据包和采样的数据包的同步。

apb_env和spi_env中的monitor会将收集到的采样数据包通过put()任务传递给scoreboard,scoreboard中维持了2个队列,用于收集来自apb_env和spi_env的数据包。在compare()任务中,根据采样到的寄存器的配置值,对apb_env中的数据和spi_env中的数据进行比较,报告比对结果,实现验证平台的自检功能。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1