我有以下交易:SystemVerilog-如何用初始化编写构造函数?
typedef enum {READ = 0, WRITE = 1} direction_enum;
//Transaction
class axi_transaction extends uvm_sequence_item();
bit id = 0; //const
bit [31:0] addr;
bit [2:0] size = 0'b100;//const
direction_enum rw;
bit [31:0] transfers [$];
//factory registration
`uvm_object_utils_begin(axi_transaction)
`uvm_field_int(id, UVM_ALL_ON)
`uvm_field_int(addr, UVM_ALL_ON)
`uvm_field_int(size, UVM_ALL_ON)
`uvm_field_enum(rw, UVM_ALL_ON)
`uvm_field_int(transfers, UVM_ALL_ON)
`uvm_object_utils_end
//constructor
function new(string name = "axi_transaction");
super.new(name);
endfunction: new
endclass: axi_transaction
我想扩展新的功能,这样我就可以通过初始化一些交易会员的参数(如地址,转移)初始化序列中的交易:
ax_trx = axi_transaction::type_id::create();
如何编写事务的构造函数,以及如何初始化顺序器中的事务?
@ dave_59-你能举个例子吗? – sara8d
我不明白构造函数参数不是很好的OOP编程实践。当然,添加新的参数会破坏用户代码,但通过配置数据库传递内容或直接设置变量也是一样。如果类的依赖性发生变化,那么修改客户端代码没有解决方法。 –
继承和多态的要点是能够扩展对象的功能,而不会干扰使用这些扩展对象的代码。创建交易也是如此。我们将这些参数放入事务中,并根据需要扩展事务,而不是使用长参数列表的方法。 –