这是一个不是基于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