Specman 参数化单元

Specman Parametrized Unit

我需要在 verilog 中验证参数化模块,例如:

module A #(PAR1, PAR2, PAR3) (/*input, outputs*/);

此模块使用不同的参数值实例化了多次。

我需要生成一个 SPECMAN 单元,它可以获取参数作为 variable/port 声明的常量。 这些参数也用于逻辑计算。

我找不到将参数传递给 specman 单元的方法,因为它可以在 verilog 中完成。

可能吗?

如果没有 - 是否有替代解决方案?

是的,在 e 中您可以定义 template 结构或单元。但是,请注意参数将是类型而不是值。 例如,您可以有这样的声明:

template unit my_unit of (<first'type>, <second'type>) like base_unit {
    ......
};

然后你可以像这样实例化它:

extend sys {
    foo: my_unit of (int(bits: 16), uint) is instance;
};

无法将参数传递给 e 中的单元。但是,您可以在您的案例中使用模板:

template unit some_unit of (<len'type>) {
  some_sig : in simple_port of <len'type> is instance;
    keep soft some_sig.hdl_path() == "some_sig";
};

上面的代码将为包含端口的单元定义模板,其长度在声明单元实例时指定。以下是如何实例化两个具有不同长度的单元:

extend sys {
  unit1 : some_unit of (uint(bits : 2)) is instance;
  unit2 : some_unit of (uint(bits : 4)) is instance;
};

您可以在 EDAPlayground 上找到工作示例。

您可以通过 simple_ports 从电子代码访问 Verilog 参数,只需像普通信号一样绑定它们。 但这在这种情况下无济于事,因为这些值不能用于其他端口声明。我建议使用此处提供的解决方案或使端口足够宽以捕获所有要求(默认情况下,MSB 将由 Specman 填充 1'b0)。