为什么不是uvm_transaction构建UVM事务呢?

描述

什么是 UVM transaction?

UVM 中的事务是一个具有信号属性(例如地址和数据)以及错误、延迟等额外信息的类。总之,这个所谓事务封装了所有和DUT激励项相关的信息. 但是,我们无法仅通过单个事务去验证设计,我们需要一组相关的事务。

注意:这里的“相关”也正体现了验证工程师的经验,试想如果全依赖随机如何能够冲击到DUT 的corner case呢?

这里就引入了uvm sequence。

UVM中的一组相关事务称为uvm sequence,单个事务称为sequence items。当你开发一个事务项类时,需要扩展自uvm_sequence_item,而不是 uvm_transaction。

DUT

上面是事务项类的层次结构,其中tx_item就是我们施加给DUT的单个事务。

使用uvm_sequence_item而不是uvm_transaction 的优势

uvm_transaction 类是遗留下来的验证方案中的一部分,它的缺点是不知道上下文,即不知道自己是否属于一组事务中的一部分。

而uvm_sequence_item类中除了前面提到的接口属性之外,还加入了几个连接到外部世界的属性

举个例子,像内存读写这样的事情,一般都会有一个“响应”,它会告诉上游模块是否已经完成了读写操作以及读取的值。

uvm验证环境中的driver也可能同时处理多个sequence,所以同样需要将响应路由到正确的sequence。所以,uvm_sequence_item类带有一个sequence ID 属性,因此响应能够被返回到正确的位置(sequence)。

UVM sequencer就像是一个交通路口红绿灯,因为多个sequence可能会通过同一个driver激励DUT,其中sequencer会在sequence之间进行仲裁。

uvm_sequence_item中有一个uvm_sequencer的句柄(通过sequence的start方法传递),如下所示:  

my_sequence.start(env.agt.sqr);
sequence是可以分层的,一个sequence可以启动其他sequence,这种情况下每个 uvm_sequence_item 都有一个指向parent sequence的句柄。

结论

当开发UVM 测试平台时,事务类一定需要从 uvm_sequence_item 扩展,而不是uvm_transaction。

 




审核编辑:刘清

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分