谈一谈SystemVerilog的randomize
提到systermverilog,最常接触的就是随机,与随机紧密相关的函数就是randomize,但是实际上我们又对randomize知道多少呢?本章节我们就梳理一下randomize()的坑。
一些之前踩过的坑:https://www.cnblogs.com/xuqing125/p/15772001.html
从下面几个例子入手:
例子一:randomize的正常使用。
- 基类bird有自己的随机变量:src/drc
- 扩展类parr有单属于自己的随机变量:a/b
例子二:A = B
- A = B;
- 仅仅对A.randomize()
- 基类的句柄A指向的是扩展类的对象B.
- A.randomize(),从结果来看B(a/b)也进行了随机化.randomize()其实就是类似于virtual的function。
例子三:A= B,A.randomize() with {a ==2 ;};
- 结果会报错,究其原因基类的句柄不能访问扩展类对象里面独有的变量。
- https://www.cnblogs.com/xuqing125/p/15931202.html
- https://www.cnblogs.com/xuqing125/p/15934714.html
- 这其实也是UVM中引入p_sequencer的原因所在。
解决方法:将基类句柄转换成扩展类的类型。
注意:这个在sequence中需要尤其注意,因为seq中涉及到随机化。