如何设置基础测试环境以便与 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 相关,用于解释参数化和继承之间的差异。
我写了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 相关,用于解释参数化和继承之间的差异。