关于SV中扩展类的copy函数的疑问
时间:10-02
整理:3721RD
点击:
最近在学习systemverilog,读的是经典教材《SystemVerilog for Verification》Chris Spear写的。8.5.1节中对象的复制搞不明白是啥意思。代码如下:
1. 首先在基类中,采用使用copy_data函数的写法
class Transaction;
rand bit[31:0] src, dst,data[8];
bit[31:0] crc;
virtual function void copy_data(input Transaction tr);
copy.src=src;
copy.dst=dst;
copy.data=data;
copy.crc=crc;
endfunction
virtual function Transaction copy();
copy=new();
copy_data(copy);
endfunction
endclass
2. 然后再定义一个使用copy_data函数的扩展类
class BadTr extends Transaction ;
rand bit bad_crc;
virtual function void copy_data(input Transaction tr);
BadTr bad;
super.copy_data(tr);
$cast(bad,tr);
bad.bad_crc=bad_crc;
endfunction
virtual function Transaction copy();
BadTr bad;
bad=new();
copy_data(bad);
return bad;
endfunction
endclass:BadTr
哪个大神能帮忙一句句的解释一下?尤其是扩展类那里,完全晕了。多谢!
1. 首先在基类中,采用使用copy_data函数的写法
class Transaction;
rand bit[31:0] src, dst,data[8];
bit[31:0] crc;
virtual function void copy_data(input Transaction tr);
copy.src=src;
copy.dst=dst;
copy.data=data;
copy.crc=crc;
endfunction
virtual function Transaction copy();
copy=new();
copy_data(copy);
endfunction
endclass
2. 然后再定义一个使用copy_data函数的扩展类
class BadTr extends Transaction ;
rand bit bad_crc;
virtual function void copy_data(input Transaction tr);
BadTr bad;
super.copy_data(tr);
$cast(bad,tr);
bad.bad_crc=bad_crc;
endfunction
virtual function Transaction copy();
BadTr bad;
bad=new();
copy_data(bad);
return bad;
endfunction
endclass:BadTr
哪个大神能帮忙一句句的解释一下?尤其是扩展类那里,完全晕了。多谢!
翻了几天前的帖子,还是没有人答,哎,结果都是自己慢慢摸索出来的。继续自答。
个人觉得:
class Transaction;
rand bit[31:0] src, dst,data[8];
bit[31:0] crc;
virtual function void copy_data(input Transaction tr);
copy.src=src;
copy.dst=dst;
copy.data=data;
copy.crc=crc;
中的copy,应该改为tr。是书中写错了。