初始化systemverilog(ovm)参数化类数组

时间:2015-11-25 16:05:53

标签: system-verilog uvm

我想监控几个分析端口,并通过一个分析端口“发布”该项目。 它适用于预定义的项目类型,但无法参数化。

代码:

   class ovm_analysis_sink #(int NUM_PORTS = 1, type T = ovm_object ) extends ovm_component;

 // .......................................
 `ovm_component_param_utils(ovm_analysis_sink#(NUM_PORTS,T))
 // .......................................

 ovm_analysis_imp #(T,ovm_analysis_sink) mon_analysis_imp[NUM_PORTS-1:0];
 ovm_analysis_port #(T) mon_analysis_port = new("mon_analysis_port", this);

 virtual function void build() ;
 string inst;
for(int i=0 ;i < NUM_PORTS ;i++ )
  begin 
    $sformat(inst,"mon_analysis_imp_%0d",i);
mon_analysis_imp[i] = new(inst,this);
  end

super.build() ;

endfunction : build

analysis_sink的用法:

 ovm_analysis_sink #(3,a_type) a_item_sink;

错误信息:

Error-[ICTTFC] Incompatible complex type usage ovm_tb.sv, 42
Incompatible complex type usage in task or function call.
The following expression is incompatible with the formal parameter of the function. 
The type of the actual is 'class $unit::ovm_analysis_sink#(3,class $unit::a_type)', 
while the type of the formal is 'class $unit::ovm_analysis_sink#(1,class ovm_pkg::ovm_object)'. 
Expression: this  Source info: ovm_analysis_imp::new(inst, this)

1 个答案:

答案 0 :(得分:1)

错误表示类型不兼容。这意味着实际(运行时)和正式(编译时)参数/类型的实现端口是不一样的。

分析端口声明时出错。如上所示声明端口会创建类型为uvm_analysis_sink #(1,uvm_object)的分析imp端口的句柄,而您希望它为uvm_analysis_sink #(3,a_type)类型。

所以,声明如下:

ovm_analysis_imp #(T,ovm_analysis_sink#(NUM_PORTS,T)) mon_analysis_imp[NUM_PORTS-1:0];

这将删除类型冲突并使其类型分配兼容。现在任何参数覆盖都可以。

我在EDAPlayground上创建了一个示例UVM代码供参考。类似适用于您的OVM测试平台。有关详细信息,请参阅this论坛问题。

相关问题