UVM派生自uvm_object的常用类

常用的派生自uvm_object的类

既然uvm_object是最基本的类,那么其能力恰恰也是最差的,当然了,其扩展性也是最好的。恰如一个婴儿,其能力很差,但是可以把其尽量培养成书法家、艺术家等。

到目前为止uvm_object依然是一个相当抽象的类。验证平台中用到的哪些类会派生自uvm_object?答案是除了派生自uvm_component类之外的类,几乎所有的类都派生自uvm_object。换个说法,除了driver、monitor、agent、model、scoreboard、env、test之外的几乎所有的类,本质上都是uvm_object,如sequence、sequence_item、transaction、config等。

如果读者现在依然对uvm_object很迷茫的话,那么举一个更加通俗点的例子,uvm_ object是一个分子,用这个分子可以搭建成许许多多的东西,如既可以搭建成动物,还可以搭建成植物,更加可以搭建成没有任何意识的岩石、空气等。uvm_component就是由其搭建成的一种高级生命,而sequence_item则是由其搭建成的血液,它流通在各个高级生命(uvm_component)之间,sequence则是众多sequence_item的组合,config则是由其搭建成的用于规范高级生命(uvm_component)行为方式的准则。

在验证平台中经常遇到的派生自uvm_object的类有:

uvm_sequence_item:读者定义的所有的transaction要从uvm_sequence_item派生。transaction就是封装了一定信息的一个类,教程中的my_transaction就是将一个mac帧中的各个字段封装在了一起,包括目的地址、源地址、帧类型、帧的数据、FCS校验和等。driver从sequencer中得到transaction,并且把其转换成端口上的信号。从图中可以看出,虽然UVM中有一个uvm_transaction类,但是在UVM中,不能从uvm_transaction派生一个transaction,而要从uvm_sequence_item派生。事实上,uvm_sequence_item是从uvm_transaction派生而来的,因此,uvm_sequence_item相比uvm_transaction添加了很多实用的成员变量和函数/任务,从uvm_sequence_item直接派生,就可以使用这些新增加的成员变量和函数/任务。

uvm_sequence:所有的sequence要从uvm_sequence派生一个。sequence就是sequence_item的组合。sequence直接与sequencer打交道,当driver向sequencer索要数据时,sequencer会检查是否有sequence要发送数据。当发现有sequence_item待发送时,会把此sequence_item交给driver。

config:所有的config一般直接从uvm_object派生。config的主要功能就是规范验证平台的行为方式。如规定driver在读取总线时地址信号要持续几个时钟,片选信号从什么时候开始有效等。这里要注意config与config_db的区别。在上一章中已经见识了使用config_db进行参数配置,这里的config其实指的是把所有的参数放在一个object中,如10.5节所示。然后通过config_db的方式设置给所有需要这些参数的component。

除了上面几种类是派生自uvm_object外,还有下面几种:

uvm_reg_item:它派生自uvm_sequence_item,用于register model中。

uvm_reg_map、uvm_mem、uvm_reg_field、uvm_reg、uvm_reg_file、uvm_reg_block等与寄存器相关的众多的类都是派生自uvm_object,它们都是用于register model。

uvm_phase:它派生自uvm_object,其主要作用为控制uvm_component的行为方式,使得uvm_component平滑地在各个不同的phase之间依次运转。

除了这些之外,其实还有很多。不过其他的一些并不那么重要,这里不再一一列出。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!