除了SystemVerilog中的defparam之外,有没有一种很好的方法来覆盖测试中的testbench参数

这是一个不是基于UVM的环境,但我有一个测试平台和多个测试。测试和测试平台都是顶层的,但将针对一次运行优化一个测试和测试平台,并为下一次运行重新优化另一个测试,依此类推。这允许一个单一的测试平台和编译所有的源代码一次,并在测试的基础上优化和模拟。我有下面这段代码,它的模拟器有问题,这是一个bug,因为从LRM的角度来看,我没有看到任何问题。此外,由于defparam在未来将被弃用,我想知道实现此行为的最好方法是什么?我不喜欢使用定义并从命令行覆盖它,因为我将处理很多参数。

以下是在模拟中有问题的代码:

module test_tb();

  
   parameter int  NUM_LAYERS                       = 3;
   parameter int  NUM_NS_PER_LAYER[NUM_LAYERS]     = '{8,8,8};


      initial
        begin
         #100;
         $display ("NUM_LAYERS is %d and NUM_NS_PER_LAYER is %p", NUM_LAYERS, NUM_NS_PER_LAYER);
         $display ("NUM_LAYERS is %d ", NUM_LAYERS);
        end
endmodule


module test();

   localparam int NS                                             = 1;
   localparam int NSP[NS]                                        = '{4};
   defparam test_tb.NUM_LAYERS                                   = 1;
   // The following 2 lines fail with simulators but some simulators will accept it if I uncomment the next line and comment out the line after it.
   //defparam test_tb.NUM_NS_PER_LAYER                             = NSP;
   defparam test_tb.NUM_NS_PER_LAYER                             = '{4};


endmodule

defparam是这样做的一个优雅的方法,但是有没有什么东西可以用类来完成并覆盖参数,但使它在testbech中可用呢?

转载请注明出处:http://www.0591kyj.com/article/20230329/1812139.html