在systemverilog代碼運行中,EDA工具會先給1個隨機種子值(seed),所有代碼里的隨機數都是根據這個初始種子衍生出來的。因此,通常來說,只要代碼沒有改動,且初始種子一樣,那么仿真運行結果也一樣。那么在questasim里如何設置和查看種子值呢?
1. 設置種子值
Questasim給vsim命令提供了-sv_seed | random的參數。有幾個關鍵點:
如果vsim后面沒有跟著sv_seed,那么默認seed是0;
如果vsim后面跟著sv_seed,但沒有提供 或 random,那么會報錯;
如果sv_seed后面跟著非負32-bit整數(interger),那么這個非負整數就是初始seed值。如果是無效值的話,那么questasim會報warning信息并且忽略掉;
如果sv_seed后面這個random單詞的話,那么vsim命令每次運行都會使用隨機生成的seed;
sv_seed在modelsim.ini文件里是只讀的,不能改寫;
2. 讀取種子值
Questasim里提供了$get_initial_random_seed系統函數,User可以在systemverilog code里調用這個系統函數就可以得到當前仿真使用的初始seed值。
另外一種方式是在Tcl shell窗口中,通過echo $Sv_Seed把seed值展示在shell窗口。
3. 使用例子
3.1 設置初始seed值為666的整數:
vsim -sv_seed 666
3.2 設置初始seed值為隨機數:
vsim -sv_seed random
4. 測試代碼
測試代碼如下:
vsim -sv_seed random
$display("1. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);
vsim -sv_seed 666
$display("2. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);
vsim
$display("3. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);
vsim -sv_seed
$display("4. The seed is: %0d, random data:%0d", $get_initial_random_seed, $urandom);
結果如下:
1. The seed is: 281111952, random data:3445949350
2. The seed is: 666, random data:3072267859
3. The seed is: 0, random data:313949478
Error. Use the -help option for complete vsim usage.
4. Error. Use the -help option for complete vsim usage.
-
EDA工具
+關注
關注
4文章
264瀏覽量
31714 -
Verilog
+關注
關注
28文章
1343瀏覽量
109985 -
TCL
+關注
關注
10文章
1715瀏覽量
88465
發布評論請先 登錄
相關推薦
評論