在systemverilog代碼運(yùn)行中,EDA工具會(huì)先給1個(gè)隨機(jī)種子值(seed),所有代碼里的隨機(jī)數(shù)都是根據(jù)這個(gè)初始種子衍生出來的。因此,通常來說,只要代碼沒有改動(dòng),且初始種子一樣,那么仿真運(yùn)行結(jié)果也一樣。那么在questasim里如何設(shè)置和查看種子值呢?
1. 設(shè)置種子值
Questasim給vsim命令提供了-sv_seed | random的參數(shù)。有幾個(gè)關(guān)鍵點(diǎn):
如果vsim后面沒有跟著sv_seed,那么默認(rèn)seed是0;
如果vsim后面跟著sv_seed,但沒有提供 或 random,那么會(huì)報(bào)錯(cuò);
如果sv_seed后面跟著非負(fù)32-bit整數(shù)(interger),那么這個(gè)非負(fù)整數(shù)就是初始seed值。如果是無效值的話,那么questasim會(huì)報(bào)warning信息并且忽略掉;
如果sv_seed后面這個(gè)random單詞的話,那么vsim命令每次運(yùn)行都會(huì)使用隨機(jī)生成的seed;
sv_seed在modelsim.ini文件里是只讀的,不能改寫;
2. 讀取種子值
Questasim里提供了$get_initial_random_seed系統(tǒng)函數(shù),User可以在systemverilog code里調(diào)用這個(gè)系統(tǒng)函數(shù)就可以得到當(dāng)前仿真使用的初始seed值。
另外一種方式是在Tcl shell窗口中,通過echo $Sv_Seed把seed值展示在shell窗口。
3. 使用例子
3.1 設(shè)置初始seed值為666的整數(shù):
vsim -sv_seed 666
3.2 設(shè)置初始seed值為隨機(jī)數(shù):
vsim -sv_seed random
4. 測(cè)試代碼
測(cè)試代碼如下:
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);
結(jié)果如下:
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工具
+關(guān)注
關(guān)注
4文章
267瀏覽量
31794 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110107 -
TCL
+關(guān)注
關(guān)注
10文章
1725瀏覽量
88612
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論