如何设置基础测试环境以便与 inherit 类 一起使用?

How to set base test environment in order to use with inherit classes?

我写了axi4_stream测试环境。它工作得很好,但现在我需要使用 seq_item 来测试设计,它继承了上一个项目。这些项目覆盖 convert2string 和 do_compare 函数。

我想通过 seq_items 参数化所有 axi4_stream classes,但是在尝试这样做的一个小时后我得出结论,这只是一个痛苦,我需要朝不同的方向挖掘。

这里是我的 classes
的原型 原文:

class axi4_s_seq_item extends uvm_sequence_item;
class axi4_s_sequence extends uvm_sequence#(axi4_s_seq_item);
class axi4_s_sequencer extends uvm_sequencer#(axi4_s_seq_item);
class axi4_s_master extends uvm_driver#(axi4_s_seq_item);
class axi4_s_slave extends uvm_driver();
class axi4_s_monitor extends uvm_monitor;
class axi4_s_scoreboard extends uvm_scoreboard;
class axi4_s_agent extends uvm_agent;
...

我想改变的方式:

class new_axi4_s_seq_item extends axi4_s_seq_item;

class axi4_s_seq_item extends uvm_sequence_item;
class axi4_s_sequence#(type seq_item = axi4_s_seq_item) extends uvm_sequence#(seq_item);
class axi4_s_sequencer#(type seq_item = axi4_s_seq_item) extends uvm_sequencer#(seq_item);
class axi4_s_master#(type seq_item = axi4_s_seq_item) extends uvm_driver#(seq_item);
class axi4_s_slave extends uvm_driver();
class axi4_s_monitor#(type seq_item = axi4_s_seq_item) extends uvm_monitor;
class axi4_s_scoreboard#(type seq_item = axi4_s_seq_item) extends uvm_scoreboard;
class axi4_s_agent#(type seq_item = axi4_s_seq_item) extends uvm_agent;
...

我想我可以使用定义来更改 class 名称,但我仍然认为有 OOP 解决方案。

使用 UVM 工厂设置覆盖;不要尝试使用参数覆盖来做所有事情。这个 DVCon paper 是 pre-UVM,但仍然与 UVM 相关,用于解释参数化和继承之间的差异。