UVM Practice Chap 8

1. 如果声明了一个类型的正确的transaction之后,想要生成错误的transaction,一共有几种方法:
a. 使用原来的transaction,在调用transaction时,重载原来的约束P263;
b. 在原来的transaction的基础上,直接派生crc_transaction,在其中重载约束,在sequence中uvm do时,调用这个crc_transaction即可;
c. 做一个新的crc_sequence,在这个sequence中,使用crc_transaction,然后在case的build_phase中,使用新的crc_sequence,即将这个sequence传给sequencer的main_phase作为其default_sequence;
d. 可以在case中,直接用
factory.set_type_override_by_type(my_tranaction::get_type(),crc_err_tr::get_type()),对transaction进行重载;
e. 写一个新的sequence,在case的build_phase,用新的sequence重载掉旧的sequence;
f. 同样,可以重载driver等;
2. 不仅可以重载transaction类型的object,也可以重载component类型的,如monitor。
例如
set_inst_override_byte_type(“env.o_agt.mon”,my_monitor::get_type(),new_monitor::get_type());
这样就用new_monitor替代了my_monitor
3. 重载带来的优势是,如果所有的异常情况都使用一个参考模型实现,那么这个参考模型的代码量将会非常大。但如果将其分散到数十个模型,每个处理一种异常情况,就更加容易实现。在更换时,只需要重载即可。

猜你喜欢

转载自blog.csdn.net/hit_shaoqi/article/details/78326046