2015-11-25 38 views
0

我想監視多個分析端口,並通過一個分析端口「發佈」的項目。 它適用於預定義的項目類型,但未能參數化。初始化的SystemVerilog(OVM)參數類數組

代碼:

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

錯誤說類型不兼容。這意味着實現端口的實際(運行時)和正式(編譯時)參數/類型是不一樣的。

有一個錯誤,而聲明分析端口的。聲明如上圖所示的端口創建uvm_analysis_sink #(1,uvm_object)類型而分析小鬼端口的手柄,你希望它是uvm_analysis_sink #(3,a_type)類型。

所以,聲明如下:

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

這應刪除類型的衝突並使其類型分配兼容。現在,任何參數覆蓋應工作。

我已經創建了一個示例UVM代碼上EDAPlayground供參考。類似的情況也適用於你的OVM測試平臺。有關更多信息,請參閱this論壇問題。