龙源期刊网 http://www.qikan.com.cn
基于UVM的SPI总线控制器验证
作者:齐宇心
来源:《科技风》2016年第07期
摘 要:本文通过应用UVM高级验证方法学,搭建适用于SPI总线控制器的验证平台和验证环境,并实现对其不同模式下数据传输的功能验证,提供了一种可重用的高效验证方法,有利于提高验证效率,缩短设计周期。
关键词:UVM;SPI总线控制器;仿真验证
随着超大规模集成电路的不断发展,验证工作已经占据整个研发周期的70%到80%,芯片验证的效率已成为影响芯片研发周期的重要部分,因此选用一种高效率、可复用的验证方法学成为芯片验证的关键。
UVM是Universal Verification Methodology的缩写,全称即通用验证方法学。
这种方法学是由Cadence、Mentor和Synopsys公司联合推出的验证方法学,起源于OVM(Open Verification Methodology)[ 1 ]。它采用了诸多当前主流验证方法学的优点,可以为工程师提供随机化的激励产生方式及具有可重构性的验证部件,以此来提升验证效率。 本论文结合在研发某芯片设计中的SPI总线控制器,应用UVM搭建仿真验证平台,完成SPI总线控制器的验证工作,为以后芯片研制中的SPI控制器验证提供了可重用的验证环境。 1 SPI总线控制器简介
SPI是一种高速的、全双工的同步通信总线,使用四根通信线路,极大的节约了芯片的管脚数目,同时节省了PCB版上布局空间[ 2 ]。出于简单易用的特点与特性,更多的芯片开始集成SPI总线接口。SPI通信双方为主、从关系,在这种工作模式下,通常有一个主设备和一个或多个从设备,设备之间可以用4线模式(双向传输时)或3线模式(单向传输时或单主单从工作模式)连接。
SPI是为环形总线的结构,主控制设备通过产生移位时钟来发起通讯。通讯时,主设备通过发送时钟信号来控制数据的输入输出,数据在总线上由MOSI输出,MISO输入,数据与时钟信号的关系为用户自主克配置,这样经过若干次时钟的改变,完成相应位数的数据传输。 在SPI传输中,数据是同步进行发送和接收的。数据传输的时钟基于来自主处理器的时钟脉冲而产生的总线控制器输出时钟,摩托罗拉没有定义任何通用SPI的时钟规范。然而,最常用的时钟设置基于时钟极性(CPOL)和时钟相位(CPHA)两个参数,CPOL定义SPI串行时钟的活动状态,而CPHA定义相对于数据位的时钟相位。CPOL和CPHA的设置决定了数据取样的时钟沿。
龙源期刊网 http://www.qikan.com.cn
2 UVM验证平台搭建 2.1 层次化验证平台
验证平台(testbench)通过硬件验证语言[ 3 ]搭建而成,验证工程师在功能验证中,在被测设计外部完成验证平台的搭建。验证通常采用向被测设计中施加不同的激励,然后观察DUT的输出结果,并且将这个结构和要求的期望值做比较,从而验证DUT是否正确。所以生成各种不同的激励是一个验证平台最重要的功能。
验证工程师通过将各种验证方法集成在验证平台中来提高验证的效率。为了能够集成更多高级的验证方法,引入了分层的验证平台的方法。这个过程中,抽象程度随着层次的增高而增大。
1)信号层是最底层的。DUT属于信号层,连接DUT和验证平台的信号也属于信号层。 2)命令层主要包含用于驱动DUT的激励同时监测从DUT中采集的输出信号。 3)功能层负责将上层的事务接收后分解为数据包发送给命令层,功能层的另一个作用就是预测结果,将预测的结果和DUT的输出进行对比。 4)场景层的作用主要就是产生激励。
验证环境是由以上几个层次相组合构成的。对于不同的DUT这个层次的划分会有所不同。虽然表面上看划分层次好像是提高了验证平台的复杂度,但是事实上这样做划分了各个模块的功能,提高了代码功能的清晰度,有利于验证平台的搭建。 2.2 通用UVM验证平台逻辑结构
一个典型的UVM验证平台[ 4 ],包括driver(驱动器)、monitor(监视器)、sequencer(序列器)、agent(代理器)、scoreboard(计分板)、reference model(参考模型)和env(环境)等通用验证组件(Universal Verification Component,简称UVC)。
UVM预先定义好了一个类uvm_component。UVM平台中的主要部件,driver、monitor、model、scoreboard等都要从这个类来派生而来。通过类派生的形式,把各个部件等都以树型结构组合起来,使验证平台的层次清楚,易于执行操作与更改。
整个UVM验证平台的各个部分就如同一棵倒置的树,如下面图1所示。 2.2.1 Driver
龙源期刊网 http://www.qikan.com.cn
UVM验证平台中的driver派生自uvm_driver。driver是UVM验证平台的最基本的验证组件,也是除reference_model之外最复杂的验证组件。driver会将由sequence受约束随机产生的事务级数据转变成DUT端口级别的数据,再驱动到与DUT的相连的接口上。 2.2.2 Sequencer
UVM验证平台中的sequencer派生自uvm_sequencer,并且在定义时会指定要产生的事务级数据类型。sequencer的作用非常简单,就是将sequence中产生的受约束的随机事务级数据发送给driver。 2.2.3 Monitor
对于一个很大项目来说,仅仅依靠波形来判断DUT的功能是否正确是不可靠也是不现实的。正确做法应该在验证平台中引入自对比机制,通过log文件中有无error来确定DUT的功能是否正确,这就要在验证平台中引入reference model、scoreboard和monitor。monitor是实现监测DUT行为的验证组件,其派生自uvm_monitor。 2.2.4 Agent
为了提高验证组件的可移植性,UVM中通常将driver、monitor和sequencer封装在一起,成为一个agent。因此不同的agent就代表了不同的协议。agent派生自uvm_agent。 2.2.5 Reference model
由于UVM验证平台需要自对比机制,即需要将DUT的输入数据与DUT的输出数据进行对比,所以需要在验证平台中引入reference model验证组件,reference model直接从
uvm_component中派生出来。reference model分两种,一种是与DUT的功能一样,相当于用不可综合的风格写出的与DUT功能相同的算法;另一种reference model相当于DUT的逆运算。 2.2.6 Scoreboard
scoreboard派生自uvm_scoreboard,是一个uvm_component,DUT的输入或输出数据与reference model输出的数据在scoreboard中进行自对比,对比成功会打印一个标志,比对失败也会打印一个标志,这样使验证工程师不用根据波形来判断DUT功能是否正确,减小了验证工作出错的机率。
3 基于UVM的SPI总线控制器验证平台搭建
结合UVM验证平台的逻辑结构与SPI控制器的工作模式,搭建完整的验证平台。基于上节UVM通用验证验证平台的搭建,SPI总线控制器UVM验证平台的框图如图2所示。平台主要包括两个SPI agent和reference model。其中,SPI sequencer用来获取SPI sequence,SPI driver将从SPI sequencer获取的事物级数据,即总线上预想发送数据的时序要求与数据内容发