写的verilogA模型,对某个参数加了随机分布,但是仿出来每次的结果都完全一样,查了查,又问了问师兄室友,改了下seed就好了,仿出来结果就不一样了。
verilog-A中seed的含义
- a=$ random(seed1)% 16,b=$ random(seed2) %16
是不是可以理解为一种基准?
答:seed 是种子,也可以简单理解是伪随机数的初值。
如果不用seed, 你的统计仿真就不可重复了。用计算机做系统仿真最重要的要求就是结果具有可重复性,哪怕是带有随机数的仿真。所以运用seed很好的解决了这个问题。
意思是用了seed的话每次运行都是产生同样的随机数序列?而不是完全的随机。还是说可以理解成一种伪随机?
是的, 计算机理论上没有什么完全的随机,不同之处是在多少(几百万次,几十亿次等)的样本中重复出现的概率多少. 不信你用相同的seed在不同的窗口运行完全相同的仿真,如果结果不一样这个仿真器就别卖了。
那最后,怎么来进行重复性仿真,送入随机的parameter(seed)来输出多次仿真的结果呢?
这里用**.data**命令,可以用synopsys官网上下的一个perl脚本。这里给一个百度云链接。
也可以自己matlab里生成parameter的ASCII文件,然后用**.data**进行调用。star-hspice-manual里的第86页。
最后导出数据进行处理或在cosmosscope里绘图即可。