什么是 UVM transaction?
UVM 中的事务是一个具有信号属性(例如地址和数据)以及错误、延迟等额外信息的类。总之,这个所谓事务封装了所有和DUT激励项相关的信息. 但是,我们无法仅通过单个事务去验证设计,我们需要一组相关的事务。
注意:这里的“相关”也正体现了验证工程师的经验,试想如果全依赖随机如何能够冲击到DUT 的corner case呢?
这里就引入了uvm sequence。
UVM中的一组相关事务称为uvm sequence,单个事务称为sequence items。当你开发一个事务项类时,需要扩展自uvm_sequence_item,而不是 uvm_transaction。
上面是事务项类的层次结构,其中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的句柄。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !