微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > vcs验证问题

vcs验证问题

时间:10-02 整理:3721RD 点击:
测试平台是会产生随机数测试向量,工具采用vcs,但是测试跑几天之后内存就不足了。如果关闭vcs再重新跑,verilog测试平台在vcs产生的随机数向量与前几天的相比是不变的。有什么方法可以使得vcs重新跑的时候随机向量与上一次跑的不同呢?

使用不同的随机种子,simv的时候加上选项"-seed=XXX“,XXX就是你设定的随机种子。

楼上正解

谢谢,但是我在加上时遇到问题,说-seed=5(这里的数是不是每次仿真都换一个不一样的就可以使得随机量不同?)是不被支持的选项,我的版本是E-2011.03,谢谢大牛指点

试一下:+ntb_random_seed=value
下面是manual里面的解释:
Sets the seed value to be usedby the top-level random number
generator at the startof simulation. The srandom( seed)system
function call overridesthis setting. The value can be any integer.

谢谢,这个我看过,也按照这个试过,还是不好用。$random函数采用这样{$random}%8的形式,并没有$random(seed)用到

不要使用$random这种随机,其实这个$random是调用系统(UNIX)自带的函数,而不是vcs仿真器(sv)里面的,这个是不受种子(seed)控制的,要使用$urandom,或者$urandom_range。

嗯 同求此问题答案

应该是用 不同的种子来运行

module test_seed;reg [9:0] test_reg;
initial begin
test_reg = $urandom(256);
$display("test_reg is %b",test_reg);
end
endmodule

vcs test_seed.v -sverilog
./simv +ntb_random_seed=5
// ./simv +ntb_random_seed=56
这两个随机数还是一样的,这样写有什么问题吗


你这样做并没有使用vcs的随机生成器,给你个例子:
program test();
class a;
rand int i;
constraint c_i{i inside [1:10]};
endclass
a u_a;
initial begin
u_a = new();
u_a.randomize();
end
endprogram;
这样子出来的i值就是受ntb_random_seed控制的,一般都是这样用。

高手啊,十分感谢。不过这是systemverilog吧,如果用verilog怎么写呢?

$urandom(256);
你这样写就是指定种子为256,当然换随机种子也不起作用了。把256去掉再试一下。
再个,random相关的可以看一下sv的IEEE标准说明文档。

嗯,我再看下,sv没有用过。十分感谢

直接加选项 +ntb_random_seed_automatic
这样的种子都是随机产生的不就可以了

受教了

Thanks..

紫薯布丁

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top