在 Verilog 测试台中测试可参数化模块的多个配置
Testing multiple configurations of parameterizable modules in a Verilog testbench
假设我有一个可参数化的 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
具有不同的值。不过,这不是很灵活 - 需要在编译时选择值。
当然,我也可以显式地实例化很多不同的模块,但这很耗时,而且对我想做的那种“模糊”测试不起作用。
我的问题:
- 有没有办法通过使用
$value$plusargs
从命令行传入的 plusarg 来做到这一点? (我强烈怀疑 Verilog 1364-2005 的答案是 'no')。
- 是否有另一种方法可以在测试台中“模糊”模块参数化,或者使用生成块是唯一的方法吗?
由于 $value$plusargs
是在运行时计算的,它不能用于设置 parameter
值,而必须在编译时完成。
但是,如果您使用 generate
实例化具有不同 parameter
设置的设计的多个实例,您可以使用 $value$plusargs
选择性地激活或启用一个实例一个时间。例如,在测试台中,您可以使用运行时参数来仅驱动特定实例的输入。
假设我有一个可参数化的 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
具有不同的值。不过,这不是很灵活 - 需要在编译时选择值。
当然,我也可以显式地实例化很多不同的模块,但这很耗时,而且对我想做的那种“模糊”测试不起作用。
我的问题:
- 有没有办法通过使用
$value$plusargs
从命令行传入的 plusarg 来做到这一点? (我强烈怀疑 Verilog 1364-2005 的答案是 'no')。 - 是否有另一种方法可以在测试台中“模糊”模块参数化,或者使用生成块是唯一的方法吗?
由于 $value$plusargs
是在运行时计算的,它不能用于设置 parameter
值,而必须在编译时完成。
但是,如果您使用 generate
实例化具有不同 parameter
设置的设计的多个实例,您可以使用 $value$plusargs
选择性地激活或启用一个实例一个时间。例如,在测试台中,您可以使用运行时参数来仅驱动特定实例的输入。