SystemVerilog主要是拿來驗證Verilog Design,需要盡可能的驗證所有可能的狀況,但是如果所有test case都是由驗證者一個一個想的話,很容易就遺漏一些沒考慮到的狀況,所以要用random generator產生隨機的值去驗證design。
但因為某些random的值可能是不合法的輸入,所以在使用random方式產生test input的時候需要和constraint搭配,產生出合理的test input。
要產生出random variable需要在變數宣告的前面加入rand或randc,這兩個差別是rand會直接隨機產生random值,而randc是週期性的隨機,要等全部的值都取過之後才會randc到重覆的值。
Example:
1 | class rand_cls; |
Output:
1 | # rand_val:3, ranc_val:2 |
上面的例子可以看到
rand_val有使用constraint限制random的值必須是小於等於3,rand_val則是限制random的值必須大於等於1且小於等於3。
可以看到rand_val所random出來的值都小於等於3,每次random出來的值都是隨機介於0和3之間。
randc_val所random出來的值一定會等到1到3之間的值都被random過了之後,才會重複random,所以每三列一定都會出現數值1/2/3。