Random 如何在SystemVerilog模拟器之间生成重复的随机数序列?
我和某人合作了一个SystemVerilog项目。然而,我习惯于使用Synopsys VCS SystemVerilog模拟器,他也习惯于使用Cadence INCISIVE irun 一个测试台模块使用随机数为顶层设计模块生成测试输入模式。因此,我设计了一个生成随机数的类:Random 如何在SystemVerilog模拟器之间生成重复的随机数序列?,random,verilog,system-verilog,cadence,Random,Verilog,System Verilog,Cadence,我和某人合作了一个SystemVerilog项目。然而,我习惯于使用Synopsys VCS SystemVerilog模拟器,他也习惯于使用Cadence INCISIVE irun 一个测试台模块使用随机数为顶层设计模块生成测试输入模式。因此,我设计了一个生成随机数的类: class RandData; rand logic [3:0] randIn; function new(int seed); this.srandom(seed); endfun
class RandData;
rand logic [3:0] randIn;
function new(int seed);
this.srandom(seed);
endfunction
endclass
我可以用种子实例化RandData类,并在模拟中获得固定的随机数序列。然而,即使在两个模拟器中使用相同的种子,VCS获得的固定随机数序列也不同于irun获得的固定随机数序列
不幸的是,顶层设计模块的黄金输出模式取决于测试输入模式。因此,如果黄金输出模式由VCS生成的输入模式生成,黄金输出模式将与irun模拟的顶部设计输出不匹配
因此,如何使VCS和irun模拟器生成重复的随机数序列?您不应该使用带有随机刺激的黄金输出文件;您需要一个自检测试台。对设计或测试台的任何更改都可能使以前的黄金输出无效 有趣。我不相信该标准规定了使用哪种随机生成算法。因此,您不能期望使用不同的编译器生成相同的序列。我唯一想到的是使用第三个工具预生成序列,并将其提供给两个模拟。