1

假设我有一个可参数化的 Verilog 模块,如下例所示:

// Crunches numbers using lots of parallel cores
module number_cruncher
    #(parameter NUMBER_OF_PARALLEL_CORES = 4)
    (input clock, ..., input [31:0] data, ... etc);
    // Math happens here
endmodule

使用 Verilog 1364-2005,我想编写一个测试平台,在这个模块上运行具有许多不同值的测试NUMBER_OF_PARALLEL_CORES

我知道可行的一个选项是使用一个generate块来创建一堆number_cruncher具有不同值的不同 s NUMBER_OF_PARALLEL_CORES。但是,这不是很灵活 - 需要在编译时选择值。

当然,我也可以显式地实例化许多不同的模块,但这很耗时,并且不适用于我想做的那种“模糊”测试。

我的问题:

  • 有没有办法通过使用从命令行传入的 plusarg 来做到这一点$value$plusargs?(我强烈怀疑 Verilog 1364-2005 的答案是否定的)。
  • 是否有另一种方法可以在测试台中“模糊”模块参数化,或者使用生成块是唯一的方法?
4

1 回答 1

2

由于$value$plusargs在运行时评估,它不能用于设置parameter值,这必须在编译时完成。

但是,如果您使用generate不同的设置来实例化设计的多个实例parameter,您可能可以使用$value$plusargs一次选择性地激活或启用一个实例。例如,在测试台中,您可以使用 runtime 参数仅驱动特定实例的输入。

于 2022-01-11T17:30:08.887 回答