牛文升 王瑞刚 张磊 马晓娜
摘要:文章采用通用验证方法学(UVM)搭建验证平台,以高速光纤传输系统中的数字信号处理芯片的盲均衡器作为验证对象,重点分析了UVM验证平台的搭建思想,产生随机化的测试向量,对盲均衡器进行全面验证,从而达到覆盖率的要求,通过寄存器模型和自动化脚本的使用,提高验证效率和平台的可重用性。验证结果表明,通过这种面向对象的层次性建模方法,可以大幅缩短平台的维护和开发时间,采用该验证方法的功能覆盖率为100%,代码覆盖率为98%,翻转覆盖率为97%。
关键词:UVM;盲均衡器;寄存器模型;覆盖率;自动化验证
随着集成电路设计向超大规模发展,芯片验证工作的难度不断增大,验证的工作量已经占到整个SOC研发的70%左右,因此功能验证效率己成为数字芯片研发进度的重要影响因素。UVM通用验证方法学(Universal VerificationMethodology)几乎完全继承于OVM (Open VerificationMethodology)同时又采纳了Synopsys在VMM (VerificationMethodology Manual)中的寄存器解决方案RAL (RegisterAbstraction Layer),并且还吸收了VMM中的一些优秀的实现方式,从而成为业界第一个通用、开放的验证方法学,代表了目前验证方法学的发展方向。UVM采用标准的分层验证结构,解决了验证平台可重用性与标准化的问题,提高了验证效率,加快了IC设计的速度。
本文以高速光纤通信系统中DSP芯片中的盲均衡器为例,应用UVM验证方法学搭建可重用与自动化的UVM验证平台,产生大量受约束的随机化激励,提取功能测试点,构造验证场景,通过覆盖率统计和回归迭代,对此子系统进行充分验证,并应用寄存器抽象层验证技术和解决方案RAL,高效地完成寄存器相关的验证任务。
1 UVM验证平台
UVM验证平台是基于System Verilog开发的验证环境开发库,常用的一系列标准类如:uvm transaction,uvmsequence, uvm_sequencer, uvm_agent, uvm_driver, uvmdriver,uvm test等,方便于继承和重载。uvm_obje ct类为父类,通过多层继承和重载,扩展为常用的uvm transation(TLM建模)、uvm_component(组件描述)以及uvm_phase(进程控制)3种基本类,并使用Factory机制对所属成员类,通过建立表格和宏完成注册管理,Phase机制是使平台中各种各样的uvm_component按照各自的需求可以阶段性执行的一种自动化的机制,增加了验证平台在各个阶段可控性和复用性。UVM验证平台架构主要是由通用验证组件(Universal Verification Component UVC)构成。每个uvc都是功能完备、可配置、封装好的验证环境。为了便于重用,UVM平台将uvm driver,uvm_sequencer,uvmmonit or封装成uvm_agent类,作为最重要的可重用部件,使用配置类将uvm_agent配置成active或passive模式,passive模式只实例化monitor,不驱动总线,仅负责监测总线。UVM验证平台是如图1所示的树形层次化结构管理,这些可配置可重用的uvc能够加快验证平台的搭建,缩短开发复杂IC的验证时间。
2 验证对象简介
该ASIC是一款相干接收解调数字信号处理芯片,支持高速长距离光传输系统和高速城域光传输系统,用于WDM产品线的线路侧光模块中,在该芯片内部,实现了ADC采样处理、动态时延跟踪,色度色散偏振膜色散的评估补偿、多路偏振信号的解复用及频偏和相偏的评估修正等。
本文以该芯片中CMA盲均衡器为验证对象,该盲均衡器的结构如图2所示,主要由输入输入数据FFT模块(DIF)、频域滤波模块(FLTR)、输出数据IFFT模块(DOIF)、系数更新与调整模块(CCA)、系数调整控制模块(CCTRL)、误差计算与收敛判决模块(EMSE)、系数FFT模块(CFFT)、数据抽取与整形模块(RECT)、APB解析模块(APB)等功能模块组成。该子系统主要用于补偿PMD色散,补偿残余CD,完成偏振解复用。
3 基于UVM的盲均衡器验证平台的搭建
3.1 UVM验证平台搭建思路
此验证平台使用标准的UVM架构,整个平台的搭建以uvc为基础,如图3所示,UVM验证环境和DUT通过虚接口连接。UVM验证平台包括事务数据、序列发生器、驱动器、监视器、参考模型、记分板等组件组成,本设计例化4个agent,inputagent, inner_agent, outputagent和cpuagent,inputagent配置为active模式,用于配置和检测总线,inner_agent和outputagent配置为passive模式,只用于检测总线,在测试用例的buildphase进行如下设置:其中inner_agent例化inner_ monitor用于采集DUT的中间节点数据。
uvm configdb# (uvm_act ivepassiveenum):: set (this,“mo cma env. mo lnputagent,,“me is active”,UVMACTIVE);
并使用configdb机制的参数传递功能在相应的agent中获得配置参数:
uvm
configdb# (uvm_act ivepas sive enum):: get (this,“”,“me is active”, meisactive):
通过传递的参数值决定是否需要例化驱动器和序列发生器,从而提高平台的可重用性。
寄存器抽象层的作用一方面用于验证对寄存器的读写功能,另一方面用于其他场景验证前配置寄存器的值,在本验证平台中,寄存器模型对于寄存器的访问使用前门模式,访问操作分为读和写2种,无论读或写操作,寄存器模型都会通过sequence产生一个uvm_re gbu sop的变量,此变量存储着操作类型和操作地址,如果是写操作,还包含要写入的数据。此变量的信息要通过一个适配器adapter转换后交给cpusequencer,随后交给cpudriver,由cpudriver实现最终的前门访问读写操作。
适配器用于变量uvm_regbusop与主机接口总线协议之间的转换,包括寄存器模型到接口总线的转换和接口总线到寄存器模型的转换,其中reg2bus的关键代码如下,bus2reg的正好相反。
virtual function uvm_sequenceitem reg2bus( const ref uvm_regbusop rw)
adapt er
tr=adapter:: typeid::creat(“adapter”):
tr. kind= (rw.kind==UVM_READ)? READ:WRITE;
tr.addr=rw. addr;
tr. data=rw.data:
return tr:
endfunction:reg2bus
CPUagent模拟CPU行为,在DUT刚启动时,用于配置器寄存器的值,只有配置完成后,驱动器才会发送激励,本设计使用virtual sequencer作为统一调度,利用其body的顺序执行完成2个sequence的同步。
task body() :
…‘
uvm_regsequence moregseq;
cmainputseq moinputseq :
uvm_doon (moregseq, psequencer. mo_cpus eqr):
$display(“cpu seqr finish!!!”):
uvm_doon(m oinputseq, psequencer. moinputseqr):
$display(“input seqr finish!!!”):
endtask:body
并且在virtual sequence中应用objection机制来控制验证平台的关闭。
参考模型采用matlab算法模型,UVM平台启动后,寄存器模型通过frontdoor方式将寄存器配置值写入DUT,sequencer负责调度sequence产生操作实务,并通过port机制将受约束的随机激励发送给driver,以inputagent为例:inputsequencerjinputdriver在agent例化后,通过TML连接。
modr v.seq item_port. connect (moseqr.seq itemexport):
Inner_ monitor与output_monitor分别在相应虚接口上采集DUT的中间节点和输出数据,将matlab仿真的中间节点数据和输出数据与DUT上采集的中间节点数据和输出数据发送到记分板中进行在线实时比对,通过数据匹配情况检查RTL设计与matlab算法模型的一致性,进而验证RTL设计的正确性。
3.2 保证RTL设计和参考模型输入激励和寄存器的一致性
本文使用寄存器模型RAL和inputagent协调工作向DUT及参考模型中输入激励和寄存器配置值,如图4所示,在不同验证场景下,将相应的寄存器配置值写入寄存器模型,寄存器模型将受约束的随机值或复位值与testcase配置的寄存器值一方面通过APB总线配置DUT中相应的寄存器,另一方面打印寄存器配置文件,matlab读取此文件为参考模型中寄存器相应的变量赋值。
寄存器配置完成后,virtual sequence调度inputsequence产生transaction,并通过port机制将受约束的随机激励发送给inputdriver,inputdriver将操作实务翻译成符合时序要求的pin级时序信号驱动到虚接口上做为DUT的激励,同时input_monit or在虚接口上采集数据通过分析口输发送给参考模型。
inputdriver将操作实务翻译成符合时序要求的pin级时序信号驱动到虚接口上作为DUT的激励,同时inputmonit or在虚接口上采集数据通过分析口输发送给参考模型。开始matlab仿真。
$system(“matlab
nosplash -nodesktop -r\“adapt_matlabtop; quit\””):
为了验证某些寄存器的在线切换功能,提高RTL设计的健壮性,inputagent既用于产生随机激励又用于产生寄存器配置值,当需要切换某些寄存器配置值时,只需在testcase中合适的仿真时刻对其重新赋值,便能同时更新DUT及参考模型中的寄存器配置值。通过这种设计思想就能保证DUT和refm的输入数据和寄存器配置值始终保持一致。
3.3 自动化验证流程
本平台利用Makefile的编译组织和perl脚本的文字处理功能,将编译、仿真、种子选择、测试场景选择、覆盖率收集、覆盖率数据回归、异常查看、结果分析等功能设计为自动化的流程。
验证人员通过向脚本中传入命令参数,调用相应的testcase即可验证相应的场景,从而提高验证效率,加快芯片研制进度。
4 验证结论分析
从芯片研制规范中提取功能点,构建验证用例125条,对此均衡器的FFT模块、蝶形滤波模块、系数调整控制模块、系数更新模块、误差计算与收敛判决模块进行充分验证。由于系数调整控制模块算法复杂,有大量控制信号,通过对此验证平台的重用,专门为控制模块搭建UVM验证平台,构建测试用例53条,所有规划的场景验证完毕后,使用makefile脚本对覆盖率一键回归,查看覆盖盲区,有针对性地规划验证场景,构造边界用例对RTL设计充分验证。目前,通过通过覆盖率回归迭代,功能覆盖率已达到100%,代码覆盖率达98%,toggle覆盖率可达95%。剩余难覆盖的情况比如RTL设计中的default语句,多个16位上报计数器计满保持功能等。
5 结语
本文在深入理解UVM验证思想的基础上搭建UVM验证平台,对高速光传输系统中相干接收解调DSP芯片中的盲均衡器进行了充分验证,灵活应用UVM中sequence机制、phase机制、factory机制configdb机制,寄存器模型等快速搭建可重用性和扩展性强的UVM验证平台,体现了UVM验证方法学的优越性。通过RTL设计与matlab黄金模型的关键数据比对,仿真波形检查来证明此盲均衡器设计的正确性,并且通过覆盖率回归迭代,高效且充分地完成验证工作。