提到systermverilog卧惜,最常接觸的就是隨機(jī),與隨機(jī)緊密相關(guān)的函數(shù)就是randomize,但是實際上我們又對randomize知道多少呢?本章節(jié)我們就梳理一下randomize()的坑峡谊。
一些之前踩過的坑:https://www.cnblogs.com/xuqing125/p/15772001.html
從下面幾個例子入手:
例子一:randomize的正常使用。
- 基類bird有自己的隨機(jī)變量:src/drc
- 擴(kuò)展類parr有單屬于自己的隨機(jī)變量:a/b
例子二:A = B
- A = B;
- 僅僅對A.randomize()
- 基類的句柄A指向的是擴(kuò)展類的對象B.
- A.randomize(),從結(jié)果來看B(a/b)也進(jìn)行了隨機(jī)化.randomize()其實就是類似于virtual的function既们。
例子三:A= B濒析,A.randomize() with {a ==2 ;};
- 結(jié)果會報錯,究其原因基類的句柄不能訪問擴(kuò)展類對象里面獨有的變量啥纸。
- https://www.cnblogs.com/xuqing125/p/15931202.html
- https://www.cnblogs.com/xuqing125/p/15934714.html
- 這其實也是UVM中引入p_sequencer的原因所在号杏。
解決方法:將基類句柄轉(zhuǎn)換成擴(kuò)展類的類型。
注意:這個在sequence中需要尤其注意斯棒,因為seq中涉及到隨機(jī)化盾致。