|
发表于 2013-7-8 17:57:52
|
显示全部楼层
本帖最后由 liubin1222 于 2013-7-8 18:01 编辑
经常潜水,在这儿我说说我的理解。
由于我司一直在使用Questa,所以我只针对这个工具谈谈UVM中验证模块的波形方法,当然也会有Verdi的方法。
谈之前,我觉得首先我们需要区别开硬件信号和OVM/UVM验证环境中对象的成员变量的区别,前者以来event驱动,后者则可以说是软件的东西,响应时间可以忽略不计(不是硬件里delta cycle的仿真时间,简单来看,要比delta cycle小得多)。
能分清楚两者的区别,我想我们也就无法强求Verdi/Queta这些工具可以将OVM/UVM中对象的成员变量作为类似信号一样保存的波形上面,从原理上来看,我认为是由于没有任何event去标注那些成员变量的更改时间,当然这就是区别于硬件信号的深层原因,软件变量相比硬件信号的仿真速度优势也是从这里体现出来的吧。
Verdi在前些年的一些EDA厂商的工作年会上曾经展示过他们如何保存OVM/UVM这些高抽象级的Transaction,当然这需要借助Verdi的API函数。Mentor则在他们预编译的OVM/UVM库里面添加了一些自定义的Transaction记录方法【标准OVM基础上扩展的virtual task】:begin_tr()以及配合SV的系统函数$add_attribute(),这些使用方法在Questa的使用手册Questa10.1d Chapter12"Recording and Viewing Transactions"上有说明。我们小组目前在采用Questa这种方法完成事件级别的调试,当然这种方法的关键仍然在于用户自己去定义“event”,从而在特定的点去采集Transaction继而记录到波形上面。
Verdi的API函数也是采用类似的方法,他们几年前在EDA年会上面的一篇paper贴到这里,希望对楼主和大家有所帮助。
Title: UVM TRANSACTION RECORDING ENHANCEMENTS
Author: Rex Chen (rex_chen@springsoft.com), Bindesh Patel (bindesh_patel@springsoft.com), Jun Zhao
(jun_zhao@springsoft.com )
Company: Research & Development, SpringSoft, Inc., Hsinchu, Taiwan |
|