仿真错误集合

1 UVM仿真

1.1 imp声明时两个参数

Error-[MRRE] Member reference resolution error
/home/IC/uvm/uvm-1.1d/src/tlm1/uvm_analysis_port.svh, 114
Member operator “.” cannot be used on object of type int.
Expression: m_imp
Source info: m_imp.write

解决:在uvm_analysis_imp ,uvm_blocking_put_imp等IMP中,声明IMP时候有两个类型参数,

1
2
3
uvm_analysis_imp#(trans,C) C_imp;
// trans是端口传输的transaction类型
// C是实现这个端口的component

上面的错是因为少了第二个参数。

1.2 main_phase下声明对象与super.main_phase顺序

Back to file ‘top_tb.sv’.

Error-[SE] Syntax error
Following verilog source has syntax error :
“top_tb.sv”, 102: token is ‘t’
trans t;

1
2
3
4
5
6
7
8
9
virtual task main_phase(uvm_phase phase);
trans tr;
super.main_phase(phase);
while(1) begin
`uvm_info("B","B get a trans",UVM_LOW);
B_port.get(tr);
tr.print();
end
endtask

出错原因是tr的定义写在了super.main_phase(phase)之后,上面代码是正确的写法。

其他的phase类型,所以,没事不要写super.*_phase(phase)

1.3

Back to file ‘top_tb.sv’.

Error-[SE] Syntax error
Following verilog source has syntax error :
“top_tb.sv”, 38: token is ‘d’
edata d=new();

2. 语法错误

2.1 SV中task中的变量在其他语句之前定义

SsystemVerilog中,task function中可以定义变量,但这些变量需要在其他语句之前定义,包括$display语句。

2.2 接口定义的时候加()

如果接口没有参数列表,那么在top中声明接口的时候也要加上括号()

1
2
3
4
5
6
7
module top;
interface if;
,,,,
endinterface
if if0();
//不能写成if if0; 会报错。
endmodule

3. 仿真脚本

3.1 类在package中include,

类在package中用`include进去,在vcs选项中的文件是top.sv模块,接口模块文件,package文件。

3.2 用run文件和Makefile文件启动VCS的不同

用run文件启动,在run文件中引用变量可以直接写成 $UVM_HOME

但是在Makefile文件中,设置变量: cov_opt = line+tgl+fsm+cond 。使用变量要加花括号{}:${cov_opt}


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!