在UVM的例子中,你会发现很多地方使用了$cast,其中一些是$cast(rhs_,rhs.clone()),而另一些则没有使用.clone()($ cast(rhs_,rhs))。那么到底什么时候应该使用.clone()方法呢?
实际用不用.clone()方法取决于你是否计划修改正在$cast的对象。
在SystemVerilog中,类变量的赋值或$cast只会将句柄复制到对象,而不是对象本身。 大多数情况下,我们创建一个对象,分配或随机化该对象中的值,然后传递句柄。 但有时我们想修改对象的本地副本,所以我们将其克隆(构造+复制=克隆)。 如果我们没有克隆对象,那么与对象具有相同句柄的其他人都会看到我们正在对它进行的修改。
可以参考如下链接加深理解: