只不过多了1008行一个开辟空间的代码,也就是我们在前面的文章里提到的clone=new+copy,那么问题就来了,这里copy调用的实际上是新new的这个tmp变量中的copy函数,即transaction里定义的copy函数,如果用户没有override do_copy函数的话(do_copy是UVM源代码留给用户使用的一个hook),那么调用的就是UVM源代码中的copy函数...
3.1.2 常用的派生自uvm_component的类 uvm_driver:所有的driver都要派生自uvm_driver,driver的功能主要就是向sequencer索要sequence_item,并将sequence_item的信息驱动到DUT的端口上,这相当于完成了从transaction级别到DUT能够接受的端口级别信息的转换。与uvm_component相比,uvm_driver多了一下几个成员变量: uvm_seq_i...
function void uvm_transaction::do_copy (uvm_object rhs);//做一些copy,把各个内部变量做copy function void uvm_transaction::do_record (uvm_recorder recorder);//记录initiator和accept time 9.function void uvm_transaction::enable_recording (string stream, uvm_recorder recorder=null);//根据stream生产st...
在上述代码中,my_transaction类定义了一个包含8位数据和有效位的Transaction。这个类继承自uvm_sequence_item,该类是UVM中所有Transaction的基类。构造函数用于初始化Transaction,print函数用于输出Transaction信息,方便我们在测试中进行调试。 旅行图示例 在UVM环境中Transaction的生命周期可以用旅行图来表示。旅行图描绘了Tran...
自动实现my_transaction中print、copy、compare这样的比较常见的结构体操作,简化my_transaction的实现。同时默认的pack_bytes(tr中的各个字段转换成byte流)和unpack_bytes(byte流转换成tr中的各个字段)也简化了driver、monitor的实现。 使用uvm_object_utils_begin和uvm_object_utils_end来实现my_transaction的factory注册,...
1. 前面的my_print,my_copy,my_compare函数,虽然各自不同,但对于transaction来说,都是类似的。使用UVM中的field_automation机制,可以自动实现这3个函数,不需要我们写,my_transaction: `ifndef MY_TRANSACTION__SV `define MY_TRANSACTION__SV class my_transaction extends uvm_sequence_item; ...
也许在前一篇文章中提到的my_transaction类中使用field_automation比较好理解,field_automation对于uvm_component类还有自动地使用config_db来得到某些变量的值的意义。 由于uvm_component相比uvm_object增加了新的特性,其必定有一定的损失。 相比uvm_object,uvm_component主要有两个限制。
uvm_sequence_item是从uvm_transaction派生而来的,它相比uvm_transaction添加了很多实用的成员变量和函数/任务。 uvm_sequence :所有sequence要从uvm_sequence派生,sequence就是sequence_item的组合。 config :所有的config一般直接从uvm_object派生,其主要功能就是规范验证平台的行为方式。config是把所有参数放在一个object...
当多个uvm_subscriber连接到一个analysisport时,每个uvm_subscriber都被传递同一个transaction对象的指针,即write()调用的参数。每个write()的实现都必须copy这个transaction对象,然后对copy的对象进行操作,以避免破坏传递相同指针的其他transaction对象内容。 UVM还包括一个Analysis_fifo,它是一个包括analysis_export 的uvm_...
`uvm_object_utils_begin(my_transaction) `uvm_field_int(dmac, UVM_ALL_ON) `uvm_field_array_int(pload, UVM_ALL_ON) `uvm_object_utils_end endclass 使用uvm_object_utils_begin和uvm_object_utils_end来实现my_factory的factory注册,在这两个宏中间,使用uvm_field宏注册所有字段,就可以直接调用copy,...