如何在 SystemVerilog 模拟器之间生成重复的随机数序列?

How to generate a duplicate random number sequence between SystemVerilog simulators?

我和某人合作了一个 SystemVerilog 项目。不过我习惯用Synopsys VCS SystemVerilog模拟器,他习惯用Cadence INCISIVE irun

一个测试台模块使用随机数生成测试输入模式给顶层设计模块。于是,我设计了一个生成随机数的class:

class RandData;
    rand logic [3:0] randIn;
    function new(int seed);
        this.srandom(seed);
    endfunction
endclass

我可以用种子实例化 class RandData,并在模拟中获得固定的随机数序列。但是VCS得到的固定随机数序列和irun得到的固定序列即使两个模拟器使用相同的seed也不一样

不幸的是,顶层设计模块的黄金输出模式取决于测试输入模式。因此,如果用 VCS 生成的输入模式生成黄金输出模式,则黄金输出模式将与模拟的顶级设计输出 不匹配 通过 irun.

因此,如何让 VCS 和 irun 模拟器生成重复的随机数序列?

您不应该使用带有随机刺激的黄金输出文件;您需要一个自检测试平台。对设计或测试台的任何更改都可能会使之前的黄金输出无效。