信号层定义了验证平台与DUT连接的接口(Interface)。验证平台通过此接口,驱动DUT的输入信号或者监听DUT的端口信号。命令层包含驱动器(Drive),断言(Assertion)和监视器(Monitor)模块。功能层包含处理器(Transaction)和检查器(check)模块。功能层包括产生器(Generator)模块。产生器随机产生事务,并将事务通过通道传到下层模块。测试层包括需要完成的随机测试例和直接测试例。
验证环境中还包括一个重要的模块功能覆盖率(functional coverage)。此模块中包含验证工程师定义的功能覆盖点,功能覆盖点可以分为激励覆盖点和行为覆盖点,激励覆盖点用来记录和反馈验证平台向DUT施加的激励,而行为覆盖点用来记录和反馈DUT的内部和输出行为。在验证过程中,仿真器根据定义的功能覆盖点统计出功能覆盖率,验证工程师在功能覆盖率的指引下添加测试例,直到功能覆盖率达到期望的要求,从而取保DUT的功能得到充分的验证。
2基于RVM方法学SD/MMC卡控制器模块级验证平台
图2为SD/MMC模块的验证平台。DUTGEN模块随机产生DUT所需的配置数据;GEN模块用于产生对文件的仿真操作实例,APB XAC-TOR将GEN模块的文件操作翻译为SD/MMC模块的控制指令,并更新文件系统的拷贝;APB DRV摸块按照APB总线标准实现对SD/MMC模块的寄存器配嚣。SLAVE端MMC/SD DRV负责模块接口信号的采样以及驱动,MMC/SD XACTOR模块用于实现SD卡协议;由于SD/MMC模块只支持单一插槽,所以每次仿真只需要一个CHECK模块用于数据的比较,如此在SLAVE端需要一个MUX开关用于选通XACTOR的数据。
该验证平台的中心思想使以事务和功能覆盖率为基础。验证平台的各个模块之闻通过事务进行通信。事务中定义了控制器命令的类型,卡的状态和验证平台的处理器与驱动器之间交互所需的变量;功能覆盖率由仿真器自动统计,他可以告诉验证工程师工作的完成情况,提高验证效率,并确保验证工作的完整充分。
3验证平台各个模块的具体搭建
验证平台由多个模块用通道连接构成,下面分析其中几个主要模块。
3.1生成器(generator)
产生器用于产生用户定义的数据对象(pack-ets,frames,instructions等)或事务(transactions)。如果要产生某个数据类的数据对象,需要在generator中声明这个数据对象,然后调用randomize()系统函数产生数据对象中的随机数据成员。
Generator通过channel与下层的transactor连接,这种连接SD/MMC卡验证平台中可以用以下代码实现:
3.2处理器(transactors)
Transactor类派生于rvm_xactor基类,所有的操作都定义在main_t()函数中。在main_t()中首先要使用fork join并行语句调用基类的main_t()函数。在env.vr中调用rvm_xactor::start_xactot(),rvm_xactor::stop_xactor(),rvm_xactor::reset_xactor()来启动,停止和重启用户定义的transactor。
在SD/MMC验证平台中xactor模块里也有两个xactor文件,apb_xactor.vr和sd_xactor.vr。他们完成的功能不同,但代码编写也相似,可以用如下代码简要描述:
3.3驱动器(driver)
驱动器(driver)的主要功能是将接收到的事务通过信号层的interface写入到DUT中。驱动器一般有一个与上层连接的输入通道(in_chan),一个与上层连接的输出通道(out_chan)和一个输出的虚拟借口(port)。
3.4调试和编译
编写完以上等几个模块后,通过编译生成各自的.vro和.vrh文件,在RVM平台上编写sdmme_env.vr文件调用这些.vrh文件。在sdmmc_env.vr文件里定义这些任务:gen_cfg(),build(),cfg_dut(),start_t(),wait_for_end_t(),stop_t(),cleanup_t(),report()。
4仿真波形的生成
完成以上操作后,再编写测试例,经过编译和调试,最后可以生成仿真波形,如图3所示。
根据SD卡的协议,SD卡有1根命令线(cmd),2根时钟线(clk,sdclk),和4根数据线(dat0,dat1,dat2,dat3)。它们的波形如图3所示,在卡的鉴别模式下,在cmd线上发送命令(ACMD41,CMD2,CMD3)和接收相应(response)来鉴别是否是SD卡。注意在发命令ACMD41之前,要先发送命令CMD56,因为根据协议发送了CMD56之后,后面接着发送的是ACMD命令。经过鉴别模式以后,我们知道是SD卡,现在进入数据传输模式。根据在cmd线上发送的命令,可以发送单模块数据,也可以发送多模块数据,协议规定,在默认情况下只在dat0上传输数据,但是如果在SD卡控制器的寄存器里把传输宽度设置成4,就可以在dat0,dat1,dat2,dat3上传输数据,在通过CRC效验码来检查数据是否出错,是否重传。
5结 论
本文系统的介绍了基于RVM验证平台的搭建过程,由此可知: (1)RVM是一个高效的验证环境,它以面向覆盖率分析的方法,大大加快了验证周期的收敛,提高了验证质量。
(2)RVM利用类封装及分层化结构建立测试平台的技术,从而大幅提高了代码可重用性。