基于eRM建立自动化的验证平台
扫描二维码
随时随地手机看文章
摘要:为了缩短SoC项目开发中前端验证的时间,实现自动化的可重用性验证环境平台,采用了eRM验证方法学,通过Sequence,BFM,Moni-tor,Scoreboard,Coverage等验证组件来实现此验证平台,并给出了基于此平台的一个应用实例,极大地提高了验证的效率和功能覆盖率。
关键词:验证时间;eRM;eVC验证平台;随机测试
集成电路已进入高速发展的阶段,半导体制造商极为成功的实现了摩尔定律的预期发展速度,为了缩短芯片上市时间,验证工程师必须保证芯片在流片前能得到很完备的验证。为了使日益复杂的项目达到理想的功能覆盖率,验证面临着巨大的挑战。eRM是一种基于e语言的验证方法学,通过Sequence,Bfm,Mkmitor,Scoreboard,Coverage等验证组件建立验证平台,可以对芯片进行Direct,Random等测试,并且可以很好地统计功能覆盖率,极大地据高了验证效率和生产率。
1 常用验证方法
从一个设计的功能验证来看,仅通过模块的接口界面(输入/输出信号端口)就完全可以验证器件的行为以及其实现的所有功能,否则该器件的属性就是不可控制的或是不可预测的。功能验证一般通过以下3种方法:黑盒法、白盒法、灰盒法。
黑盒法是指验证人员不需要用关心设计内部是如何实现的,所有的验证都可以通过接口完成,无需直接访问设计的内部状态。白盒法是是对设计的内部结构和实现具有完全的预测和控制能力,根据验证功能点可以迅速设置感兴趣的状态和输入激励,但不具备重用性。而灰盒法是介于二者之间,既有基于界面的验证组件,也有对内部状态控制和检查的组件,为提高验证效率和重用性,一般采用灰盒法。
2 eRM验证方法学
eRM验证方法学采用的是e验证语言,利用了e语言中的测试激励的生成、激励数据的驱动、输出结果的采样、输出响应的检查、功能覆盖率分析等组件,降低了验证过程中的人工干预,提高了验证的生产率。
2.1 eVC验证平台
eVC(e Verification Component)是基于eRM方法学的验证环境韵通称,eVC包括所有相关的验证组件,从编写测试激励到功能覆盖率的收集,从模块验证到系统验证,都可以通过eVC来实现。为了提高验证效率,验证人员都都会开发一个黄金eVC,在实际项目中只需要根据实际协议扩展该黄金eVC即可,在验证环境开发前期,节省了大量的代码。典型的eVC验证结构如图1所示。Agent是验证环境中最主要的验证组件,所有的验证组件一般都在Agent里例化,验证环境中的Agent一般相当于设计中的实体(由VHDL实现的设计)或输入输出信号端口(由Veri-log实现的设计)。在图1所示的eVC里,有2个Agent,RX Agent是从DUT信号端口收集数据,而TX Agent是指向DUT的信号端口发送数据。并且每个Agent都是按eRM方法学中的标准方式来构建的,Agent里一般包括以下组件:
Config:包括Agent的属性和行为,主要配置Agent的数量及其主动或被动的属性,一般由验证人员自主定义的。
Signals:该组件中定义了一些DUT的信号端口,验证环境通过这些端口可以访问DUT内部的所有信号。一般情况下,这些信号是以string类型来定义,并在信号前加sig_前缀,利用hdl_path()函数指定与其相连接的DUT信号。
Sequence:是指验证人员希望加载到DUT的数据流,利用sequence既可以定义不加任何约束的随机数据,也可以是某些特定的数据流。
Sequence Driver:此组件是连接BFM和sequence的纽带,将sequence生成的数据流发送到bfm,但不是直接驱动到DUT信号上,而是将数据打包为一个列表,然后由BFM加载到DUT中。
BFM:总线功能模型,该组件只能在Agent里例化,从图1中可以看出,BFM具有双端通道,不仅将Sequence Driver中传递的数据流加载到DUT的信号端口,而且可以取样需要检测的信号,和一般总线的功能相似。
[!--empirenews.page--]
Monitor:是一个被动组件,Monitor只能采样需要监测的DUT信号和输入数据,从图1中可以看出,Monitor只是单端通道,不能主动驱动信号。此外,Monitor可以监测DUT的输出响应,并对监测到感兴趣的信号发生变化时激活预定义的事件,通过此事件可以对当前输入的数据进行覆盖率统计以及对输出数据和信号的时序进行检查。
2.2 提高功能覆盖率的方法
为了提高验证的生产率和功能覆盖率,eRM提供了一套标准化的验证方法,典型的是测试激励采用随机(Random)验证和直接(Direct)验证方法。直接(Direct)验证法是指输入的激励是验证人员所期望的,相应的输出也是可以控制和实时监控的。但是直接测试方法不能验证正常功能以为的验证点,而且编写每条测试激励需要耗费大量的时间,一般只在验证前期调试验证环境或者发现DUT错误的时候才采用直接测试法来定位错误。随机验证法是为被验证子模块或系统产生一系列随机的输入序列。采用随机验证法可以发现一些设计人员没有预计到的但实际应用中会出现的情况,同时也能找出设计中很难发现的错误。此外,对于目前大多数设计来说,所有输入情况和内部状态的组合是无穷的,因此不可能将所有的情况都进行验证。解决此问题的办法就是有效的将直接验证法和随机验证法结合起来。eVC中提供的sequence可以很好地实现以上2种验证方法,在编写测试激励时,可以对Sequence加入任何的约束来产生测试数据。为了直观的看到功能覆盖率的情况,Spe-cman提供了图形化的覆盖率统计界面,每次验证完一条测试激励后,都可以生成一个覆盖率文件,当所有的测试激励验证完毕后,Specman一次读入所有的覆盖率文件,并且将每个功能点的覆盖率都是用百分比的框图来表示。
3 eVC验证平台的应用实例
下面通过一个应用实例来介绍如何基于eRM建立自动化验证平台,该实例中待测模块fifo是一个简单的存储模块,其验证平台如下图2所示。
在验证fifo时,先验证fifo的正常读写功能,再验证其读写的极端情况,即将fifo写满直至溢出或者读空,并且实时的监测fifo读出的数据及其状态。图2中的各个文件都是用e验证语言中的Struct或Unit来实现的。
(1)信号接口fifo_signal。fifo_signal中定义了所有需要与fifo相连接的信号,既可以是接口信号也可以是fifo的内部信号,fifo_bfm可以通过这些信号端口向fifo输入激励,也可以采样部分输出信号。
(2)总线驱动接口fifo_bfm。在fifo_bfm中,通过drive()函数将sequence里生成的数据加载入fifo中,也可以在总线端口产生fifo的读写时序,将数据和地址写入fifo中,此组件也可以采样验证人员感兴趣的信号。
(3)输入数据流fifo_seqtlence。在fifo_sequence中,主要是根据所加约束来产生fifo的测试数据。fifo_sequence的定义中包含三部分,分别是item,sequence_driver以及sequence_kind。其中item是模拟fifo需要的输入激励来定义,例如数据以及读写信号等。sequen-ce_driver将生成的数据包发送给fifo_bfm。sequence_kind是指定需要的各种sequence,一般由验证人员根据实际设计协议自主定义的。
(4)监视器fifo_monitor。fifo_monitor主要是对写入和读出fifo的数据进行监测,并实时检查fifo的状态是否与实际的输入相符。fi-fo_monitor是一个被动组件,不能驱动信号,本例中只能采集fifo的数据和状态信号并且释放在Item中定义的事件,作为fifo_coverage统计fifo的数据及其状态覆盖率的敏感事件。
(5)fifo_coverage组件。fifo_coverage中定义了所有的需要统计覆盖率的数据,例如统计fifo的状态变化、写入的数据等,并在每验证完一条测试激励后,可以实时的观测到该覆盖率的变化。
(6)评分板fifo_sb。fifo_sb是一个用来做自动化比较的组件,并对输入的激励进行一系列的处理,预先得到一个绝对正确的输出结果,并与从fifo中fifo_monitor采集到的输出数据逐一进行比较,如果二者的数据或时序不同,就会报出错误信息。
(7)eVC中expect和check检查。在eRM中,提供了一些特定的检查时序的函数和语法,和Verilog中断言Assert一样,使用Expect或者Check可以将fifo的设计规范中的fifo_empty,fifo_full等状态的与实际在仿真器中的监测到的fifo状态进行比较,如果二者不相符,则通过函数dut_error()输出相应的错误信息。
4 结语
本文以fifo为例,采用了基于eRM验证方法学来建立自动化的验证平台,并详细介绍了fifo验证环境框架结构中各个组件的功能和实现方法,极大地提高了fifo的验证效率和功能覆盖率。该平台完全继承eRM验证方法学,主要采用了eRM中的直接测试法和随机测试法,具有较高的验证重用性,大大的缩短了实际项目开发中搭建验证环境的时间,并已得到了广泛的应用。