一段systemverilog求助
时间:10-02
整理:3721RD
点击:
class Transaction;
bit[31:0] addr,crc,data[8];
Statistics stats;//4
static int count=0;
int id;
function new;
stats=new();//8
id=count++;
endfunction
function Transaction copy;
copy=new();
copy.addr=addr;
copy.crc=crc;
copy.data=data;
copy.stats=stats.copy();
id=count++;
endfunction
endclass
class Statistics;
time startT,stopT;
static int ntrans=0;
static time total_elapsed_time=0;
function time how_long;
how_long=stopT-startT;
ntrans++;
total_elapsed_time+=how_long;
endfunction
function void start;
startT=$time;
endfunction
function Statistics copy();
copy=new();
copy.startT=startT;
copy.stopT=stopT;
endfunction
endclass
** Error: H:/systemverilog/work/q.sv(4): Invalid type 'Statistics'. Please check the type of the variable 'stats'.
** Error: H:/systemverilog/work/q.sv(8): (vlog-2730) Undefined variable: 'stats
class不是相当于module吗,不能包含其它类吗?这问题该怎么解决
bit[31:0] addr,crc,data[8];
Statistics stats;//4
static int count=0;
int id;
function new;
stats=new();//8
id=count++;
endfunction
function Transaction copy;
copy=new();
copy.addr=addr;
copy.crc=crc;
copy.data=data;
copy.stats=stats.copy();
id=count++;
endfunction
endclass
class Statistics;
time startT,stopT;
static int ntrans=0;
static time total_elapsed_time=0;
function time how_long;
how_long=stopT-startT;
ntrans++;
total_elapsed_time+=how_long;
endfunction
function void start;
startT=$time;
endfunction
function Statistics copy();
copy=new();
copy.startT=startT;
copy.stopT=stopT;
endfunction
endclass
** Error: H:/systemverilog/work/q.sv(4): Invalid type 'Statistics'. Please check the type of the variable 'stats'.
** Error: H:/systemverilog/work/q.sv(8): (vlog-2730) Undefined variable: 'stats
class不是相当于module吗,不能包含其它类吗?这问题该怎么解决
编译顺序呢? 有没有把Statistics class 放在之前编译
typedef class
我是将它作为一个完整代码进行编译的,verilog中module模块不是可以那样一起编译吗?这个需要分开按顺序编译?
把下面一个class放上面编译通过了,为什么这样呢,verilog可以自顶向下,这个不能?
是这样的,编译时需要先后顺序,先声明才能使用,或者使用上面有人提到的typedef class statistics放在前面即可。编译时加include+env路径也可以