关于SV中扩展类的copy函数的疑问

2019-07-15 22:55发布

最近在学习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条回答
myhedwig
1楼-- · 2019-07-16 03:17
翻了几天前的帖子,还是没有人答,哎,结果都是自己慢慢摸索出来的。继续自答。。
个人觉得:
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。是书中写错了。

一周热门 更多>